| Cloud Mode | Local Network Mode | |
|---|---|---|
| Your server connects to | cloudt.kushkipagos.com | Terminal IP directly |
| Terminal identified by | Serial number in URL path | IP address + port 6868 |
| Works without internet | ❌ | ✅ (local connection) |
| Print auth required | ✅ HMAC-SHA256 | ❌ |
| Payment auth key | Private-Credential-Id | Business-Code |
transaction_reference from the original response.| Operation | Available in | Source | Works offline |
|---|---|---|---|
| Transaction Search | Cloud + Local | Kushki acquirer backend | ❌ |
| Transaction Search (Local) | Local only | Terminal storage | ✅ |
202 Accepted immediately and delivers the final status via webhook or polling.commands array describing the receipt layout. The terminal queues and executes it asynchronously.commands array. The type field on each object determines how it renders:type | Description |
|---|---|
text | Text line — configurable size, alignment, bold, italic, underline |
columns | Multi-column row with proportional widths — ideal for item/price lines |
divider | Full-width separator: SOLID, DOTTED, or EMPTY |
feed | Advance paper N blank lines |
space | Insert pixel-precise vertical whitespace |
cut | Trigger the auto-cutter (silently ignored on cutterless terminals) |
image | Print a Base64-encoded PNG/JPG — typically for merchant logos |
qr | Generate a QR code natively in hardware |
barcode | Generate a CODE128 barcode natively in hardware |
{
"printJobId": "RECEIPT-001",
"webhookUrl": "https://pos.micomercio.pe/webhooks/print",
"skipIfBusy": false,
"commands": [
{ "type": "text", "text": "MI COMERCIO PERÚ\n", "align": "CENTER", "size": 32, "bold": true },
{ "type": "text", "text": "RUC: 20123456789\n", "align": "CENTER", "size": 20 },
{ "type": "divider", "dividerType": "SOLID" },
{ "type": "columns", "columns": [
{ "text": "Producto A", "weight": 2, "align": "LEFT" },
{ "text": "S/ 30.00", "weight": 1, "align": "RIGHT" }
]},
{ "type": "divider", "dividerType": "DOTTED" },
{ "type": "columns", "columns": [
{ "text": "TOTAL", "weight": 2, "align": "LEFT" },
{ "text": "S/ 30.00", "weight": 1, "align": "RIGHT" }
]},
{ "type": "text", "text": "APROBADO\n", "align": "CENTER", "size": 28, "bold": true },
{ "type": "qr", "content": "https://micomercio.pe/boleta/4421", "dotSize": 6, "align": "CENTER" },
{ "type": "feed", "lines": 4 },
{ "type": "cut" }
]
}── Payment flow ──────────────────────────────────────
1. POST /terminal/v1/[serial/]sync
→ Terminal reads card, processes EMV
← Returns result synchronously
2. Save rawResponse.transaction_reference
→ Required for void, refund, capture, re_authorization
── Print flow ────────────────────────────────────────
3. POST /terminal/v1/[serial/]sync/print/job (Cloud)
POST /terminal/v1/print (Local)
← 202 Accepted, status: PENDING
4. Terminal POSTs to webhookUrl — OR — you poll job_status
← status: COMPLETED | FAILEDtransaction_reference — save it alwaysrawResponse.transaction_reference. Persist this value — it is required to void, refund, capture, or re-authorize that transaction later.client_transaction_id (UUID v4). Reusing the same ID on a retry is safe — the terminal returns the original result without creating a duplicate.printJobId for the same purpose. If omitted, the terminal auto-generates a UUID.| Country | Cutoff |
|---|---|
| Peru 🇵🇪 | 20:59 local time |
amount field does not include a currency — currency is configured at the terminal level in DMS."amount": {
"iva": 0,
"subtotal_iva": 0,
"subtotal_iva0": 500
}| Setting | Description |
|---|---|
| Currency | Set at terminal level — not in request body |
| Tips & cashback | Configured in DMS (v1.2.0+) |
| Local IP | Assign a static IP or DHCP reservation |
| Port | Default 6868 (configurable in DMS) |
| Serial number | Used to identify terminal in Cloud mode URL |
| Terminal | Chip (ICC) | Mag Stripe (MCR) | Contactless (NFC) | Thermal Printer |
|---|---|---|---|---|
| Sunmi P3 | ✅ | ✅ | ✅ | ✅ (384 px) |
| Sunmi P2 SE | ✅ | ✅ | ✅ | ✅ (384 px) |
Private-Merchant-Id header.| Mode | Signing key |
|---|---|
| Cloud (Payment + Print) | Private-Credential-Id |
| Local (Payment only) | Business-Code |
| Local (Print) | No authentication required |
timestamp must be in milliseconds (13 digits). Seconds (10 digits) will be rejected.https://cloudt.kushkipagos.comGot a suggestion on this documentation? Contact us.