1. Card Present Payments (API Raw)
  • 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. Card Present Payments (API Raw)

Webhooks

Kushki sends webhook notifications to your server for every Card Present transaction event — charges, authorizations, captures, voids, reverses, and refunds. Your endpoint receives the event payload immediately after the terminal confirms the operation.
Configuration
Card Present webhooks are configured from the Kushki Console under Developers → Webhooks. Webhook configuration via API is not supported for Card Present.

Supported events#

EventTrigger
approvedTransactionA charge, authorization, or capture is approved
declinedTransactionA transaction is declined by the issuer or network
initializedTransactionA two-step authorization is initialized
voidTransactionA void or reverse is completed
refundTransactionA refund is completed

Webhook payload#

All events share a common envelope. The transactionType and transactionStatus fields identify the specific event.
{
  "transactionType": "SALE",
  "transactionStatus": "APPROVAL",
  "transactionId": "1234567890abcdef",
  "ticketNumber": "987654321",
  "clientTransactionId": "ae6dd41a-9173-4ec7-8734-3178454ef341",
  "amount": 500.00,
  "currency": "PEN",
  "responseCode": "000",
  "responseText": "APPROVED",
  "approvalCode": "123456",
  "cardType": "credit",
  "paymentBrand": "VISA",
  "maskedCard": "XXXXXXXXXXXX1234",
  "binCard": "411111",
  "isDeferred": false,
  "merchantId": "<your-merchant-id>",
  "created": "2026-01-01T14:32:00.000Z",
  "processorBankName": "BCP",
  "transactionReference": "718fa526-6f41-405f-a1f5-a71db52dfdd2",
  "posDetails": {
    "brand": "SUNMI",
    "model": "P2-EU",
    "serialNumber": "SN71652",
    "terminalId": "TID001"
  }
}

Key fields#

FieldDescription
transactionTypeSALE, AUTHORIZATION, CAPTURE, VOID, REVERSE, REFUND
transactionStatusAPPROVAL, DECLINED, INITIALIZED
ticketNumberKushki-assigned transaction ticket — use for reconciliation
clientTransactionIdThe UUID you sent in the original request
transactionReferenceAcquirer-level reference — required for void, capture, and refund
approvalCodeIssuer approval code (present on approved transactions)
responseCodeISO 8583 response code — 000 means approved
posDetails.serialNumberSerial number of the terminal that processed the transaction

Transaction types reference#

Charge (SALE)#

Triggered when a one-time payment completes.
{
  "transactionType": "SALE",
  "transactionStatus": "APPROVAL",
  "amount": 500.00,
  "currency": "PEN",
  "isDeferred": false
}
For deferred (instalment) charges, isDeferred is true and a deferred object is included:
{
  "transactionType": "SALE",
  "transactionStatus": "APPROVAL",
  "isDeferred": true,
  "deferred": {
    "months": "6",
    "monthlyAmount": 83.33
  }
}

Authorization (AUTHORIZATION)#

Triggered when a two-step pre-authorization is placed.
{
  "transactionType": "AUTHORIZATION",
  "transactionStatus": "INITIALIZED",
  "amount": 500.00,
  "transactionReference": "718fa526-6f41-405f-a1f5-a71db52dfdd2"
}

Capture (CAPTURE)#

Triggered when an authorization is captured.
{
  "transactionType": "CAPTURE",
  "transactionStatus": "APPROVAL",
  "amount": 500.00,
  "transactionReference": "718fa526-6f41-405f-a1f5-a71db52dfdd2"
}

Void (VOID)#

Triggered when an authorization or same-day charge is cancelled.
{
  "transactionType": "VOID",
  "transactionStatus": "APPROVAL",
  "transactionReference": "718fa526-6f41-405f-a1f5-a71db52dfdd2"
}

Reverse (REVERSE)#

Triggered when a transaction is reversed at the acquirer level.
{
  "transactionType": "REVERSE",
  "transactionStatus": "APPROVAL",
  "transactionReference": "718fa526-6f41-405f-a1f5-a71db52dfdd2"
}

Refund (REFUND)#

Triggered when a settled transaction is refunded — full or partial.
{
  "transactionType": "REFUND",
  "transactionStatus": "APPROVAL",
  "amount": 250.00,
  "transactionReference": "718fa526-6f41-405f-a1f5-a71db52dfdd2"
}

Signature verification#

Kushki signs every webhook request with an HMAC-SHA256 signature. Verify it before processing the payload to ensure authenticity.

Headers#

HeaderValue
X-Kushki-SignatureBase64-encoded HMAC-SHA256 of the raw request body
X-Kushki-TimestampUnix timestamp in milliseconds when the event was sent

Verification (Node.js example)#

WARNING
Always verify the signature before trusting the payload. Reject any request where verification fails.

Retry policy#

If your endpoint does not return HTTP 2xx within the timeout window, Kushki retries the delivery with exponential backoff:
AttemptDelay
1st retry1 minute
2nd retry5 minutes
3rd retry30 minutes
4th retry2 hours
5th retry8 hours
After 5 failed attempts the event is marked as undelivered. You can replay it from the Console → Developers → Webhooks → Event Log.

Best practices#

PracticeReason
Respond immediately with 200Avoid timeouts — process asynchronously
Persist the raw payload before processingEnables replay if processing fails
Use ticketNumber as the idempotency keyProtect against duplicate delivery
Verify X-Kushki-Signature on every requestReject forged or tampered payloads
Check X-Kushki-TimestampReject events older than 5 minutes to prevent replay attacks

Configuration#

Configure your webhook endpoints in the Kushki Console:
1.
Go to Developers → Webhooks
2.
Click New Endpoint
3.
Enter your HTTPS URL
4.
Select the Card Present events to subscribe to
5.
Copy the Signing Secret and store it securely in your environment
INFO
Your webhook URL must be publicly accessible over HTTPS. HTTP endpoints are not accepted.

Got a suggestion on this documentation? Contact us.
Modified at 2026-06-10 19:53:56
Previous
Transaction Search
Next
Introduction
Built with