1. Kushki One
Kushki Docs
English
  • Español
  • English
  • Home
  • Quick Start
    • Frequently Asked Questions
    • Moving to Production
    • Policy for Important API Changes
    • Test Data
    • Error Codes
    • Latest Features
  • Payment Glossary
    • Payments Glossary
  • One-time card payments (Online)
    • Supported card brands
    • Functionalities by business model
    • Network Tokens
    • One-step Payments
      • How do Card Payments Work?
      • Accept a Card Payment
      • Direct charge (without token)
      • Accept One-Time Payments with OTP
      • OTP Authentication Error Codes
      • Error codes for single card payments
    • Two-steps Payments
      • How do one-time payments with authorization and capture work?
      • Receive payments with authorization and capture
    • Refunds
      • Returns, cancellations, and refunds
    • 3DS Authentication
      • Introduction to 3DS
      • 3DS API integration
      • 3DS integration with kushki.js library
      • 3DS API integration plus kushki.js library
      • 3DS Error Codes
    • Apple Pay Payments
      • Apple Pay Configuration
      • Apple Pay Sandbox testing
  • Recurring Card Payments (Online)
    • Functionalities by business model
    • External subscriptions to Kushki
    • Authenticate your subscriptions with 3DS
    • Accept one-click payments with 3DS
    • Error codes in recurring charges
    • Apple Pay for Subscriptions
    • Scheduled payments
      • How do Credit or Debit Card Payment Recurring Charges Work?
      • Create a recurring charge
      • Manage your Scheduled Charges
    • OneClick Payments
      • Accepting One-Click Payments
      • How does authorization and capture work in OneClick payments?
      • Receive OneClick payments with authorization and capture
  • Card-present payments
    • Accept card present payments
    • Test data
    • Webhooks for card present
    • Raw card-present API
      • Raw card-present API overview
      • Cryptographic key exchange
      • Sample script to encrypt information
      • Take Payments
      • Frequently Asked Questions
      • Error codes for card-present transactions
    • Transactions
      • Transactions
      • Cancel payments
    • Kushki One
      • First Steps
      • Autenticación y Cifrado de Requests
      • Accept payments with Kushki One
      • Amount Format
      • Async services and webhooks
      • Printing on SmartPOS terminal
      • Unified Error Catalog — Kushki ONE Connect
    • Kushki One Payment App
      • Overview
      • Process a payment
      • Split payment on the terminal
      • Refunds and PreAuth & Capture
      • Review Your Transactions
      • Terminal Setup
  • Wire Transfers
    • Shopping experiences and transaction details for bank transfer payments
    • Receive Wire Transfers
    • Check the Status of a Transaction
  • Cash Payments
    • Accept a Cash Payment
    • Authorized locations
    • Error Codes for declined cash transaction
  • Alternative payment methods (APM)
    • How do APM payments work?
    • Accept Yape payments
  • Money Disbursement
    • Wire Transfer
      • How does the disbursement through bank transfer work?
      • Payment disbursement to bank accounts
      • Error codes for transfer disbursements
    • Card
      • How does sending funds to cards work?
      • Send money to a card
      • Error Codes
  • Plugins
    • Shopify
      • Shopify
      • Plugin Operation
    • VTEX
      • VTEX Integration Guide
  • Payment Links
    • Smartlinks
  • Payment forms and buttons
    • Kajita
      • How Does it Work?
      • Payment Kajitas
    • Payment Button
      • Overview
      • Generate a payment button
  • Branch Offices Management
    • How to Onboard Submerchants via API
  • Notifications
    • Good Practices
    • Check your Webhooks
    • One-time Payments Webhooks
      • Webhook for One-Time Payments made with a card
      • Webhook for One-Time Payments by Wire Transfer
      • Webhook for One-Time Payments in Cash
    • Recurring Payments Webhooks
      • Webhook for Recurring Payments Made with Card
    • Payment Distribution Webhooks
      • Webhook for payment disbursement through wire transfer
      • Webhook for card disbursement
    • Payment button Webhooks
      • Webhooks with Payment Button
    • Smartlinks Webhooks
      • Webhooks with Smartlinks
    • Refunds Webhooks
      • Webhook for Voids and Refunds
      • Chargeback Webhooks
