This product is in early access. Parameters, response structures and behaviors may change without prior notice. Do not use this version in production without coordinating with the Kushki integrations team first.
The Print API gives you full control over the thermal printer built into Kushki ONE terminals. Print any content from your POS system — before, during or after a transaction, or with no transaction at all — without installing drivers, SDKs or configuring hardware on your side.
The print cycle has two parts: a sync request that queues the job, and an async notification that tells you when it finished.
1.
Your POS system builds a commands array with the receipt layout.
2.
You send the job creation request. The terminal answers 202 Accepted right away.
3.
Printing runs asynchronously on the hardware.
4.
You learn the final result over webhook or by querying the status.
The payloads and the headers are identical across topologies. The routes are not: the base URL stops at the terminal, and each route carries its own prefix.
Topology
Base URL
Local Network (LAN / Wi-Fi)
http://{TERMINAL_IP}:6868/terminal/v1 or https://{TERMINAL_IP}:6869/terminal/v1
On Local Network you queue with POST /terminal/v1/print and query with GET /terminal/v1/print_job. On Cloud you queue with POST /sync/print and query with POST /sync/print_job. See Option B: query the status for the details of each method.
Printing uses the same mechanism as the payment operations — hash + encryption, the only one Kushki ONE has:
Element
Value
Authorization
Basic followed by the SHA-512 hash. The Basic prefix is required
timestamp
Unix timestamp in seconds, within ±5 minutes of server time
Body
The encrypted envelope {"data": "<iv_hex>:<ciphertext_hex>"}
The commands array shown on this page is the plaintext you encrypt, not what travels on the wire. The full flow is on Authentication and request encryption.
Local Network and Localhost: send the encrypted_http_communication header
In Local Network and Localhost, every request also carries the header encrypted_http_communication: true, in UAT and in production. Cloud does not require it. Details in Authentication and request encryption.
The status query is a GET on the local network
On the local network you query the status with GET, so the encrypted value travels as the data query parameter and no other parameter may be sent: the print_job_id goes inside the encrypted payload.
The API is not limited to payment receipts. Any content your business needs to hand over on paper can be triggered from your POS system.
Use case
Description
Payment receipt
Direct sale, pre-authorization capture, refund or void
Discount coupon
A code for the customer's next purchase
QR code
Wi-Fi password, loyalty link, digital receipt, product information
Loyalty and promotions
Point balance, reward tiers, special offers
Pre-check or order summary
Kitchen ticket or table summary before the final charge
Reversal record
A printed record of a cancellation or refund
Reprint
Print a previous receipt again with the same printJobId
Free content
Text, image, QR or barcode, with no transaction involved
The commands array is a blank canvas
You are not limited to any template or predefined format. Combine text, images, QR codes, barcodes, columns and dividers in whatever order your business needs.