Collect the card
step 1The Android terminal handles tap, insert, card prompts, and PIN.
Android terminalA REST API for card payments. Predictable resource-oriented URLs, JSON request and response bodies, and standard HTTP verbs, response codes, and authentication. Take payments in person from a provisioned Android terminal or online with a hosted checkout and secure browser fields.
Choose the guide for where you take payment. In-person payments start on an Android terminal; online payments start on your server and finish in the customer’s browser.
Start with a working request, then follow the guide for retries, completion, and recovery.
curl https://api.kepapay.co/api/v1/terminal/transactions/authorize \
-H "Authorization: Bearer $KEPA_DEVICE_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{ "deviceId": "dev_123", "terminalId": "TID-00012345",
"amount": 2500, "currencyCode": "USD", "transactionType": "purchase",
"entryMode": "Chip", "completionMode": "CONTACT_CHIP_SECOND_AC",
"panEncrypted": "<device-encrypted>", "accountDataKsn": "<account-ksn>" }'
# → { "approved": true, "authorizationCode": "A12345",
# "responseCode": "00", "transactionId": "txn_01JQ…" }Card data stays in the payment terminal. kepa authorizes the payment and returns one payment ID that you use for receipts, refunds, and support.
The Android terminal handles tap, insert, card prompts, and PIN.
Android terminalSend the amount and terminal-encrypted card data to the kepa API.
https://api.kepapay.coIf a response is lost, check the original attempt instead of charging again.
/api/v1/terminal/transactions/recoveryThe API spans the payment lifecycle: accept, route, bill, and settle.
In person, online, or server-to-server. One integration across every surface, including saved cards on file.
Soft declines retried, unavailable acquirers routed around. Cascading and failover across processors, on by default.
Save a card, run subscriptions, raise invoices, and let customers self-serve from a billing portal.
Settlement, reconciliation, and payouts, with a ledger readable from the API.
Card-not-present splits across two credentials: the server creates the intent, the browser confirms it. This keeps your secret key out of the browser and card data off your server.
Create a payment intent or checkout session with your secret key. You get back a client secret — the only part the browser is allowed to see. Start at /v1/cnp/payment-intents.
Tokenize the card, run 3DS if the issuer asks, and confirm — all under /api/v1/cnp/public/ with a publishable key. Apple Pay and Google Pay use the same session.
Take tap, insert, and PIN payments from a provisioned Android terminal.
Terminal health, connectivity, and status queries.
Orchestrated financial operations where the terminal manages the full lifecycle.
Authorize, finish, recover, and reverse payments created on an Android terminal.
Query, poll, or abort transactions after they have been initiated.
Running totals and end-of-day settlement.
Display, input, and printer control for the terminal surface.
Real-time event streaming for transaction lifecycle observability.
Online payments three ways — hosted page, Elements, or server-side — plus saved cards, subscriptions, and invoices.
Take an online payment two ways: a kepa-hosted page, or Elements rendered in your own checkout. Both keep you in SAQ A.
Charge from your server — a PAN from a PCI-L1 source, a vault token, or a saved card. Auth-and-capture and card-on-file live here.
The saved-customer object that payment methods, subscriptions, and invoices hang off.
Recurring billing — prices and the subscription lifecycle.
Invoices raised by subscriptions, and their PDFs.
A hosted page where customers update their card and download invoices.
Merchant provisioning and CNP configuration. kepa staff only.
Provision merchants, manage lifecycle state, and issue or rotate API keys.