1. Local Services
  • API Docs Peru 🇵🇪
  • Online Payments
    • Release Notes
    • Card Payments
      • Request a card token
      • Make a charge or deferred charge
      • Preauthorization (tokenless)
      • Create payment (tokenless)
      • Void a transaction
      • Refund a transaction
      • Verify Account
      • Request deferred options
      • Authorize payments
      • Reauthorize payments
      • Capture an authorized payment
      • Validate OTP
      • Bin Info V2
      • Bin Info
    • One-Click & Scheduled Payments
      • Request a recurring charge token
      • Create a recurring charge
      • Update recurring charge card data
      • Make an One-click payment
      • Cancel a recurring charge
      • Update a recurring charge
      • Add a temporary charge or discount
      • Authorize payments
      • Capture an authorized payment
      • Get recurring charge Info
    • Card Out
      • Get Card Payout Token
      • Get Subscription Token
      • Push funds
      • Push Funds in subscriptions
      • Get transaction status
      • Delete Subscription
    • Transfer In
      • Get Bank List
      • Request a Transfer In token
      • Init Transaction
      • Get Status
    • Transfer Out
      • Get Bank List
      • Get Bank List V2
      • Request a Transfer Out token
      • Init Transaction
      • Get Status
      • Balance for Payouts
    • Cash In
      • Request a cash in token
      • Init Transaction
      • Transaction Status
    • Smartlinks V2
      • Create a Smartlink
      • Update a Smartlink
      • Get a Smartlink
      • Delete a smartlink
    • Analytics
      • Get transactions list v1
      • Get transactions list v2
    • Chargebacks
      • Query chargebacks
      • Request chargeback export
    • Gateway Status
      • Get gateway status
    • Payment Credentials
      • Create a credential
      • Search credentials
      • Advanced search
      • Activate or deactivate
      • Delete credential
      • Update credential
      • Regenerate a credential
    • Payment Button
      • Create a payment button
    • Platform Status
      • Get platform status
    • Subscription Transactions
      • Get subscription transactions
    • Settlement
      • Query settlement
  • Card Present Payments (API Raw)
    • Release notes
    • Key Exchange Process
    • Test data
    • Kushki Error Catalog for POS transactions
    • The Amount Object
    • One-time Payments
      • Single payment
    • Two-step Payments
      • Authorization and capture
    • Voids & Refunds
      • Refund a transaction
      • Void & Reverse
    • Card information
      • Get BIN Info
      • Bin Info V2
      • Request deferred options
      • Balance inquiries
    • Query Transactions
      • Transaction Search
    • Webhooks
      • Introduction
      • Good practices
      • Refunds
      • Card Payments
      • Check your webhooks
  • Kushki One
    • Cloud Services
      • Payment Cloud
        • Charge
        • Authorization (Pre-auth)
        • Capture
        • Re-authorization
        • Post-tip
        • Void
        • Refund
        • Abort
        • Transaction Search
      • Print Cloud
        • Create Print Job
        • Get Print Job Status
    • Local Services
      • Payment Local
        • Charge
        • Authorization (Pre-auth)
        • Capture
        • Re-authorization
        • Post-tip
        • Void
        • Refund
        • Transaction Search — Local
        • Transaction Search — Online
        • Abort
      • Print Local
        • Create Print Job
        • Get Print Job Status
        • Print Job Webhook (inbound — implemented by your POS)
  • Appian - Submerchant Register
    • Submerchant Validation in Batch
    • Query submerchant status by requestId/submerchantId
    • Get submerchantIds
    • Get credentials for submerchants
  • Raíz
  • Schemas
    • Shared
      • ErrorResponse
      • BadRequestResponse
      • InvalidBinResponse
      • payment_method
      • payment_submethod
      • messageFields
      • Channel
    • Amount & Taxes
      • Amount-cash-in
      • GetConfigurationRequest
    • Identity & Contact
      • Shipping Address
    • Card & Payments
      • ChargesVoidCardResponse
      • Promotions
      • Submerchant
    • Subscriptions
      • SubscriptionUpdate
      • SubscriptionAdjustmentRequest
      • SubscriptionTransactionsResponse
    • Webhooks
    • Analytics
      • AnalyticsTransactionItem
      • AnalyticsListResponse
    • Settlement
      • SettlementDateRangeRequest
      • SettlementTicketRequest
      • SettlementResponse
    • Chargebacks
      • ChargebackListResponse
      • ChargebackSearchRequest
    • Cash
      • CashChargeInitRequest
      • CashStatusResponse
    • Transfer
      • TransferTokenRequest
      • TransferInitRequest
      • TransferStatusResponse
    • Payouts
      • PayoutsWebhooksItem
    • Smart Link
      • SmartLinkAmount
    • Terminal
      • AmountWithTaxes
      • AmountCore
      • AmountWithTip
      • TerminalCardDetails
      • TerminalPosDetails
      • TerminalContactDetails
      • TerminalCardData
      • TransactionResponse
      • LinkFailure
      • TransactionSearchRequest
      • PrintJobRequest
      • PrinterError
      • PrintJobStatus
      • PrintWebhookPayload
    • RequestBodies
      • one-and-two-step-payment
    • currency
    • SettlementDateRangeRequest
    • SubscriptionTransactionsResponse
    • card-old
    • AmountWithTaxes-old
    • Card
    • Shipping Address
    • transactionType
    • ChargebackItem-old
    • SettlementTicketRequest
    • SubscriptionTransaction
    • amount
    • AmountCore-old
    • CommandText-old
    • networkToken
    • Language
    • extra_taxes
    • card_details
    • currency
    • ErrorResponse400-old
    • webhooksItem
    • ErrorResponse
    • SettlementResponse
    • extra_taxes-old
    • ExtraTaxes-old
    • CommandColumns-old
    • currency
    • card
    • orderDetails-old
    • Country
    • ContactDetails-old
    • ErrorResponse401-old
    • SettlementRecord
    • pos_details-old
    • ColumnItem-old
    • Amount
    • amount
    • documentType
    • extraTaxes-old
    • ErrorResponse403-old
    • card_details-old
    • TransactionResponse-old
    • CommandDivider-old
    • extraTaxes
    • enc_tlv
    • payment_method
    • ErrorResponse500-old
    • threeDomainSecure
    • enc_tlv
    • RawResponse-old
    • CommandFeed-old
    • Deferred
    • pos_details
    • deferred
    • binInfo
    • contact_details-old
    • CardData-old
    • CommandSpace-old
    • paymentMethod-old
    • Metadata
    • contact_details
    • Billing-Address-old
    • Deferred-old
    • deferred-old
    • sub_merchant
    • AmountWithTip-old
    • CommandCut-old
    • ContactDetails
    • sub_merchant
    • headers
    • Amount-old
    • metadata
    • LinkFailure-old
    • CommandImage-old
    • metadata
    • SubscriptionUpdate
    • TransactionSearchRequest-old
    • CommandQR-old
    • orderDetails
    • Subscription
    • payment_submethod
    • citMit
    • SubscriptionAdjustmentRequest
    • CommandBarcode-old
    • Shipping Address
    • messageFields
    • PrinterError-old
    • Billing Address
    • webhooksChargeback
    • Language
    • PrintJobStatus-old
    • currency-cash-in-old
    • product
    • webhooks
    • networkToken-old
    • PrintWebhookPayload-old
    • currency-CL-old
    • threeDomainSecure
    • webhooks
    • product-old
    • headers
    • webhooksChargeback
    • UnexpectedErrorResponse-old
    • citMit
    • network
    • Card-old-old
    • Submerchant-old
    • binInfo
    • Shipping-Address-old
    • messageFields
    • Promotions-old
    • UnexpectedErrorResponse
    • transactionType
    • InvalidBinResponse-old
    • GetConfigurationRequest-old
    • BadRequestResponse-old
    • Amount-CL-old
