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).
Servers
| URL | Environment |
|---|---|
https://api.natio.me | Production |
http://localhost:4000 | Local development |
Authentication
| Scheme | Type | How it is sent | Notes |
|---|---|---|---|
apiKey | http · bearer | Authorization: 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
/v1/paymentsList payments
| Name | In | Required | Type | Description |
|---|---|---|---|---|
status | query | optional | string | Comma-separated statuses |
currency | query | optional | string | |
country | query | optional | string | |
payment_method | query | optional | string | |
reference | query | optional | string | |
search | query | optional | string | |
from | query | optional | string <date-time> | |
to | query | optional | string <date-time> | |
limit | query | optional | integer(default 50 · min 1 · max 200) | |
cursor | query | optional | string | next_cursor from the previous page |
| Status | Description | Body |
|---|---|---|
| 200 | Paginated list | PaymentList |
/v1/paymentsCreate 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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
Idempotency-Key | header | optional | string(max length 255) | Unique key per logical request. Replays return the original response; reuse with a different body returns 422. |
| Field | Type | Notes |
|---|---|---|
amountrequired | integer | Minor unitsmin 1 |
currencyrequired | string | max length 3 |
payment_methodrequired | PaymentMethodType | object | |
capture_method | string | automatic · manual |
country | string | max length 2 |
customer | CustomerInput | |
description | string | max length 500 |
reference | string | Your order idmax length 128 |
return_url | string <uri> | |
metadata | object | |
test_scenario | string | Sandbox only. See GET /v1/test/scenarios. |
device | object | |
└ip | string | |
└user_agent | string | |
└fingerprint | string |
{
"amount": 10000,
"currency": "USD",
"payment_method": "card",
"country": "US",
"reference": "ORD-1001",
"customer": {
"external_id": "cust_42",
"email": "buyer@example.com"
},
"test_scenario": "failover"
}/v1/payments/{id}Retrieve a payment
| Name | In | Required | Type | Description |
|---|---|---|---|---|
id | path | required | string |
/v1/payments/{id}/timelinePayment timeline
Ordered narrative of everything NATIO did for the payment: risk, routing, provider attempts, failover, webhooks.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
id | path | required | string |
| Status | Description | Body |
|---|---|---|
| 200 | Timeline | — |
/v1/payments/{id}/captureCapture an authorized payment
| Name | In | Required | Type | Description |
|---|---|---|---|---|
id | path | required | string | |
Idempotency-Key | header | optional | string(max length 255) | Unique key per logical request. Replays return the original response; reuse with a different body returns 422. |
| Field | Type | Notes |
|---|---|---|
amount | integer | Minor units; defaults to the full authorized amount |
/v1/payments/{id}/cancelCancel a payment
Cancels a created, pending, authorized or customer-action payment. Payments that are being sent to a provider cannot be cancelled.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
id | path | required | string | |
Idempotency-Key | header | optional | string(max length 255) | Unique key per logical request. Replays return the original response; reuse with a different body returns 422. |
| Field | Type | Notes |
|---|---|---|
reason | string |
Refunds
/v1/payments/{id}/refundRefund a payment
| Name | In | Required | Type | Description |
|---|---|---|---|---|
id | path | required | string | |
Idempotency-Key | header | optional | string(max length 255) | Unique key per logical request. Replays return the original response; reuse with a different body returns 422. |
| Field | Type | Notes |
|---|---|---|
amount | integer | Minor units; defaults to the remaining refundable amount |
reason | string | |
metadata | object |
/v1/payments/{id}/refundsList refunds of a payment
| Name | In | Required | Type | Description |
|---|---|---|---|---|
id | path | required | string |
| Status | Description | Body |
|---|---|---|
| 200 | Refunds | — |
/v1/refunds/{id}Retrieve a refund
| Name | In | Required | Type | Description |
|---|---|---|---|---|
id | path | required | string |
| Status | Description | Body |
|---|---|---|
| 200 | Refund | Refund |
Payouts
/v1/payoutsList payouts
| Name | In | Required | Type | Description |
|---|---|---|---|---|
status | query | optional | string | |
limit | query | optional | integer(default 50 · min 1 · max 200) | |
cursor | query | optional | string | next_cursor from the previous page |
| Status | Description | Body |
|---|---|---|
| 200 | Payouts | — |
/v1/payoutsCreate 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.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
Idempotency-Key | header | optional | string(max length 255) | Unique key per logical request. Replays return the original response; reuse with a different body returns 422. |
| Field | Type | Notes |
|---|---|---|
amountrequired | integer | min 1 |
currencyrequired | string | |
destinationrequired | object | |
└typerequired | string | bank_account · wallet · card_token |
└token | string | Provider beneficiary token |
└displayrequired | string | Masked display value |
└holder_name | string | |
└country | string | |
description | string | |
reference | string | |
metadata | object | |
test_scenario | string | success · technical_error · hard_decline · unavailable · timeout |
{
"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"
}/v1/payouts/{id}Retrieve a payout
| Name | In | Required | Type | Description |
|---|---|---|---|---|
id | path | required | string |
| Status | Description | Body |
|---|---|---|
| 200 | Payout | Payout |
/v1/payouts/{id}/cancelCancel a payout
| Name | In | Required | Type | Description |
|---|---|---|---|---|
id | path | required | string |
Transactions
/v1/transactionsList transactions
Ledger-style records of every financial movement (payments, refunds, payouts), including failed ones for monitoring.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
type | query | optional | string | payment · refund · payout · fee · adjustment |
status | query | optional | string | |
currency | query | optional | string | |
provider_account_id | query | optional | string | |
from | query | optional | string <date-time> | |
to | query | optional | string <date-time> | |
limit | query | optional | integer(default 50 · min 1 · max 200) | |
cursor | query | optional | string | next_cursor from the previous page |
| Status | Description | Body |
|---|---|---|
| 200 | Transactions | — |
Balances
/v1/balancesProcessed and settled amounts per currency
NATIO is not a custodian. Figures are derived from processed transactions and settlement data reported by providers.
| Status | Description | Body |
|---|---|---|
| 200 | Balances | — |
Settlements
/v1/settlementsList provider settlements
| Name | In | Required | Type | Description |
|---|---|---|---|---|
status | query | optional | string | |
provider_account_id | query | optional | string |
| Status | Description | Body |
|---|---|---|
| 200 | Settlements | — |
/v1/settlements/{id}Retrieve a settlement with its items
| Name | In | Required | Type | Description |
|---|---|---|---|---|
id | path | required | string |
| Status | Description | Body |
|---|---|---|
| 200 | Settlement | Settlement |
Payment methods
/v1/payment-methodsStore a tokenised payment method reference
Stores a reference to a token issued by a PCI-compliant provider. NATIO never accepts card numbers or CVV.
| Field | Type | Notes |
|---|---|---|
typerequired | PaymentMethodType | |
provider_tokenrequired | string | |
provider_code | string | |
customer | CustomerInput | |
display | object |
| Status | Description | Body |
|---|---|---|
| 201 | Stored | PaymentMethod |
/v1/payment-methods/{id}Retrieve a payment method
| Name | In | Required | Type | Description |
|---|---|---|---|---|
id | path | required | string |
| Status | Description | Body |
|---|---|---|
| 200 | Payment method | PaymentMethod |
Webhooks
/v1/webhooks/testSend a test event to your webhook endpoints
| Field | Type | Notes |
|---|---|---|
event_type | string | default "payment.successful" |
| Status | Description | Body |
|---|---|---|
| 200 | Queued | — |
Sandbox
/v1/test/scenariosList sandbox test scenarios
| Status | Description | Body |
|---|---|---|
| 200 | Scenarios | — |
/v1/meIdentify the API key's merchant, project and mode
| Status | Description | Body |
|---|---|---|
| 200 | Identity | — |
Schemas
The component schemas referenced above. Every $ref in the document points into this section.
Error
| Field | Type | Notes |
|---|---|---|
error | object | |
└type | string | invalid_request_error · authentication_error · permission_error · not_found_error · idempotency_error · rate_limit_error · state_error · provider_error · risk_error · internal_error |
└code | string | |
└message | string | |
└param | string | |
└details | any | |
request_id | string |
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
| Field | Type | Notes |
|---|---|---|
id | string | |
external_id | string | |
email | string <email> | |
name | string | |
country | string | max length 2 |
CreatePaymentRequest
| Field | Type | Notes |
|---|---|---|
amountrequired | integer | Minor unitsmin 1 |
currencyrequired | string | max length 3 |
payment_methodrequired | PaymentMethodType | object | |
capture_method | string | automatic · manual |
country | string | max length 2 |
customer | CustomerInput | |
description | string | max length 500 |
reference | string | Your order idmax length 128 |
return_url | string <uri> | |
metadata | object | |
test_scenario | string | Sandbox only. See GET /v1/test/scenarios. |
device | object | |
└ip | string | |
└user_agent | string | |
└fingerprint | string |
Payment
| Field | Type | Notes |
|---|---|---|
id | string | |
object | const "payment" | |
mode | string | test · live |
status | PaymentStatus | |
amount | integer | |
currency | string | |
captured_amount | integer | |
refunded_amount | integer | |
capture_method | string | |
payment_method | object | |
└type | PaymentMethodType | |
└id | string | null | |
country | string | null | |
description | string | null | |
reference | string | null | |
customer | object | null | |
metadata | object | |
route | object | |
└provider | object | null | |
└provider_account_id | string | null | |
└provider_payment_id | string | null | |
└attempts | integer | |
└routing_decision_id | string | null | |
└rule | string | null | |
risk | object | |
└decision_id | string | null | |
└score | integer | null | |
failure | object | null | |
└code | string | |
└category | string | soft · hard · technical · policy |
└message | string | |
next_action | object | null | |
└type | string | redirect · qr_code · display_details |
└url | string | |
└qrPayload | string | |
└expiresAt | string | |
fee | object | |
└amount | integer | |
└currency | string | |
processing_time_ms | integer | null | |
attempts | array of Attempt | |
created_at | string <date-time> | |
updated_at | string <date-time> | |
processed_at | string | null <date-time> |
PaymentList
| Field | Type | Notes |
|---|---|---|
data | array of Payment | |
has_more | boolean | |
next_cursor | string | null |
Attempt
| Field | Type | Notes |
|---|---|---|
id | string | |
attempt_number | integer | |
status | string | created · processing · unknown · authorized · succeeded · failed · cancelled |
outcome | string | null | success · requires_action · soft_decline · hard_decline · technical_error · timeout · provider_unavailable · unknown · null |
provider_id | string | |
provider_name | string | null | |
provider_account_id | string | |
provider_payment_id | string | null | |
provider_code | string | null | |
provider_message | string | null | |
failure | object | null | |
fee_amount | integer | |
latency_ms | integer | null | |
created_at | string <date-time> |
TimelineEvent
| Field | Type | Notes |
|---|---|---|
id | string | |
type | string | |
title | string | |
description | string | null | |
attempt_id | string | null | |
data | object | |
created_at | string <date-time> |
Refund
| Field | Type | Notes |
|---|---|---|
id | string | |
object | const "refund" | |
payment_id | string | |
amount | integer | |
currency | string | |
status | string | created · processing · successful · failed |
reason | string | null | |
provider_refund_id | string | null | |
failure | object | null | |
created_at | string <date-time> |
CreatePayoutRequest
| Field | Type | Notes |
|---|---|---|
amountrequired | integer | min 1 |
currencyrequired | string | |
destinationrequired | object | |
└typerequired | string | bank_account · wallet · card_token |
└token | string | Provider beneficiary token |
└displayrequired | string | Masked display value |
└holder_name | string | |
└country | string | |
description | string | |
reference | string | |
metadata | object | |
test_scenario | string | success · technical_error · hard_decline · unavailable · timeout |
Payout
| Field | Type | Notes |
|---|---|---|
id | string | |
object | const "payout" | |
mode | string | |
status | string | created · pending · processing · successful · failed · cancelled |
amount | integer | |
currency | string | |
destination | object | |
route | object | |
fee | object | |
failure | object | null | |
created_at | string <date-time> |
Transaction
| Field | Type | Notes |
|---|---|---|
id | string | |
type | string | |
status | string | |
entity_type | string | |
entity_id | string | |
payment_id | string | null | |
amount | integer | Signed; negative for refunds and payouts |
currency | string | |
fee_amount | integer | |
net_amount | integer | |
provider_name | string | null | |
provider_reference | string | null | |
payment_method | string | null | |
country | string | null | |
processing_time_ms | integer | null | |
failure_code | string | null | |
settlement_id | string | null | |
occurred_at | string <date-time> |
Balance
| Field | Type | Notes |
|---|---|---|
currency | string | |
processed_gross | integer | |
fees | integer | |
processed_net | integer | |
settled_by_providers | integer | |
awaiting_provider_settlement | integer | |
payouts_sent | integer | |
note | string |
Settlement
| Field | Type | Notes |
|---|---|---|
id | string | |
provider_name | string | null | |
settlement_entity | string | null | |
settlement_reference | string | null | |
currency | string | |
gross_amount | integer | |
fee_amount | integer | |
net_amount | integer | |
transaction_count | integer | |
period_start | string <date-time> | |
period_end | string <date-time> | |
status | string | pending · settled · failed |
settled_at | string | null <date-time> | |
items | array of object |
PaymentMethod
| Field | Type | Notes |
|---|---|---|
id | string | |
object | const "payment_method" | |
type | PaymentMethodType | |
customer_id | string | null | |
display | object | |
status | string | |
created_at | string <date-time> |
WebhookEvent
| Field | Type | Notes |
|---|---|---|
id | string | |
type | string | |
mode | string | test · live |
created_at | string <date-time> | |
data | object | |
└object | object | The payment, refund, payout or settlement object |