openapi: 3.1.0 info: title: Kushki Card Payments Branches Transfer API description: 'Card-not-present REST API for the Kushki regional non-banking acquirer. Card numbers are tokenized client-side by Kushki.js Hosted Fields or the iOS / Android SDKs and the resulting `transactionToken` is exchanged server-side for a charge, pre-authorization, capture, or void. ' version: 1.0.0 contact: name: Kushki url: https://kushkipagos.com/ email: dev@kushkipagos.com license: name: Kushki API Terms url: https://kushkipagos.com/legal servers: - url: https://api.kushkipagos.com description: Production - url: https://api-uat.kushkipagos.com description: UAT / Sandbox - url: https://api-stg.kushkipagos.com description: Staging security: - PublicMerchantId: [] - PrivateMerchantId: [] tags: - name: Transfer description: Bank-rail transfer charges paths: /transfer/v1/init: post: summary: Kushki Initialize Transfer Charge description: Initialize a transfer payment. Returns a redirect URL (PSE / Webpay) or QR/CopyPaste payload (PIX) plus a Kushki ticket number. operationId: initTransferCharge tags: - Transfer requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TransferInitRequest' example: callbackUrl: https://merchant.example.com/checkout/return userType: '0' documentType: CC documentNumber: '100000001' email: payer@example.com paymentDescription: Order 42 amount: subtotalIva: 0 subtotalIva0: 50000 iva: 0 currency: COP responses: '200': description: Transfer initialized content: application/json: schema: $ref: '#/components/schemas/TransferInitResponse' 4XX: $ref: '#/components/responses/ErrorResponse' /transfer/v1/charge: post: summary: Kushki Confirm Transfer Charge description: Confirm a transfer charge after the payer authorizes at the bank. Normally driven by the redirect callback; webhook delivery is the authoritative event. operationId: confirmTransferCharge tags: - Transfer requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TransferChargeRequest' responses: '200': description: Charge confirmed content: application/json: schema: $ref: '#/components/schemas/TransferChargeResponse' /transfer/v1/charges/{ticketNumber}: get: summary: Kushki Get Transfer Charge description: Retrieve the current status of a transfer charge. operationId: getTransferCharge tags: - Transfer parameters: - name: ticketNumber in: path required: true schema: type: string responses: '200': description: Charge status content: application/json: schema: $ref: '#/components/schemas/TransferChargeResponse' components: schemas: TransferChargeResponse: type: object properties: ticketNumber: type: string transactionStatus: type: string enum: - APPROVAL - INITIALIZED - DECLINED - PENDING approvalCode: type: string responseText: type: string paymentBrand: type: string description: PSE / Webpay / SPEI / PIX. bankName: type: string TransferInitRequest: type: object required: - callbackUrl - email - amount properties: callbackUrl: type: string format: uri userType: type: string enum: - '0' - '1' description: 0 = natural person, 1 = legal entity (Colombia PSE convention). documentType: type: string enum: - CC - NIT - CE - DNI - RUT - CURP - RFC - RUC - CPF - CNPJ documentNumber: type: string email: type: string format: email paymentDescription: type: string amount: $ref: '#/components/schemas/Amount' bankId: type: string description: PSE bank identifier (Colombia only). metadata: type: object additionalProperties: true Amount: type: object required: - subtotalIva - subtotalIva0 - iva - currency properties: subtotalIva: type: number subtotalIva0: type: number ice: type: number default: 0 iva: type: number currency: type: string enum: - USD - COP - PEN - CLP - MXN - BRL TransferInitResponse: type: object properties: token: type: string redirectUrl: type: string format: uri ticketNumber: type: string pixCopyPaste: type: string description: PIX copy-paste string (Brazil). qrCode: type: string description: Base64-encoded QR image (PIX). Error: type: object properties: code: type: string message: type: string TransferChargeRequest: type: object required: - token properties: token: type: string amount: $ref: '#/components/schemas/Amount' metadata: type: object additionalProperties: true responses: ErrorResponse: description: Error content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: PublicMerchantId: type: apiKey in: header name: Public-Merchant-Id description: Client-side merchant key. Used by Kushki.js and mobile SDKs to tokenize cards. Never use server-side for charging. PrivateMerchantId: type: apiKey in: header name: Private-Merchant-Id description: Server-side merchant key. Required for charge, capture, void, refund, subscription, and payout calls.