Skip to main content

API Reference

Base URL: https://api.abroad.finance. Add X-API-Key to every call. See Integration basics for headers and enums.

For a live, grouped view of every endpoint, open the Swagger UI at https://api.abroad.finance/docs.

Quotes

Create Quote (POST /quote)

Calculate the crypto amount you need to send to deliver a target fiat amount.

Request body

FieldTypeRequiredDescription
amountnumberYesTarget amount in the fiat currency you want the recipient to receive.
crypto_currencystringYesSource cryptocurrency (USDC).
networkstringYesBlockchain network (STELLAR, SOLANA, or CELO).
payment_methodstringYesPayout method (BREB, PIX).
target_currencystringYesTarget fiat currency (COP or BRL).

Example

curl -X POST https://api.abroad.finance/quote \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 400000,
"crypto_currency": "USDC",
"network": "STELLAR",
"payment_method": "BREB",
"target_currency": "COP"
}'

Response

{
"expiration_time": 1732520000,
"quote_id": "550e8400-e29b-41d4-a716-446655440000",
"value": 100.5
}

value is the crypto amount (USDC) you must send before the quote expires.


Reverse Quote (POST /quote/reverse)

Calculate how much the recipient will receive for a specific crypto amount.

Request body

FieldTypeRequiredDescription
source_amountnumberYesCrypto amount you plan to send (for example, 100 USDC).
crypto_currencystringYesSource cryptocurrency.
networkstringYesBlockchain network (STELLAR, SOLANA, or CELO).
payment_methodstringYesPayout method (BREB, PIX).
target_currencystringYesTarget fiat currency.

Response

{
"expiration_time": 1732520000,
"quote_id": "550e8400-e29b-41d4-a716-446655440000",
"value": 398500
}

value is the estimated fiat amount (e.g., COP) after fees.


Transactions

Accept Transaction (POST /transaction)

Create a transaction from a quote. Returns the memo you must attach to the on-chain transfer.

Request body

FieldTypeRequiredDescription
quote_idstringYesThe ID of the quote to execute.
user_idstringYesYour internal user ID.
account_numberstringYesRecipient's account number.
bank_codestringNoOptional bank or rail identifier; provide one only if your payout rail requires it.
tax_idstringNoUser's tax ID.
redirectUrlstringNoOptional redirect after KYC.
qr_codestringNoQR code string, when applicable.

Response

{
"id": "f4a96c4c-4d1e-4ab2-a6ec-2e1b5070c5db",
"transaction_reference": "9KlsTE0eSrKm7C4bUHDF2w==",
"kycLink": null
}
KYC Requirement

If kycLink is not null, you MUST redirect the user to this URL to complete their identity verification. The transaction will remain in AWAITING_PAYMENT (or a pre-payment state) until KYC is approved.


Get Transaction Status (GET /transaction/{id})

Retrieve the latest status and memo for a transaction. Status values are described in Status lifecycle.

Response

{
"id": "f4a96c4c-4d1e-4ab2-a6ec-2e1b5070c5db",
"status": "AWAITING_PAYMENT",
"transaction_reference": "9KlsTE0eSrKm7C4bUHDF2w==",
"on_chain_tx_hash": null,
"kycLink": null,
"user_id": "test-user-01"
}

List Transactions (GET /transactions/list)

Paginated list scoped to your partner and a single external user.

Query paramTypeRequiredDescription
externalUserIdstringYesThe user_id you provided during transaction creation.
pagenumberNoPage number (default 1).
pageSizenumberNoPage size (default 20, max 100).

Response (shape):

{
"page": 1,
"pageSize": 20,
"total": 2,
"transactions": [
{
"id": "f4a96c4c-4d1e-4ab2-a6ec-2e1b5070c5db",
"status": "PAYMENT_COMPLETED",
"accountNumber": "3001234567",
"bankCode": "9101",
"quote": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"cryptoCurrency": "USDC",
"network": "STELLAR",
"paymentMethod": "BREB",
"sourceAmount": 100.5,
"targetAmount": 400000,
"targetCurrency": "COP"
}
}
]
}

OPS Reconciliation

These endpoints are for operations tooling and require the X-OPS-API-KEY header.

Reconcile Transaction By Hash (POST /ops/transactions/reconcile-hash)

Reconcile a blockchain transaction hash/signature and enqueue processing when a valid pending transaction is found.

Request body

FieldTypeRequiredDescription
blockchainstringYesOne of STELLAR, SOLANA, CELO.
on_chain_txstringYesBlockchain transaction hash/signature.
transaction_idstringNoAbroad transaction id. Required for unresolved SOLANA / CELO hashes.

Example

curl -X POST https://api.abroad.finance/ops/transactions/reconcile-hash \
-H "X-OPS-API-KEY: YOUR_OPS_KEY" \
-H "Content-Type: application/json" \
-d '{
"blockchain": "STELLAR",
"on_chain_tx": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}'

Response

{
"blockchain": "STELLAR",
"on_chain_tx": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"result": "enqueued",
"transaction_id": "550e8400-e29b-41d4-a716-446655440000",
"transaction_status": "AWAITING_PAYMENT",
"reason": null
}

Result values:

  • alreadyProcessed: hash already linked to a processed transaction.
  • enqueued: reconciliation was accepted and queued.
  • unresolved: no heuristic matching is performed (typically missing transaction_id for SOLANA/CELO).
  • invalid: payload/chain data did not validate.
  • notFound: hash was not found on-chain or in expected context.
  • failed: reconciliation execution failed unexpectedly.

Payment metadata

List banks (GET /payments/banks)

Retrieve the bank list for a payment method (defaults to BREB if omitted).

Query paramTypeRequiredDescription
paymentMethodstringNoOne of BREB, PIX.

Response:

{
"banks": [
{ "bankCode": 9101, "bankName": "BREB ENT rail" },
{ "bankCode": 9102, "bankName": "BREB TFY rail" }
]
}

For BREB, the bank list maps to its payout rails:

  • 9101 (ENT) — intra-BreB accounts
  • 9102 (TFY) — Transfiya rail

bank_code is optional for supported methods. BREB resolves rails from the account details, and PIX ignores bank_code.

Check liquidity (GET /payments/liquidity)

Returns the latest known liquidity for a payment method.

Query paramTypeRequiredDescription
paymentMethodstringNoOne of BREB, PIX.

Response:

{
"liquidity": 10000000,
"message": "Liquidity retrieved successfully",
"success": true
}

Error Codes

Status CodeDescription
400Bad Request: Invalid parameters, exceeded limits, invalid account, or expired quote.
401Unauthorized: Missing/invalid X-API-Key or bearer token.
404Not Found: Resource not found or not associated with your partner.
500Internal Server Error: Something went wrong on our end.