Looking for help?
< All Topics

API Documentation (Fixed format)

Understand The PrinterCo API In 6 Steps

PrinterCo main logo 1
PrinterCo API Documentation (Fixed format)

Where we differ from other cloud print servers is our unique combination to manage your printers. Some of the tools we provide for our users are the ability to monitor the printer status (whether it’s currently online or offline), and to also send an email notification whenever the status changes.

To use a PrinterCo terminal you need to have a valid subscription. Check out which subscription plan is best suited for your needs.

We also provide some tools to operate the printer remotely. This becomes very handy for having to make adjustments to the printer settings for your clients who are already in the live field.

Some other tools include user management, reports, watchdog and more.

We’ve worked relentlessly to deliver a system for maximum user flexibility, and at the same time keep things easy to use – even for the less tech-savvy. See below how we’ve broken down our powerful but simple-to-understand API in just 6 simple steps.

PrinterCo API 2
PrinterCo API Documentation (Fixed format)
1. Send Order To API

The first step is to send your order to our API. How? It depends on whether you’re using one of our WordPress plugin extensions or you’re doing the API integration yourself. For the former method, you don’t need to do much as we’ve taken care of the code for you. All you need to do is just install the plugin, punch in your API and Printer ID details, and you’re ready to go! For a more in-depth tutorial (with screenshots), be sure to check out WooCommerce Extension or WP-Pizza Extension.

For the latter method, where you’re not using an open-source platform (such as WordPress), you’ll need to first format your order content so that it can be read as an HTTP POST. For more details on how to do this, along with a list of available order parameters that you can use (i.e. order ID, order type, currency etc), see our sample PHP file. Enter your email to get your copy. And yes…don’t worry…it’s free!

Once you’ve formatted your order correctly, you’ll need to send it to our API through our API URL – Click Here.

2. Probe Server Every 30 Sec

If your order was sent successfully, it’ll be sitting in the Transaction List with a pending status. Orders with pending status are picked up by the printers and are printed. If you don’t see your order in the Transaction List, then chances are it’s in the WatchDog. All orders that fail to follow protocol are dumped here, with details on how you can possibly fix the issue. More information on our WatchDog can be found on our forum.

Once you’ve subscribed to our print server and connected your first printer, it’s programmed to probe our servers every 30 seconds to search for any new orders (or orders with a pending status).

Although in most cases you won’t need to, you have the option to reduce this frequency to a longer gap (i.e. 60 seconds). A feature if you’re on a tight budget with data costs. To change this setting, you’ll need to navigate through the printer menus – Tutorials for this and other settings can be found here.

3. New Order

When an order with a pending status is picked up, the printer will stop probing the server. The contents of the order are then pulled for a quick print job, which usually takes a couple of seconds. Orders with pending status are highlighted in yellow, accepted orders are green and rejected orders are red.

Once the order is printed, the printer will resume probing the servers after another 30-second break.

4. Print Order

We understand that businesses operate differently, so we’ve adapted our system to give them more flexibility for our users when printing their orders. You can set up how you want your orders to print beforehand. This means, that you can set the printer to initially ring to grab your attention. And then, after a short user interaction have the order printed. Or you set it to print the order immediately, and then ring while waiting for you to accept or reject the order. You can even set up the printer to view your order on the screen before deciding to print it. So play around with the different combinations to so see what works for your business.

5. Update Order Status

If enabled, after the order is printed, you’ll be required to accept or reject the order. What follows after, is the option to enter an estimated time for completion, or a reason for the rejection. This information is then sent to our print servers and saved for further processing.

Coming soon are more advanced features that involve an SMS notification of the updated order status and live order tracking.

6. Customer Acknowledgement

After the order status is changed from the printer (i.e. when the order has been accepted or rejected), the information is passed into a page referred to as the Notify URL. You’ll need to create this page for your website and include the URL in your code when submitting the order to our API. From this page, you can extract the new order status and then take the next appropriate actions to notify the customer.

Here’s another reason that makes us one of the best cloud printing service providers.

To avoid any disappointments, we encourage you to use our demo account to do your integration. There, you’ll find a virtual printer. It won’t print anything out for you, but you can use it as a guide to testing if your setup works correctly. Once you’re able to send orders to the virtual test printer and see them in the transaction list, you can then commit to subscribing and buying your own printer.

