Fiat Accounts
Accounts Unigox issues to your customers, in their own name, for them to be paid into.
A fiat account belongs to a customer you created with POST /api/v1/partner/users and put through KYC, and it is addressed by its own fiat_account_id. Open one, show the customer where to pay in, and read what lands on it. In v1 an account only receives: moving money off it is not on this API, and converting it is an order.
An optional product Unigox activates per partner. GET /api/v1/partner/fiat-accounts/config answers whether it is on for you, before any customer is in scope.
Whether you may issue fiat accounts right now, which currencies an account may be denominated in, and which jurisdictions each currency can be issued from. The one fiat account route that names no customer.
Entitlement is never an error here: when the product is not active it answers 200 with enabled: false and a disabled_reason. issues_accounts: false with enabled: true means you may read accounts but not open them.
Partner API key for authentication. Required for all partner account endpoints.
Current configuration
trueMissing or invalid credential
GET /api/v1/partner/fiat-accounts/config HTTP/1.1
Host: api-staging.unigox.com
X-API-Key: YOUR_API_KEY
Accept: */*
{
"success": true,
"data": {
"enabled": true,
"issues_accounts": true,
"disabled_reason": "PRODUCT_NOT_ACTIVATED",
"currencies": [
"EUR",
"GBP"
],
"issuers": {
"EUR": [
"NL",
"MT"
],
"GBP": [
"GB"
]
}
}
}Every fiat account issued to one of your customers. A customer with none yet answers an empty list.
Only the last four digits of the identifier travel here. Read a single account for the pay-in details a customer needs.
Partner API key for authentication. Required for all partner account endpoints.
The customer whose accounts to list.
550e8400-e29b-41d4-a716-446655440000Accounts
trueNo such customer, or not yours (CUSTOMER_NOT_FOUND)
GET /api/v1/partner/fiat-accounts?user_uuid=123e4567-e89b-12d3-a456-426614174000 HTTP/1.1
Host: api-staging.unigox.com
X-API-Key: YOUR_API_KEY
Accept: */*
{
"success": true,
"data": {
"fiat_accounts": [
{
"fiat_account_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"user_uuid": "550e8400-e29b-41d4-a716-446655440000",
"currency": "EUR",
"issuer_country": "NL",
"status": "active",
"created": true,
"iban": "NL91ABNA0417164300",
"bic": "ABNANL2A",
"account_number": "25976129",
"sort_code": "23-08-01",
"iban_last4": "8827",
"account_number_last4": "4471",
"bank_name": "ABN AMRO",
"holder_name": "Maria ZALISHCHUK",
"balances": [
{
"currency": "EUR",
"available": "1250.00",
"pending": "0.00",
"total": "1250.00"
}
],
"balances_unavailable": false,
"created_at": "2026-09-18T10:00:00Z"
}
]
}
}Opens a fiat account for one of your customers. The customer must be KYC-verified by Unigox; everything the bank needs about them comes from that verification, so there is no identity to submit here.
The account is opened asynchronously. It answers 201 with status: "pending" and no pay-in details; watch for fiat_account.updated — or poll the account — until it reads active, and only then tell the customer where to transfer.
Idempotent per (user_uuid, currency, issuer_country). A repeat answers 201 with the same account and created: false.
When the bank needs a field the KYC record does not have, this answers 422 ISSUANCE_NOT_READY and names those fields in error.details.missing_fields. They are KYC field names: fill them with PATCH /api/v1/partner/users/{user_uuid}/kyc and post again.
Partner API key for authentication. Required for all partner account endpoints.
One of your customers, KYC-verified by Unigox.
550e8400-e29b-41d4-a716-446655440000One of config.currencies.
EURISO 3166-1 alpha-2, one of config.issuers[currency]. Omitted, the currency's default
jurisdiction is used.
NLOnly needed when the chosen jurisdiction requires one and the customer's KYC record has none. Sent here, it is written onto that KYC record.
1011 ABOpened, or the existing account for this (customer, currency, jurisdiction). created
distinguishes the two.
UNSUPPORTED_CURRENCY, UNSUPPORTED_ISSUER_COUNTRY or POSTAL_CODE_REQUIRED.
falseNot entitled (PRODUCT_NOT_ACTIVATED, ISSUANCE_NOT_GRANTED)
No such customer, or not yours (CUSTOMER_NOT_FOUND)
The same account is already being opened (PROVISIONING_IN_PROGRESS)
The customer is not verified (KYC_NOT_CLEARED), the bank needs fields the KYC record
does not have (ISSUANCE_NOT_READY, with error.details.missing_fields), or the
currency has no pricing (CURRENCY_NOT_PRICED).
The bank could not be reached (BANKING_UNAVAILABLE). Safe to retry.
POST /api/v1/partner/fiat-accounts HTTP/1.1
Host: api-staging.unigox.com
X-API-Key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 115
{
"user_uuid": "550e8400-e29b-41d4-a716-446655440000",
"currency": "EUR",
"issuer_country": "NL",
"postal_code": "1011 AB"
}{
"success": false,
"error": {
"code": "QUOTE_EXPIRED",
"message": "Quote has expired, please request a new quote",
"details": {
"quoted_rate": 1530.12,
"current_rate": 1545
}
}
}One account: its status, its live balances, and — once it is active — the pay-in details to show the customer.
Those details are shaped by the rail the account is on: iban and bic for a euro (SEPA) account, account_number and sort_code for a sterling (Faster Payments) one. Keys that do not apply are absent rather than empty.
balances_unavailable: true means the balance read failed. Balances are reported as unavailable rather than as zero: a zero you act on is worse than a gap.
Partner API key for authentication. Required for all partner account endpoints.
The account's id, as returned in fiat_account_id. An id that names no account and one
that is not yours both answer 404; they are indistinguishable on purpose.
7c9e6679-7425-40de-944b-e07fc1f90ae7Account
trueNo such account, or not yours (FIAT_ACCOUNT_NOT_FOUND)
GET /api/v1/partner/fiat-accounts/{fiat_account_id} HTTP/1.1
Host: api-staging.unigox.com
X-API-Key: YOUR_API_KEY
Accept: */*
{
"success": true,
"data": {
"fiat_account_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"user_uuid": "550e8400-e29b-41d4-a716-446655440000",
"currency": "EUR",
"issuer_country": "NL",
"status": "active",
"created": true,
"iban": "NL91ABNA0417164300",
"bic": "ABNANL2A",
"account_number": "25976129",
"sort_code": "23-08-01",
"iban_last4": "8827",
"account_number_last4": "4471",
"bank_name": "ABN AMRO",
"holder_name": "Maria ZALISHCHUK",
"balances": [
{
"currency": "EUR",
"available": "1250.00",
"pending": "0.00",
"total": "1250.00"
}
],
"balances_unavailable": false,
"created_at": "2026-09-18T10:00:00Z"
}
}One page of the money that moved on the account, newest first. v1 is receive-only, so every row is a credit: a transfer the customer's payer sent to the account.
A credit that funded an on-ramp carries that order in order_id; one that matched no order carries null and simply sits on the account.
Paging is page. has_more says whether another page exists.
Partner API key for authentication. Required for all partner account endpoints.
The account's id, as returned in fiat_account_id. An id that names no account and one
that is not yours both answer 404; they are indistinguishable on purpose.
7c9e6679-7425-40de-944b-e07fc1f90ae71-based page number. Omitted or unparseable means the first page.
1Transactions page
trueNo such account, or not yours (FIAT_ACCOUNT_NOT_FOUND)
The bank could not be read (BANKING_UNAVAILABLE)
GET /api/v1/partner/fiat-accounts/{fiat_account_id}/transactions HTTP/1.1
Host: api-staging.unigox.com
X-API-Key: YOUR_API_KEY
Accept: */*
{
"success": true,
"data": {
"transactions": [
{
"transaction_id": "5f1b2c9a-1d44-4f0e-9c1a-2b5f0d7e9a31",
"type": "credit",
"amount": "500.00",
"currency": "EUR",
"order_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"description": "Invoice 2026-114",
"created_at": "2026-09-18T10:04:22Z"
}
],
"has_more": false
}
}Last updated
