Receipt Printing API

This documentation article discusses the Receipt Printing API which is available for the V400m device only

IntroductionAnchorIcon

The V400m reader has a built-in receipt printer which can be triggered by using the receipt printing API's requestPrintFromInStoreReader mutation discussed on this page. The receipt printing API allows for an API caller to fully customize the text, line items, images, and other information printed on the V400m built-in receipt printer. The total contents on a given receipt printing request cannot exceed 122,880 bytes in size, giving the API caller ample room for a fully customized receipt.

Initiating a printing requestAnchorIcon

To initiate a printing request using the requestPrintFromInStoreReader API mutation you must specify a readerId for the V400m device you want to print from and the contents that you would like to print on the receipt. For the request to be successful there must be a minimum of 1 content and a maximum of 500 contents in the request. Each content represents a text line or an image to be printed on the receipt. The contents for any given receipt request cannot exceed 122,880 bytes in size. Within the contents you must specify the type of input being either a text or an image.

Text InputsAnchorIcon

When using the text input to write a text line on the receipt you may specify the text value which is the actual text being printed, the alignment of the text, and the endOfLineFlag to determine when a given text line should be ended to start a new line with your next content. The default styling will apply to the text unless you also specify the textDecoration which controls the emphasis on the text, the fontWeight, the fontStyle, and the fontSize.

Image InputsAnchorIcon

When using the image input to print images such as business logos or QR codes the image must be in a PNG image format and cannot exceed 76,800 bytes in size. The PNG image must also be base64 encoded before passing the base64 encoded string in the value API field. You may also specify the endOfLineFlag to determine when the next text line or image line should begin, as well as the alignment of the image to be printed. For optimization, the ideal image width is 300 pixels.

Example print requestAnchorIcon

  1. GraphQL Mutation
  2. GraphQL Variables
  3. Sample API Response
mutation RequestPrintFromInStoreReader($input: RequestPrintFromInStoreReaderInput!) {
              requestPrintFromInStoreReader(input: $input) {
                  clientMutationId
                  id
                  reader {
                      id
                      name
                      status
                      location {
                          id
                          name
                          address {
                              streetAddress
                              extendedAddress
                              locality
                              region
                              postalCode
                              countryCode
                          }
                      }
                  }
                  status
              }
          }

Once you make the initial request you must also begin a context ID polling process so that your application can determine whether the printing action was successful or not.

Example context ID polling requestAnchorIcon

We recommend polling every 1-2 seconds to get the final result. There is a default timeout of 30 seconds if the print is unsuccessful. Follow our general node query polling logic documented in our payment processing documentation.

  1. GraphQL Mutation
  2. GraphQL Variables
  3. Sample API Response
query ID($contextId: ID!) {
          node(id: $contextId) {
            ... on RequestPrintInStoreContext {
                __typename
                id
                status
                errors {
                    message
                    errorCode
                }
            }
          }
        }

Printing Receipts in Offline ModeAnchorIcon

If you are implementing the offline processing feature then you may also want to be able to print receipts while in offline mode. This is supported, see the example offline receipt printing requests below:

Example offline printing requestAnchorIcon

  1. GraphQL Mutation
  2. GraphQL Variables
  3. Sample API Response
mutation RequestPrintFromInStoreReader($input: RequestPrintFromInStoreReaderInput!) {
              requestPrintFromInStoreReader(input: $input) {
                  clientMutationId
                  id
                  status
              }
          }

Example offline printing node queryAnchorIcon

Follow the offline processing node query polling logic documented in our offline processing feature documentation.

  1. GraphQL Mutation
  2. GraphQL Variables
  3. Sample API Response
query ID($contextId: ID!) {
              node(id: $contextId) {
                ... on RequestPrintInStoreContext {
                    __typename
                    id
                    status
                    errors {
                        message
                        errorCode
                    }
                }
              }
            }

Sample Receipt TemplateAnchorIcon

Since the receipt is entirely customizable we have put together a sample template that you may use as a baseline to begin your custom receipt development. This sample template is meant to be generic but also includes key EMV receipt data (sample EMV compliant receipt reference) which is recommended to be included in your receipt to maintain EMV receipt compliance.

The sample API template can be downloaded as a Postman API collection below:

Important tips for integrating with the Receipt Printing APIAnchorIcon

  • Make sure to handle Receipt Printing API-specific error codes 96733 - 96737
  • Only PNG image format is supported in the image input, and images must be base64 encoded

  • The ideal image width is 300 pixels

  • The hard-coded timeout of an unsuccessful print is 30 seconds

  • For line spacing use the text content input with "value": " " , you can increase the fontSize for larger spacing

  • Receipt Printing API is supported in offline mode