Base URL
Authentication
Every request must be signed with your API Secret using HMAC-SHA256. Send the signature and a Unix timestamp in headers:UNIX_TIMESTAMP and SIGNATURE values in the examples below are placeholders.
Request format
SetContent-Type: application/json on all requests and send a JSON body.
Amount format
Passamount in major currency units using standard decimal notation.
merchant_transaction_id
merchant_transaction_id is your unique identifier for each transaction. Use it for reconciliation and tracing in your own system.
Idempotency
If you need safe retries for a POST request, send anIdempotency-Key header. Reusing the same key with the same POST body replays the original non-5xx response for 24 hours. Reusing the same key with a different body returns 409 Conflict.
Idempotency currently applies only to POST /v1/payments/*. GET and PUT requests ignore the header.
See Idempotency for the full contract and response headers.
Token-based payments
SmartRetry generates an 88-charactertoken that represents a stored payment instrument. No
submission response returns it directly - retrieve it from order.payment_instrument.token on a
transaction status response after the transaction completes. On
future charges for the same payer, you can pass this token instead of sending raw card data again.
This simplifies repeat billing and reduces PCI scope.
Payer fingerprint
SmartRetry generates apayer_fingerprint - an 88-character identifier that represents a card profile or payer address. You can store this and include it in future requests for the same customer to help SmartRetry recognize repeat payers and apply optimized retry logic more quickly.
Making a sale
All payment endpoints include theterminal_friendly_id as a path parameter at the end of the URL. See Terminals for details.
Example request
Example response
Response format
All responses return JSON. A submission response’saccepted: true means SmartRetry accepted the
transaction for processing - it does not mean the issuer approved it. order_id, when returned, and
your original merchant_transaction_id are included for reconciliation. Use the
status endpoint to get the actual transaction outcome, including
APPROVED or DECLINED.
Error format
When a request fails, SmartRetry returns a JSON error object using the RFC 9457 Problem Details format.Best practices
SmartRetry applies rate limits per API Secret. If you receive a
429 Too Many Requests response, implement exponential backoff before retrying.- Always use a unique
merchant_transaction_idper transaction so reconciliation back to your own system stays unambiguous. - Use a new
Idempotency-Keyfor each new POST request, and reuse it only when retrying the exact same request body. - Fetch transaction status after a successful submission to retrieve
order.payment_instrument.token- store it to speed up future requests for a returning payer. Submission responses do not include it. - Validate
amountandcurrencyon your side before sending -amountmust be a positive number in major currency units. - Use the sandbox environment to test your integration before going live.