# Tasas BCV

## GET /api/quantis/v2/rates/bcv/

Devuelve las tasas de cambio oficiales vigentes del Banco Central de Venezuela (BCV) para cinco monedas (USD, EUR, CNY, TRY, RUB) cotizadas en Bolívar venezolano (VES). Cuando el BCV ya publicó las tasas del día siguiente, estas aparecen bajo `next`.

| | |
|---|---|
| **Método** | `GET` |
| **URL** | `https://app.vzla.io/api/quantis/v2/rates/bcv/` |
| **Autenticación** | `Authorization: Bearer vzlaio_...` |
| **Parámetros** | Ninguno |

### Solicitud

```bash
curl --request GET \
  --url 'https://app.vzla.io/api/quantis/v2/rates/bcv/' \
  --header 'Authorization: Bearer vzlaio_TU_TOKEN_AQUI'
```

---

### Respuesta

#### `data.current`

Las tasas BCV actualmente vigentes.

| Campo | Tipo | Descripción |
|---|---|---|
| `valid_date` | string (fecha ISO 8601) | Fecha en que estas tasas están en vigencia, p. ej. `"2026-05-06"` |
| `timestamp` | string (datetime ISO 8601) | Cuándo el BCV publicó estas tasas |
| `rates` | object | Mapa de código de moneda → objeto de tasa |

**Objeto de tasa** (claves: `USD`, `EUR`, `CNY`, `TRY`, `RUB`)

| Campo | Tipo | Descripción |
|---|---|---|
| `rate` | string | VES por 1 unidad de esta moneda |
| `indicator_pct` | string | Variación porcentual respecto a la tasa anterior |
| `indicator_amount` | string | Variación absoluta respecto a la tasa anterior en VES |

#### `data.next`

Las tasas del día siguiente publicadas con anticipación por el BCV. Tiene la misma estructura que `data.current`. Devuelve `null` si el BCV aún no ha publicado las tasas de mañana.

#### `meta`

| Campo | Tipo | Descripción |
|---|---|---|
| `source` | string | Siempre `"BCV"` |
| `currency_quote` | string | Siempre `"VES"` — todas las tasas están cotizadas en Bolívar venezolano |

---

### Encabezados de respuesta

| Encabezado | Descripción |
|---|---|
| `X-API-Version` | `2.0` |
| `X-Quota-Limit` | Tu límite mensual de solicitudes |
| `X-Quota-Remaining` | Solicitudes restantes este mes |
| `X-Quota-Reset` | Timestamp ISO 8601 del próximo reinicio de cuota |
| `X-Request-ID` | UUID de esta solicitud |

---

### Ejemplo de respuesta

```json
{
  "data": {
    "current": {
      "valid_date": "2026-05-06",
      "timestamp": "2026-05-06T09:32:03.108501+00:00",
      "rates": {
        "USD": {
          "rate": "493.37650000",
          "indicator_pct": "0.78066864",
          "indicator_amount": "3.82180000"
        },
        "EUR": {
          "rate": "577.52186207",
          "indicator_pct": "0.57960395",
          "indicator_amount": "3.32804999"
        },
        "CNY": {
          "rate": "72.23667642",
          "indicator_pct": "0.74082854",
          "indicator_amount": "0.53121453"
        },
        "TRY": {
          "rate": "10.91188465",
          "indicator_pct": "0.70889670",
          "indicator_amount": "0.07680949"
        },
        "RUB": {
          "rate": "6.54128604",
          "indicator_pct": "0.10523445",
          "indicator_amount": "0.00687645"
        }
      }
    },
    "next": null
  },
  "meta": {
    "source": "BCV",
    "currency_quote": "VES"
  }
}
```

---

### Códigos de estado HTTP

| Código | Significado |
|---|---|
| `200 OK` | Éxito. |
| `401 Unauthorized` | Token ausente o inválido. |
| `405 Method Not Allowed` | Solo se admite GET. |
| `429 Too Many Requests` | Cuota mensual agotada. |
| `500 Internal Server Error` | Error del servidor. Reintenta después de un momento. |

#### 401 — sin encabezado Authorization

```json
{
  "error": {
    "code": "auth_missing",
    "message": "Authentication credentials were not provided"
  }
}
```

#### 401 — token inválido

```json
{
  "error": {
    "code": "auth_token_unknown",
    "message": "Invalid token format"
  }
}
```

#### 429

```json
{
  "error": {
    "code": "quota_exceeded",
    "message": "Monthly quota limit exceeded.",
    "details": {
      "reset_at": "2026-06-01T00:00:00Z"
    }
  }
}
```
**Note:** Las tasas BCV se actualizan una vez al día en días hábiles. Este endpoint tiene caché de **60 minutos**.