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

# All exchange rates

> Get a snapshot of markets available to your plan and the index when it can be calculated.

`GET /v1/fx/rates` · All plans. The response is filtered by the account’s access.

<span id="request" />

## Request

No parameters are required. Supports `format` for [CSV/XML](/en/api/formats) and `markup` to apply a saved markup configuration when included in the plan. There is no `country` selector or parameter to convert the entire snapshot to AUD.

With `markup=<tag>`, a different representation is used: it adds root-level `markup_applied` and, for affected rows, `mid_with_markup` and `markup_applied`. `mid` retains the original reference. Currently this representation does not include per-row `base`, `effective_date` or `stale_after_sec`. Do not use it to obtain an invoice’s value date; query the rate without markup. It requires a paid plan and an active rule; a missing rule returns `404 markup_not_found`.

Run these examples on your server. JavaScript and Python use the clients in the [quickstart](/en/api/quickstart#paso-2); configure `COTIZAVE_API_KEY` there.

<CodeGroup>
  ```bash curl theme={null}
  curl --fail-with-body --max-time 10 "https://api.cotizave.com/v1/fx/rates" \
    -H "X-API-Key: $COTIZAVE_API_KEY"
  ```

  ```javascript Node.js theme={null}
  import { cotizave } from './cotizave.mjs';

  const data = await cotizave('/v1/fx/rates');
  console.log(data);
  ```

  ```python Python theme={null}
  from cotizave import cotizave

  data = cotizave('/v1/fx/rates')
  print(data)
  ```
</CodeGroup>

<span id="response" />

## Response

Illustrative response: figures and dates are not current quotes.

```json theme={null}
{
  "country": "VE",
  "currency": "VES",
  "base": "USD",
  "rates": [
    {
      "market": "reference",
      "type": "reference",
      "mid": 475.0083,
      "updated_at": "2026-10-19T04:00:00Z",
      "effective_date": "2026-10-19"
    },
    {
      "market": "eur_reference",
      "type": "reference",
      "base": "EUR",
      "mid": 550.12,
      "updated_at": "2026-10-19T04:00:00Z",
      "effective_date": "2026-10-19"
    },
    {
      "market": "parallel",
      "type": "parallel",
      "mid": 638.87,
      "updated_at": "2026-10-19T17:25:00Z"
    }
  ],
  "fetched_at": "2026-10-19T17:29:15Z"
}
```

The example contains three markets and omits optional `index`. Production responses can contain more markets. `country`, `currency`, `base`, `rates` and `fetched_at` describe the snapshot. **The overall USD base does not convert EUR rows to USD**: read each rate’s base currency. `index` is omitted when it cannot be calculated; see its [reference](/en/api/endpoints/index).

| Field | Meaning |
| - | - |
| `market` | Stable market identifier. |
| `type` | `reference`, `parallel`, `p2p`, `remittance`, `cash` or `exchange_house`. Accept new types. |
| `base` | Optional base currency. Defaults to USD when absent; `eur_reference` uses EUR. |
| `mid` | VES per unit of the base currency. |
| `ask`, `bid` | Optional quotes; may be omitted. Not every market has both sides. |
| `updated_at` | Quote update timestamp, ISO 8601. |
| `effective_date` | Optional BCV value date, `YYYY-MM-DD` in the Caracas calendar. |
| `stale_after_sec` | Optional age threshold in seconds provided for that source. |

| Market | Base | Type / minimum access |
| - | - | - |
| `reference` | USD | Official BCV · Gratis |
| `eur_reference` | EUR | Official BCV · Gratis |
| `parallel` | USD | Free-market reference · Gratis |
| `binance`, `bybit`, `okx`, `bitget`, `mexc`, `bingx`, `saldo` | USD | Normalised P2P USDT/VES quotes · Gratis |
| `paypal`, `zelle` | USD | Remittances, to VES only · Esencial |
| `syklo`, `yadio`, `zoom`, `western_union` | USD | Extended markets · Profesional |
| `cash`, `cucuta` | USD | Cash · Escala |

<span id="casos-uso" />

## Compare rates in the same currency

```javascript theme={null}
import { cotizave } from './cotizave.mjs';
const snapshot = await cotizave('/v1/fx/rates');
const usdRates = snapshot.rates.filter(rate =>
  (rate.base ?? (rate.market === 'eur_reference' ? 'EUR' : 'USD')) === 'USD'
);
for (const rate of usdRates) {
  console.log({ market: rate.market, ves_per_usd: rate.mid, updated_at: rate.updated_at });
}
```

This example uses the client from the [quickstart](/en/api/quickstart#paso-2). For monetary calculations, use decimal precision and your application’s rounding policy.

<span id="errores" />

## Errors

The [common errors](/en/api/errors) for authentication, quota and availability also apply. API error responses are JSON; branch on `code`, not on the text of `message`.

<span id="notas" />

## Availability and freshness

Look up by `market`, never by array position. A source may be absent or retain its last quote; a recent `fetched_at` does not guarantee every `updated_at` is recent. P2P rates are representative quotes, not an order book or executed trades. The list can grow.


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