HomeMexico 🇲🇽Ecuador 🇪🇨Chile 🇨🇱Colombia 🇨🇴Peru 🇵🇪
HomeMexico 🇲🇽Ecuador 🇪🇨Chile 🇨🇱Colombia 🇨🇴Peru 🇵🇪
Status
Soporte / Support
English
  • Español
  • English
  1. Kushki One

First Steps

Know Kushki ONE, our regional solution for Card Present payments.
🚧 Early Release — Beta
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.

What is Kushki ONE?#

Kushki ONE is Kushki's end-to-end card-present payments solution. It lets merchants accept physical payments through SmartPOS terminals, bringing the whole operation into a single ecosystem.
Accept payments directly from the payment app installed on the terminal, or connect your point-of-sale software through our API. Run it from a register, tablet, computer or any other networked device, or from an app installed on the terminal itself.

Markets and currencies#

CountryCurrencyDecimals
ChileCLP0
ColombiaCOP0
MexicoMXN2
PeruPEN2
The number of decimals changes how you send the amount
Amounts are sent as integers in the currency's smallest unit, and the result depends on the country. Read Amount format in Kushki ONE before you build your first request.
Supported debit card brands in Peru

How to use this guide#

This documentation splits into two paths depending on your role.
Path 1: operators and administrators
For those who run the point of sale or manage the business: certified hardware, the Payment App, the operations catalog and the Standalone and Semi-Integrated modes.
Path 2: developers and integrators
For those who connect POS software to the terminal: Kushki ONE Connect, integration topologies, security, network requirements and the full transaction flow.

Path 1: For Merchant Operators and Administrators#

Supported Hardware#

Kushki ONE's architecture is hardware-agnostic and all of its components are interoperable. To guarantee maximum performance and stability, however, the solution is certified only for these SmartPOS devices.
ModelDisplay and designProcessor and memoryOperating system
Sunmi P3 (standard)6.75" HD+ bezel-less (350 nits). Ultra-thin at 17 mm with anti-fingerprint coatingQuad-Core A53 at 2.0 GHz, 2 GB RAM, 32 GB ROMSunmi OS (Android 11 Go)
Sunmi P2 SECompact display. Lightweight, resistant to dust, splashes and drops. QR and barcode scan engineQuad-Core at 2.0 GHz, DDR4 memorySunmi OS (Android)

Sunmi P3#

Built-in printer: high-speed thermal, 70 mm/s.
Battery: removable lithium, 7.7 V and 2,630 mAh. Up to 13 days on standby.
Design: ultra-thin at 17 mm with anti-fingerprint coating, built for high-traffic environments.

Sunmi P2 SE#

Mobility: compact and lightweight, ideal for pay-at-table, retail or delivery.
Code reader: professional scan engine for barcodes and QR codes, even when damaged.
Durability: resistant to dust, splashes and drops. Battery optimized for long shifts.
Full specifications
Find every datasheet on the official Sunmi page.

Kushki ONE Payment App#

This is the payment app installed directly on the physical terminal. Its interface lets the operator run and manage the entire payment lifecycle without an external point of sale.

Operations Catalog#

OperationAvailable by APIDescription
Sale✅Single-step charge. Supports tip, merchant-funded installments, issuer-funded installments and cashback
Authorization✅Reserves the funds on the card for a later charge
Capture✅Charges an amount that was previously authorized
Re-authorization✅Changes the authorized amount or extends the window to run the capture
Return✅Gives the money back from a sale. Internally it runs a void or a refund depending on when it executes
Post-tip✅Adds a tip amount after a transaction has been authorized
Split the bill❌Splits one amount into several sequential payments. Standalone only — there is no endpoint for it
Splitting the bill is not Split Payment
These are chained payments that make it easier to divide a single check, for example at a restaurant. Do not confuse them with e-commerce Split Payment operations, which distribute one payment across several merchants.

