> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rampapay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Conventions

> Amounts, rates, idempotency, ids and errors.

## Amounts

Always **decimal strings**, never numbers. USDT has 6 decimals (`"101.500000"`); BOB has 2 (`"1000.00"`). Parse them with a decimal type, never a float.

## Rates

`rate` is bolivianos per USDT, 4 decimals (`"9.9500"`), net of our markup; the fee is itemised beside it. It is informative — the end user accepts `source.amount`, and exactly that is debited. In a quote, `source` is what you pay and `target` what the destination receives, each with its `currency`.

## Idempotency

For `POST /payouts` your `transaction_id` is the idempotency key — no header. The same `transaction_id` with the same body returns the same payment; with a different body it is `409 TRANSACTION_ID_REUSED`. On a timeout or a `503`, resend the **same** request: it is paid once.

`POST /fx/quotes` is not idempotent — a retry is just another quote; show the end user the one you got. A top-up is credited once per transfer. Only the sandbox [faucet](/api-reference/wallet/faucet) takes an `Idempotency-Key` header.

## Ids

A payment's id is its `po_` id, returned when you create it: use it in `/payouts/{id}` paths. Your `transaction_id` stays on the payment as your reference; find a payment by it with `GET /payouts?transaction_id=…`.

A top-up is a deposit with a `dep_` id, named in its `deposit.*` webhooks and in the `reference` of its row in `GET /wallets/transactions`; its `chain` and `tx_hash` identify the transfer.

## Request ids

Every response carries an `X-Request-Id` header. Send your own (letters, digits and `. _ : -`, up to 128) and we echo it; otherwise we make one (`req_…`). Quote it when you ask us about a call.

## Times

ISO 8601, UTC.

## Errors

JSON. Branch on the code — in `message` for most errors, in `code` when the body has one. Never branch on the human text. Every code is listed in [Errors](/errors).

```json error theme={null}
{
  "statusCode": 409,
  "message": "QUOTE_EXPIRED",
  "error": "Conflict"
}
```

```json error with code theme={null}
{
  "code": "AMOUNT_EXCEEDS_PROVIDER_LIMIT",
  "message": "Amount exceeds the 1000.00 BOB per-payment limit. Split it into payments of 1000.00 BOB or less.",
  "max_amount": "1000.00",
  "currency": "BOB",
  "rail": "QR_PAYOUT"
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.