Order Submit URL
URL https://mypanel.printerco.net/submitorder.php
NoteSubmit your order details according to API guidelines to this URL using the post method including API key, API password, Printer ID etc. from your website to our API. For more details please check our API documentation.
Also please note that you should do URL encoding before sending it to API.
Implementation Guideline
api_keyMandatoryStringAPI key of client account
api_passwordMandatoryStringAPI password of client account
notify_urlMandatoryStringURL to where you want to be notified about order accept/reject from the printer
receipt_headerMandatoryStringThe header for print receipt
receipt_footerMandatoryStringThe footer for print receipt
printer_idMandatoryIntegerPrinter ID to where you want to send the order
order_idMandatoryIntegerOrder ID to track order (must be unique, must not contain any space )
currencyMandatoryStringYour currency
order_typeMandatoryIntegerOrder type:
1 – Delivery
2 – Collection
3 – Reservation
payment_statusMandatoryIntegerStatus of the payment:
6 – paid
7 – not paid
payment_methodMandatoryStringPayment method name.
Ex. Cash, paypal etc.
order_timeOptionalDate and TimeTime and date when order placed.
e.g- 18:30 17-09-10 (h:m dd-mm-yy)
delivery_timeMandatoryDate and TimeTime and date of delivery.
e.g- 18:30 17-09-10 (h:m dd-mm-yy)
auth_codeOptionalStringAuthentication code of payment method
FieldImportanceFormat Details
line_items[] -> array(
category – it is the item category name
item(string)item – it is item name
item_description(string)item_description – it is item description (ex. Selection or toppings)
item_qty(integer)item_qty – it is item quantity
item_price(number)item_price – quantity X unit priceAll post variables for the item must be passed to API even if any field needs to be kept
item_addon[] ->
array (
Mandatory at least oneArrayitem_addon – it is additional item positions
item_addon -> title – it is header of additional positions in order item
name(string)item_addon -> name – it is name of additional item position
item_addon -> price – it is price of additional item position
FieldImportanceFormat Details
deliverycostMandatoryNumberZero or greater
card_feeMandatoryNumberZero or greater
extra_feeOptionalNumberZero or greater
total_discountOptionalNumberZero or greater
total_amountMandatoryNumberZero or greater (must be calculated total including item price and other fees and discount)
cust_nameMandatoryStringCustomer name
cust_addressMandatoryStringCustomer address
cust_phoneMandatoryStringCustomer phone number
cust_instructionOptionalStringCustomer instruction about order
isVarifiedMandatoryIntegerCustomer verification status
4 – verified
5 – not verified
num_prev_orderOptionalIntegerTotal number of orders of this customer

POST Example

<form method="post" action="https://mypanel.printerco.net/submitorderext.php">
<input name="api_key" value="Your API Key" />
<input name="api_password" value="Your API Password" />
<input name="notify_url" value="Notify URL" /> <!-Notify url is your websites url where you would like to get notification from isynctel api -->
<input name="receipt_header" value="Header Line1@@123 Street Address, City, Zip Code" />
<input name="receipt_footer" value="Thanks for your custom..." />
<input name="printer_id" value="Your printer ID" />
<input name="order_id" value="OrderID" />
<input name="currency" value="Currency" /><!--ex. USD/GBP -->
<input name="order_type" value="1" /><!--Delivery=1, Pick up=2, Reservation=3-->
<input name="payment_status" value="6" /><!--Paid=6, Not Paid=7-->
<input name="payment_method" value="Payment Method" />
<input name="delivery_time" value="18:30 17-09-10 " /><!--Format=HH:MM DD-MM-YY-->
<input name="auth_code" value="Payment authorization code" />

<input name="line_items[0][category]" value="Category 1" />
<input name="line_items[0][item]" value="Item Name 1" />
<input name="line_items[0][item_description]" value="Item description 1" />
<input name="line_items[0][item_qty]" value="1" />
<input name="line_items[0][item_price]" value="10.50" />
<input name="line_items[0][item_addon][0][title]" value="Additional item title 1" />
<input name="line_items[0][item_addon][0][name]" value="Additional item name 1" />
<input name="line_items[0][item_addon][0][price]" value="5.50" />

<input name="line_items[0][category]" value="Category 2" />
<input name="line_items[0][item]" value="Item Name 2" /> 
<input name="line_items[0][item_description]" value="Item description 2" />
<input name="line_items[0][item_qty]" value="1" />
<input name="line_items[0][item_price]" value="10.50" />

<input name="line_items[0][category]" value="Category 3" /> 
<input name="line_items[0][item]" value="Item Name 3" />
<input name="line_items[0][item_description]" value="Item description 3" />
<input name="line_items[0][item_qty]" value="1" /> 
<input name="line_items[0][item_price]" value="10.50" />
<input name="line_items[0][item_addon][0][title]" value="Additional item title 3" />
<input name="line_items[0][item_addon][0][name]" value="Additional item name 3" />
<input name="line_items[0][item_addon][0][price]" value="5.50" />

You can place more items here using above format.
Please note that you don't need to send category name for the items after first item if the category name is same and if you put all same category items consecutively.
<input name="deliverycost" value="3.50" />
<input name="card_fee" value="0.50" />
<input name="extra_fee" value="1.50" />
<input name="total_discount" value="4.50" />
<input name="total_amount" value="56.50" /><!--Grand Total -->
<input name="cust_name" value="Customer Name" />
<input name="cust_address" value="Customer address" />
<input name="cust_phone" value="Phone number" />
<input name="cust_instruction" value="Special instruction" />
<input name="isVarified" value="4" /><!-Verified=4, Not verified=5 -->
<input name="num_prev_order" value="Number of previous order" />
<input type="submit" value="Submit" />
Error Response
      <error>	Authentication failed	</error>
      <error>	Other errors...</error>
Success Response
      <msg>Order has been stored successfully</msg>

Order Updates Notification

When the printer sends a callback response to API the API sends a notification to the Provided Notify URL with the order status. In your notification URL, you will get a notification regarding the status of the order, all the information will be submitted via post method which will allow you to grab information easily.

Post variables:
“printer_id” =Printer ID
“order_id” =Order ID
“status” =1 -> accepted | 2 -> rejected
“msg” =message from the printer (this variable will not be present for manual order update from MyPanel)
“delivery_time” =confirmed delivery time from the printer (this variable will not be present for manual order update from MyPanel)
“manual_update” =1 -> manual update identifier
“booking” =1 -> manage booking identifier

Please note that you will not get the notification while you are sending the order to API even if the notify URL is the same as where you are sending the order to API. API will send the response later automatically when the order will be accepted/rejected from the printer to that Notify URL you provided with the order. So we recommend you use a separate URL/file to send the order to API and receive notification from API to avoid confusion.

Example in PHP:

Let’s say you are sending the order the URL of your site www.example.com/sendorder.php to API,
So you need to write the necessary code on sendorder.php to send order information from your site to API. I am not telling you the details here on how to send the order to API. Please check our example HTML form above to send order information to API.

Let’s say you have used the value of the notification URL field


in the orders sending form like

<input name=”notify_url” value=”www.example.com/receivenotification.php” />

then MyPanel API will send a notification to


as soon as API get a response from the printer when an order will be accepted/rejected after printing. Here is the example code to grab the information from the API notification that needs to be placed on the receivenotification.php file.

$printer_id = $_REQUEST['printer_id']; 
$order_id = $_REQUEST['order_id']; 
$order_status = $_REQUEST['status']; 
$message = $_REQUEST['msg']; 
$delivery_time = $_REQUEST['delivery_time']; 

   //order has been accepted from the printer
   //do your necessary task for accepted order like update database, send email to the customer to inform him that his order has been accepted and will be delivered on the returned delivery time (variable $delivery_time).
   //order has been rejected from printer
   //do your necessary task for rejected order like update databse, send email to customer to inform him that his order has been rejected for the returned reason (variable $message).

Get Printer Status

You can get printer status programmatically through API.

api_keyMandatoryStringAPI key of client account
api_passwordMandatoryStringAPI password of client account
printer_idMandatoryIntegerPrinter ID for which you want to get the status
Success response:
      <printer_id>Printer ID</printer_id>
      <printer_status>active or inactive</printer_status>
      <shop_status>open or closed</shop_status>
      <last_connected>last connection time(YYYY-MM-DD HH:MM:SS) or NA</last_connected>
      <connection_status>connected or not connected</connection_status>

Please note that you can use the connection status that is calculated by the offline time settings of your MyPanel account or you need to decide whether the printer is connected or not by the last connection time. Because it’s up to you how long you want to allow to calculate the connection status. Just to inform you that only if the printer is Idle, the printer connects to MyPanel in each 30 seconds period to check for new orders. Its (30 seconds) sometimes may vary due to a network issue. And also if the printer user is busy navigating other sections like the menu or other features then the printer only connects to the MyPanel after the user back to Idle mode. So please keep it in mind when you calculate connection status.

Failed response:
      <error>	Authentication failed	</error>
      <error>	Other errors...</error>

Get Order Status

You can get order status programmatically through API.

api_keyMandatoryStringAPI key of client account
api_passwordMandatoryStringAPI password of client account
printer_idMandatoryIntegerAssociated Printer ID
order_idMandatoryIntegerOrder ID for which you want to get the status
Success response:
      <printer_id>Printer ID</printer_id>
      <order_id>Order ID</order_id>
      <order_status>pending or accepted or rejected</order_status>
      <accepted_for>agreed delivery/pickup time if the order is accepted</accepted_for>
      <rejected_for>rejected reason if order is rejected</rejected_for>

Please note that if the order status is accepted then the rejected_for field will contain NA value and if the order status is rejected then the accepted_for field will contain NA value.

Failed response:
      <error>	Authentication failed	</error>
      <error>	Other errors...</error>

Get Shop Status (iconnect printers only)

Once the shop status is changed via the printer, a notification is sent to our server to update our records. And once this is updated, the website in question is notified of the new shop status through the notify URL. You can check the ‘status’ or ‘update_shop_status’ variables to see if your eCommerce store should be opened or closed for business.

printer_IDMandatoryStringAssociated Printer ID
statusMandatoryInteger0 for shop is closed; 1 for shop is open
update_shop_statusMandatoryInteger1 for a change is needed; 0 not needed

Below is a template PHP script that you can use to send orders from your website to the PrinterCo API. To alter the font settings and printer behaviour, you can use either your printer or your MyPanel dashboard.

To change the fonts, you can refer to the article Optimize receipt fonts for the best layout

To change the printer behaviour, you can refer to the section Printer Functions

After integrating with our API, if you find that your orders are still not printing out from your printer, head over to the Watchdog to see if any errors were found with your order submission. Check out the article Troubleshooting with Watchdog for more help.


// ======================================================
// PART 1. Set-up required variables from a typical order - You can find more details for the post fields in your MyPanel dashboard. Visit mypanel.printerco.net
// ======================================================
$order_id = '32001';
$currency = 'USD';

$order_type = 'delivery';
$payment_status = 'paid'; 
$payment_method = 'creditcard';
$auth_code = '443AD453454'; //identification code of payment

$order_time = '18:30 14-08-14'; //h:m dd-mm-yy
$delivery_time = '18:45 14-08-14'; //h:m dd-mm-yy

$deliverycost = 3.50;
$card_fee = 2.50;
$extra_fee = 0.00;
$total_discount = 1.50;
$total_amount = 15.00;

$cust_name = 'Jhon Smith';
$cust_address = 'Address line1%%address line2%%...';
$cust_phone = '44034343434';
$isVarified = 'verified'; 
$cust_instruction = 'Make it spicy';
$num_prev_order = 10;

// ===================================================
// Part 2. Additional options for the printer settings - These can also be changed from your MyPanel dashboard
// ===================================================
$apply_settings = 0; //0=settings NOT applied, 1=settings applied
$auto_print = 0;
$auto_accept = 0;
$enter_delivery_time = 1;
$time_input_method = 1;
$time_list = '0-5-10-15-20-25-30-35-40-45-50-55-60';
$extra_line_feed = 3;

// =============================================
// Part 3. Save the items ordered into an array
// =============================================
$menu_item = array(
    'category'=>'item category 1', 
    'item'=>'item name 1', 
    'item_description'=>'item description 1', 
    'item_addon' => array(
         'title'=>'additional item title 1', 
         'name'=>'additional item name 1',
         'title'=>'additional item title 2',
         'name'=>'additional item name 2',
         'price'=> '5.50'
    'category'=>'item category 2', 
    'item'=>'item name 2', 
    'item_description'=>'item description 2', 

// =============================
// PART 4. API access credential - Find this in your MyPanel dashboard under My account > Edit Information.
// =============================
$api_key = 'apikey';
$api_password = 'secretapipassword'

// ============================
// PART 5. PrinterCo printer ID - visit your MyPanel dashboard and then the Printer List page to find the printer ID.
// ============================
$printer_id = 2501;

// =====================================
// PART 6. Set receipt header and footer
// =====================================
$receipt_header = "PrinterCo Restaurant%%Kemp House, 160 City Road%%London, EC1V 2NX%%0800 689 5326";
$receipt_footer = "Thank you";

// ==========================
// PART 7. Notification URL - When an order is either accepted or rejected on the printer, this info will be sent to this URL.
// ==========================
$notify_url = 'http://yourwebsite.com/notify.php';
// Even if this will not be used, this is a mandatory field needed to send orders to the API

// =========================================
// PART 8. Preparing post fields as an array 
// before sending to the PrinterCo API
// =========================================
$post_array = array();

$post_array['api_key'] = $api_key;
$post_array['api_password'] = $api_password;

$post_array['receipt_header'] = $receipt_header;
$post_array['receipt_footer'] = $receipt_footer;

$post_array['notify_url'] = $notify_url;
$post_array['printer_id'] = $printer_id;

$post_array['order_id'] = $order_id;
$post_array['currency'] = $currency;

//1=Delivery, 2=Collection/Pickup, 3=Reservation
  $post_array['order_type'] = 1;
else if($order_type=='collection' || $order_type=='pickup'){
  $post_array['order_type'] = 2;
else if($order_type=='reservation'){
  $post_array['order_type'] = 3;

//6=paid, 7=not paid
  $post_array['payment_status'] = 6;
  $post_array['payment_status'] = 7;
$post_array['payment_method'] = $payment_method;
$post_array['auth_code'] = $auth_code;

$post_array['order_time'] = $order_time;
$post_array['delivery_time'] = $delivery_time;

$post_array['deliverycost'] = $deliverycost;
$post_array['card_fee'] = $card_fee;
$post_array['extra_fee'] = $extra_fee;
$post_array['total_discount'] = $total_discount;
$post_array['total_amount'] = $total_amount;

$post_array['cust_name'] = $cust_name;
$post_array['cust_address'] = $cust_address;
$post_array['cust_phone'] = $cust_phone;

//4=verified, 5=not verified
  $post_array['isVarified'] = 4;
  $post_array['isVarified'] = 5;
$post_array['cust_instruction'] = $cust_instruction;
$post_array['num_prev_order'] = $num_prev_order;

$post_array['apply_settings'] = $apply_settings;
$post_array['auto_print'] = $auto_print;
$post_array['auto_accept'] = $auto_accept;
$post_array['enter_delivery_time'] = $enter_delivery_time;
$post_array['time_input_method'] = $time_input_method;
$post_array['time_list'] = $time_list;
$post_array['extra_line_feed'] = $extra_line_feed;

$post_array['line_items'] = $menu_item;

// ========================================
// Part 8. Post order data to PrinterCo API
// ========================================
$printerco_api_url = 'https://mypanel.printerco.net/submitorderext.php';
$response = post_to_api($printerco_api_url,$post_array);

//do your necessary things here based on the response status
  //order submitted successfully
  //order submission failed because of the following reason

// ===================================
// Part 9. Post data to API using CURL
// ===================================
function post_to_api($url, $post_data) {
  $output = array();
  $fields = http_build_query($post_data);
  $curlSession = curl_init();
  curl_setopt($curlSession, CURLOPT_URL, $url);
  curl_setopt($curlSession, CURLOPT_HEADER, 0);
  curl_setopt($curlSession, CURLOPT_POST, 1);
  curl_setopt($curlSession, CURLOPT_POSTFIELDS, $fields);
  curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curlSession, CURLOPT_TIMEOUT, 30);
  curl_setopt($curlSession, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($curlSession, CURLOPT_SSL_VERIFYHOST, 1);
  $rawresponse = curl_exec($curlSession);
  $response_array = simplexml_load_string($rawresponse);
  if($response_array->status == 'OK'){
    $output['status'] = 'OK';
    $output['details'] = (string)$response_array->details->msg;
    $output['status'] = 'FAILED';
    $output['error'] = array();
    foreach($response_array->details->error as $val){
      $output['error'][] = (string)$val;
  return $output;

Next Build an app with AppInstitute’s app builder & PrinterCo’s receipt printer
Table of Contents
    Your Cart
    Your cart is emptyReturn to Shop