Terminal Operating Modes#

Standalone mode
The terminal runs on its own, with no integration to external systems.
The operator uses the touchscreen as a calculator. The whole cycle happens on the device.
Ideal for merchants without an external point-of-sale system.
Semi-Integrated mode
Required to connect your point of sale to the terminal through Kushki ONE Connect.
The interface locks into a "Waiting for call" state and only reacts to commands sent by your POS software.
Ideal for integrations with your own point of sale.

Path 2: For Developers and Integrators (Kushki ONE Connect)#

What is Kushki ONE Connect?#

Kushki ONE Connect is our API integration layer. It lets your POS software interact directly with the physical terminal while it runs in Semi-Integrated mode. Your system sends the financial commands to the payment app, which removes manual entry and human error.
The premise is simple: it is the same API regardless of the channel you use. The only thing that changes between topologies is the communication path, not the structure of the endpoints or the payloads.

Integration Topologies (Communication Paths)#

☁️ Cloud📡 Local Network📲 Localhost
FlowPOS → Kushki servers → TerminalPOS → Local router → TerminalYour app ⇄ Kushki ONE App, on the same device
Ideal use caseCloud POS, multi-site merchants, POS and terminal on different networksSupermarkets, retail and restaurants on the same networkYour own POS app installed on the terminal
Key requirementStable internet at both the register and the terminalStatic IP or DHCP reservation on the terminalNo internal network needed between the apps
Internet is always required
Localhost communication needs no network between the apps, but the device always needs internet access to process the financial transaction with Kushki.

1. Cloud integration#

Your POS sends the request to Kushki's servers, which identify the target terminal and route the order over the internet.
Diagram of the Kushki ONE cloud integration
Advantage: your POS and the terminal do not need to share a local network.
Consideration: requires a stable internet connection at both ends.
EnvironmentBase URL
UAThttps://uat-cloudt.kushkipagos.com
Productionhttps://cloudt.kushkipagos.com
Every endpoint carries the terminal serial number in the path:
https://{host}/terminal/v1/{terminalSerial}/sync/{operation}
Terminal serial
Each device's terminalSerial is handed over by the Kushki integrations team during onboarding.

2. Local Network integration#

Your POS sends an HTTP request straight to the terminal's local IP, with no detour through external servers. That cuts latency noticeably.
Diagram of the Kushki ONE local network integration
Advantage: lower latency, because POS-to-terminal communication does not depend on the internet.
Consideration: the terminal needs a static IP or a DHCP reservation. If the IP changes, your POS loses communication.
How to find your terminal's IP#
1.
Open Settings and then Wi-Fi.
2.
Tap the name of the connected network.
3.
Expand Advanced options.
4.
Scroll down to the IP address field.

3. Same-device integration (Localhost)#

This applies when you have your own POS app installed inside the SmartPOS terminal. Your app and the Kushki ONE Payment App live on the same hardware and talk to each other over localhost.
Diagram of the Kushki ONE localhost integration
Main advantage: replaces traditional app-to-app integration flows with standard HTTP calls.
No internal network: communication between the two apps needs neither Wi-Fi nor Ethernet.

Communication Security#

Every call to Kushki ONE Connect is authenticated with a signature you compute from your Business-Code.
Business-Code is not private_credential_id
The signing key is your Business-Code. The private_credential_id is a terminal configuration field and is never used to sign requests.
The signing and encryption logic does not change between topologies: it is the same on Cloud, Local Network and Localhost. There is one mechanism — hash + encryption:
ElementValue
AuthorizationBasic followed by the SHA-512 hash
timestampUnix timestamp in seconds, within ±5 minutes of server time
BodyThe encrypted envelope {"data": "<iv_hex>:<ciphertext_hex>"}
In Local Network and Localhost, send the encrypted_http_communication header as true
If you integrate over Local Network or Localhost, send the header encrypted_http_communication: true on every request, in UAT and in production. Without it, your requests are not signed or encrypted, and when you move to production they fail with AUTH-001 ("Invalid or expired credentials"). Cloud integrations do not require this header.
Write it once
The signing and encryption logic in this section is the same across all three topologies. The full flow — key derivation, the seven steps and the diagnostic tree — is on Authentication and request encryption.