BienvenidaPerú 🇵🇪
México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴Chile 🇨🇱
BienvenidaPerú 🇵🇪
México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴Chile 🇨🇱
  1. Local Services

Payment Local

The Payment API (Local Network) lets your POS communicate directly with the terminal's IP address over your local network. No cloud relay is involved — the terminal processes the transaction using its EMV kernel and returns the result synchronously.
Beta — Early Access
Kushki ONE Local Network is currently in Beta for Peru 🇵🇪. Do not deploy to production without coordinating with the Kushki integration team.

Base URL#

http://{terminalIp}:6868
Assign a static IP or DHCP reservation to the terminal via DMS. The port defaults to 6868 and is configurable in DMS.

Authentication#

INFO
Omit Authorization on requests with no body (e.g. Abort).

Available operations#

OperationEndpointDescription
ChargePOST /terminal/v1/sync/chargeOne-step authorization + capture
AuthorizationPOST /terminal/v1/sync/authorizationReserve funds, capture later
CapturePOST /terminal/v1/sync/captureCollect reserved funds
Re-authorizationPOST /terminal/v1/sync/re_authorizationExtend or increase a pre-auth
Post-tipPOST /terminal/v1/sync/pos_tipAdd tip to an authorized transaction
VoidPOST /terminal/v1/sync/voidCancel same-day transaction — cutoff: 20:59 local
RefundPOST /terminal/v1/sync/refundRefund a settled transaction
AbortGET /terminal/v1/sync/abortCancel a transaction in progress
Transaction Search (online)POST /terminal/v1/sync/transaction_search_onlineQuery Kushki acquirer backend
Transaction Search (local)POST /terminal/v1/sync/transaction_search_localQuery terminal storage — works offline

