Reference

API reference

One integration for payments, payouts, transactions and settlements across multiple providers. NATIO is a payment orchestration layer: funds move between the merchant and licensed payment providers. All amounts are integers in the currency's minor unit (e.g. 1000 = 10.00 USD).

Rendered from the live specification
This page is generated at request time from the OpenAPI 3.1.0 document served by the API — 22 operations across 9 tag groups. The raw document is at /openapi.json.

Servers

URLEnvironment
https://api.natio.meProduction
http://localhost:4000Local development

Authentication

SchemeTypeHow it is sentNotes
apiKeyhttp · bearerAuthorization: Bearer <key>API key: sk_test_... (sandbox) or sk_live_... (production)

Every operation requires apiKey unless it says otherwise. See Authentication for key modes, rotation and IP allow-lists.

Index

Payments

GET/v1/payments

List payments

Parameters
NameInRequiredTypeDescription
statusqueryoptionalstringComma-separated statuses
currencyqueryoptionalstring
countryqueryoptionalstring
payment_methodqueryoptionalstring
referencequeryoptionalstring
searchqueryoptionalstring
fromqueryoptionalstring <date-time>
toqueryoptionalstring <date-time>
limitqueryoptionalinteger(default 50 · min 1 · max 200)
cursorqueryoptionalstringnext_cursor from the previous page
Responses
StatusDescriptionBody
200Paginated listPaymentList
POST/v1/payments

Create a payment

Creates a payment and runs it through risk evaluation, routing and provider orchestration synchronously. The response contains the final status for synchronous methods, or processing with next_action for asynchronous methods (redirect, QR). Send an Idempotency-Key header to make retries safe.

Parameters
NameInRequiredTypeDescription
Idempotency-Keyheaderoptionalstring(max length 255)Unique key per logical request. Replays return the original response; reuse with a different body returns 422.
Request bodyrequired·CreatePaymentRequest
FieldTypeNotes
amountrequiredintegerMinor unitsmin 1
currencyrequiredstringmax length 3
payment_methodrequiredPaymentMethodType | object
capture_methodstringautomatic · manual
countrystringmax length 2
customerCustomerInput
descriptionstringmax length 500
referencestringYour order idmax length 128
return_urlstring <uri>
metadataobject
test_scenariostringSandbox only. See GET /v1/test/scenarios.
deviceobject
ipstring
user_agentstring
fingerprintstring
Example request
{
  "amount": 10000,
  "currency": "USD",
  "payment_method": "card",
  "country": "US",
  "reference": "ORD-1001",
  "customer": {
    "external_id": "cust_42",
    "email": "buyer@example.com"
  },
  "test_scenario": "failover"
}
Responses
StatusDescriptionBody
201Payment created and processedPayment
401Missing or invalid API keyError
409Invalid state transition or idempotency conflictError
422Validation failedError
429Too many requestsError
GET/v1/payments/{id}

Retrieve a payment

Parameters
NameInRequiredTypeDescription
idpathrequiredstring
Responses
StatusDescriptionBody
200PaymentPayment
404Resource not foundError
GET/v1/payments/{id}/timeline

Payment timeline

Ordered narrative of everything NATIO did for the payment: risk, routing, provider attempts, failover, webhooks.

Parameters
NameInRequiredTypeDescription
idpathrequiredstring
Responses
StatusDescriptionBody
200Timeline
POST/v1/payments/{id}/capture

Capture an authorized payment

Parameters
NameInRequiredTypeDescription
idpathrequiredstring
Idempotency-Keyheaderoptionalstring(max length 255)Unique key per logical request. Replays return the original response; reuse with a different body returns 422.
Request body
FieldTypeNotes
amountintegerMinor units; defaults to the full authorized amount
Responses
StatusDescriptionBody
200CapturedPayment
409Invalid state transition or idempotency conflictError
POST/v1/payments/{id}/cancel

Cancel a payment

Cancels a created, pending, authorized or customer-action payment. Payments that are being sent to a provider cannot be cancelled.

Parameters
NameInRequiredTypeDescription
idpathrequiredstring
Idempotency-Keyheaderoptionalstring(max length 255)Unique key per logical request. Replays return the original response; reuse with a different body returns 422.
Request body
FieldTypeNotes
reasonstring
Responses
StatusDescriptionBody
200CancelledPayment
409Invalid state transition or idempotency conflictError

Refunds

POST/v1/payments/{id}/refund

Refund a payment

Parameters
NameInRequiredTypeDescription
idpathrequiredstring
Idempotency-Keyheaderoptionalstring(max length 255)Unique key per logical request. Replays return the original response; reuse with a different body returns 422.
Request body
FieldTypeNotes
amountintegerMinor units; defaults to the remaining refundable amount
reasonstring
metadataobject
Responses
StatusDescriptionBody
201RefundRefund
409Invalid state transition or idempotency conflictError
GET/v1/payments/{id}/refunds

List refunds of a payment