Network and Infrastructure Requirements#

1. Local network setup#

This applies only if you use the Local Network topology.
Static IP or DHCP reservation: configure the router to always assign the same IP to the terminal, bound to its MAC address.
Communication ports: the internal firewall must allow bidirectional traffic on the terminal's TCP ports — 6868 for HTTP and 6869 for HTTPS. A network that only opens 6868 blocks HTTPS access to the terminal.
Wi-Fi security: certified terminals support WPA2-PSK and WPA3.
Networks to avoid
Do not connect terminals to open public networks or to networks with captive portals, which require a username and password in a browser to grant access.

2. Allowed domains#

The terminal always needs internet access to process transactions and receive updates. If your corporate network blocks outbound traffic, your IT team must allow these hosts on port 443. Open only the column for your environment — uat-cloudt is a test host and does not belong on a production network:
PurposeUATProductionWho needs it
Cloud relayuat-cloudt.kushkipagos.comcloudt.kushkipagos.comThe terminal and the POS network
Payment processingapi-uat.kushkipagos.comapi.kushkipagos.comThe terminal only
Terminal managementuat-tms.kushkipagos.comtms.kushkipagos.comThe terminal only
All three are real egress from the terminal. The only row you also have to open from the POS network is the Cloud relay, and only if you integrate over that topology.
Port 6868 and port 443 are not the same thing
Ports 6868 and 6869 are the terminal's local listening ports and apply only to communication between your POS and the terminal inside the same network. Traffic to Kushki's servers always uses port 443. If your network policy requires an exhaustive list that includes the manufacturer's telemetry services, request it from the integrations team.

Full Transaction Flow#

Full transaction flow in Kushki ONE
1.
Request generation: your POS system builds the request and sends the amount to charge over the API.
2.
Decision and routing: Kushki ONE Connect receives the request and routes it to the physical device according to the merchant's configuration, over Cloud or Local Network.
3.
Reception and data capture: the terminal receives the request, shows the amount on screen and reads the customer's card.
4.
Processing: the terminal sends the data to Kushki, which processes the financial transaction.

Verify your connection#

Before your first charge, check that your POS can reach the terminal. This endpoint moves no money and is the fastest way to validate network, port and credentials at once.
JavaScript
Python
The same check exists on Cloud, where the method changes — it is a POST addressed to the terminal by serial number:
POST /terminal/v1/{terminalSerial}/sync/local/test
There is a second diagnostic endpoint worth knowing, available in both topologies:
GET  /terminal/v1/sync/config/terminal_info                     ← local network
POST /terminal/v1/{terminalSerial}/sync/config/terminal_info    ← Cloud
It returns {model, room, serialNumber}. The room field is the terminal's app version — the only way to know which build you are testing against, which matters while the product is in Beta.
If you get a TER-002 error, the terminal is not responding: check network connectivity and that the port is open. If you get an authentication error, check your signature.

Next steps#

Amount format in Kushki ONE
Learn how to build the amount object in minor units according to each country's currency. This is the step that prevents charging the wrong value.
Request authentication
Implement request signing and encryption: there is one mechanism, identical across all three topologies.
Accept payments with Kushki ONE
Process direct sales, authorization, capture, post-tip, void and refund.
Print from the terminal
Send print jobs to the SmartPOS: receipts, coupons and QR codes, with no drivers or SDK.
Modificado en 2026-10-07 14:32:23
Anterior
Kushki One
Siguiente
Autenticación y Cifrado de Requests
Built with