Request examples#

Charge#

{
  "amount": {
    "subtotal_iva0": 500,
    "subtotal_iva": 0,
    "iva": 0
  },
  "client_transaction_id": "ae6dd41a-9173-4ec7-8734-3178454ef341",
  "metadata": {
    "reference": "ORD-20260101-001",
    "customer_email": "user@example.com"
  }
}

Authorization (Pre-auth)#

{
  "amount": {
    "subtotal_iva0": 500,
    "subtotal_iva": 0,
    "iva": 0
  },
  "client_transaction_id": "auth-20260101-001"
}

Capture#

{
  "transaction_reference": "718fa526-6f41-405f-a1f5-a71db52dfdd2",
  "amount": {
    "subtotal_iva0": 500,
    "subtotal_iva": 0,
    "iva": 0
  }
}
INFO
Capture amount must be ≤ 110% of total authorized. Only one capture per authorization cycle.

Re-authorization#

{
  "transaction_reference": "718fa526-6f41-405f-a1f5-a71db52dfdd2",
  "amount": {
    "subtotal_iva0": 600,
    "subtotal_iva": 0,
    "iva": 0
  }
}
Card typeMaximum hold
Debit7 days
Credit28 days

Post-tip#

{
  "transaction_reference": "718fa526-6f41-405f-a1f5-a71db52dfdd2",
  "tip_amount": 50
}

Void#

{
  "transaction_reference": "718fa526-6f41-405f-a1f5-a71db52dfdd2"
}
WARNING
Void cutoff in Peru: 20:59 local time. Wait at least 1 minute after the original transaction. Use Refund for settled transactions past the cutoff.

Refund#

{
  "transaction_reference": "718fa526-6f41-405f-a1f5-a71db52dfdd2",
  "amount": {
    "subtotal_iva0": 500,
    "subtotal_iva": 0,
    "iva": 0
  }
}

Abort#

GET /terminal/v1/sync/abort — no request body.
WARNING
Only call Abort while a transaction is active. Calling after completion has no effect.

Transaction Search#

Local Network mode provides two search endpoints:
EndpointSourceWorks offline
transaction_search_onlineKushki acquirer backend❌
transaction_search_localTerminal storage✅
{
  "page": 1,
  "size": 10,
  "filters": {
    "last_four_digits": "5480",
    "start_date": 0,
    "end_date": 0,
    "transaction_reference": "",
    "transaction_type": ""
  }
}
Use transaction_search_local as an offline fallback or for same-day recovery when internet access is unavailable.

Key concepts#

Save transaction_reference#

Every approved charge or authorization response includes rawResponse.transaction_reference. Persist this value immediately — it is required for void, refund, capture, and re-authorization.

Amount object#

The amount object does not include a currency field — currency is configured at the terminal level in DMS.
FieldDescription
subtotal_ivaNet subtotal subject to IGV
subtotal_iva0Subtotal exempt from IGV
ivaIGV amount (18% in Peru: iva = subtotal_iva × 0.18)
tipTip amount (charge only)
extra_taxesAdditional taxes: airport_tax, iac, ice, travel_agency

Idempotency#

Every request must include a unique client_transaction_id (UUID v4). Reusing the same ID on a retry returns the original result without creating a duplicate.

Abort uses GET#

In Local Network mode, Abort uses GET /terminal/v1/sync/abort (no body). In Cloud mode, it uses POST /sync/abort. This is the only operation that differs between modes.

Got a suggestion on this documentation? Contact us.
Modified at 2026-06-10 19:29:48
Previous
Local Services
Next
Charge
Built with