Parameters
NameInRequiredTypeDescription
idpathrequiredstring
Responses
StatusDescriptionBody
200Refunds
GET/v1/refunds/{id}

Retrieve a refund

Parameters
NameInRequiredTypeDescription
idpathrequiredstring
Responses
StatusDescriptionBody
200RefundRefund

Payouts

GET/v1/payouts

List payouts

Parameters
NameInRequiredTypeDescription
statusqueryoptionalstring
limitqueryoptionalinteger(default 50 · min 1 · max 200)
cursorqueryoptionalstringnext_cursor from the previous page
Responses
StatusDescriptionBody
200Payouts
POST/v1/payouts

Create a payout

Sends funds to a beneficiary through a licensed provider selected by the payout routing rules. Destinations are tokenised references; raw account numbers are never accepted.

Parameters
NameInRequiredTypeDescription
Idempotency-Keyheaderoptionalstring(max length 255)Unique key per logical request. Replays return the original response; reuse with a different body returns 422.
Request bodyrequired·CreatePayoutRequest
FieldTypeNotes
amountrequiredintegermin 1
currencyrequiredstring
destinationrequiredobject
typerequiredstringbank_account · wallet · card_token
tokenstringProvider beneficiary token
displayrequiredstringMasked display value
holder_namestring
countrystring
descriptionstring
referencestring
metadataobject
test_scenariostringsuccess · technical_error · hard_decline · unavailable · timeout
Example request
{
  "amount": 250000,
  "currency": "EUR",
  "destination": {
    "type": "bank_account",
    "token": "benef_tok_8f3a",
    "display": "IBAN ****4321",
    "holder_name": "Acme GmbH",
    "country": "DE"
  },
  "reference": "PAYOUT-2026-09-001"
}
Responses
StatusDescriptionBody
201PayoutPayout
422Validation failedError
GET/v1/payouts/{id}

Retrieve a payout

Parameters
NameInRequiredTypeDescription
idpathrequiredstring
Responses
StatusDescriptionBody
200PayoutPayout
POST/v1/payouts/{id}/cancel

Cancel a payout

Parameters
NameInRequiredTypeDescription
idpathrequiredstring
Responses
StatusDescriptionBody
200CancelledPayout
409Invalid state transition or idempotency conflictError

Transactions

GET/v1/transactions

List transactions

Ledger-style records of every financial movement (payments, refunds, payouts), including failed ones for monitoring.

Parameters
NameInRequiredTypeDescription
typequeryoptionalstringpayment · refund · payout · fee · adjustment
statusqueryoptionalstring
currencyqueryoptionalstring
provider_account_idqueryoptionalstring
fromqueryoptionalstring <date-time>
toqueryoptionalstring <date-time>
limitqueryoptionalinteger(default 50 · min 1 · max 200)
cursorqueryoptionalstringnext_cursor from the previous page
Responses
StatusDescriptionBody
200Transactions

Balances

GET/v1/balances

Processed and settled amounts per currency

NATIO is not a custodian. Figures are derived from processed transactions and settlement data reported by providers.

Responses
StatusDescriptionBody
200Balances

Settlements

GET/v1/settlements

List provider settlements

Parameters
NameInRequiredTypeDescription
statusqueryoptionalstring
provider_account_idqueryoptionalstring
Responses
StatusDescriptionBody
200Settlements
GET/v1/settlements/{id}

Retrieve a settlement with its items

Parameters
NameInRequiredTypeDescription
idpathrequiredstring
Responses
StatusDescriptionBody
200SettlementSettlement

Payment methods

POST/v1/payment-methods

Store a tokenised payment method reference

Stores a reference to a token issued by a PCI-compliant provider. NATIO never accepts card numbers or CVV.

Request bodyrequired
FieldTypeNotes
typerequiredPaymentMethodType
provider_tokenrequiredstring
provider_codestring
customerCustomerInput
displayobject
Responses
StatusDescriptionBody
201StoredPaymentMethod
GET/v1/payment-methods/{id}

Retrieve a payment method

Parameters
NameInRequiredTypeDescription
idpathrequiredstring
Responses
StatusDescriptionBody
200Payment methodPaymentMethod

Webhooks

POST/v1/webhooks/test

Send a test event to your webhook endpoints

Request body
FieldTypeNotes
event_typestringdefault "payment.successful"
Responses
StatusDescriptionBody
200Queued

Sandbox

GET/v1/test/scenarios

List sandbox test scenarios

Responses
StatusDescriptionBody
200Scenarios
GET/v1/me

Identify the API key's merchant, project and mode

Responses
StatusDescriptionBody
200Identity

Schemas

The component schemas referenced above. Every $ref in the document points into this section.

Error

FieldTypeNotes
errorobject
typestringinvalid_request_error · authentication_error · permission_error · not_found_error · idempotency_error · rate_limit_error · state_error · provider_error · risk_error · internal_error
codestring
messagestring
paramstring
detailsany
request_idstring

PaymentMethodType

string·card · bank_transfer · qr · open_banking · wallet · instant · local

PaymentStatus

string·created · pending · processing · authorized · captured · successful · failed · cancelled · refunded · partially_refunded

CustomerInput

FieldTypeNotes
idstring
external_idstring
emailstring <email>
namestring
countrystringmax length 2

CreatePaymentRequest

FieldTypeNotes
amountrequiredintegerMinor unitsmin 1
currencyrequiredstringmax length 3
payment_methodrequiredPaymentMethodType | object
capture_methodstringautomatic · manual
countrystringmax length 2
customerCustomerInput
descriptionstringmax length 500
referencestringYour order idmax length 128
return_urlstring <uri>
metadataobject
test_scenariostringSandbox only. See GET /v1/test/scenarios.
deviceobject
ipstring
user_agentstring
fingerprintstring

Payment

FieldTypeNotes
idstring
objectconst "payment"
modestringtest · live
statusPaymentStatus
amountinteger
currencystring
captured_amountinteger
refunded_amountinteger
capture_methodstring
payment_methodobject
typePaymentMethodType
idstring | null
countrystring | null
descriptionstring | null
referencestring | null
customerobject | null
metadataobject
routeobject
providerobject | null
provider_account_idstring | null
provider_payment_idstring | null
attemptsinteger
routing_decision_idstring | null
rulestring | null
riskobject
decision_idstring | null
scoreinteger | null
failureobject | null
codestring
categorystringsoft · hard · technical · policy
messagestring
next_actionobject | null
typestringredirect · qr_code · display_details
urlstring
qrPayloadstring
expiresAtstring
feeobject
amountinteger
currencystring
processing_time_msinteger | null
attemptsarray of Attempt
created_atstring <date-time>
updated_atstring <date-time>
processed_atstring | null <date-time>

PaymentList

FieldTypeNotes
dataarray of Payment
has_moreboolean
next_cursorstring | null

Attempt

FieldTypeNotes
idstring
attempt_numberinteger
statusstringcreated · processing · unknown · authorized · succeeded · failed · cancelled
outcomestring | nullsuccess · requires_action · soft_decline · hard_decline · technical_error · timeout · provider_unavailable · unknown · null
provider_idstring
provider_namestring | null
provider_account_idstring
provider_payment_idstring | null
provider_codestring | null
provider_messagestring | null
failureobject | null
fee_amountinteger
latency_msinteger | null
created_atstring <date-time>

TimelineEvent

FieldTypeNotes
idstring
typestring
titlestring
descriptionstring | null
attempt_idstring | null
dataobject
created_atstring <date-time>

Refund

FieldTypeNotes
idstring
objectconst "refund"
payment_idstring
amountinteger
currencystring
statusstringcreated · processing · successful · failed
reasonstring | null
provider_refund_idstring | null
failureobject | null
created_atstring <date-time>

CreatePayoutRequest

FieldTypeNotes
amountrequiredintegermin 1
currencyrequiredstring
destinationrequiredobject
typerequiredstringbank_account · wallet · card_token
tokenstringProvider beneficiary token
displayrequiredstringMasked display value
holder_namestring
countrystring
descriptionstring
referencestring
metadataobject
test_scenariostringsuccess · technical_error · hard_decline · unavailable · timeout

Payout

FieldTypeNotes
idstring
objectconst "payout"
modestring
statusstringcreated · pending · processing · successful · failed · cancelled
amountinteger
currencystring
destinationobject
routeobject
feeobject
failureobject | null
created_atstring <date-time>

Transaction

FieldTypeNotes
idstring
typestring
statusstring
entity_typestring
entity_idstring
payment_idstring | null
amountintegerSigned; negative for refunds and payouts
currencystring
fee_amountinteger
net_amountinteger
provider_namestring | null
provider_referencestring | null
payment_methodstring | null
countrystring | null
processing_time_msinteger | null
failure_codestring | null
settlement_idstring | null
occurred_atstring <date-time>

Balance

FieldTypeNotes
currencystring
processed_grossinteger
feesinteger
processed_netinteger
settled_by_providersinteger
awaiting_provider_settlementinteger
payouts_sentinteger
notestring

Settlement

FieldTypeNotes
idstring
provider_namestring | null
settlement_entitystring | null
settlement_referencestring | null
currencystring
gross_amountinteger
fee_amountinteger
net_amountinteger
transaction_countinteger
period_startstring <date-time>
period_endstring <date-time>
statusstringpending · settled · failed
settled_atstring | null <date-time>
itemsarray of object

PaymentMethod

FieldTypeNotes
idstring
objectconst "payment_method"
typePaymentMethodType
customer_idstring | null
displayobject
statusstring
created_atstring <date-time>

WebhookEvent

FieldTypeNotes
idstring
typestring
modestringtest · live
created_atstring <date-time>
dataobject
objectobjectThe payment, refund, payout or settlement object