API del Dólar Blue Bolivia

API REST gratuita para acceder a observaciones del dólar blue en Bolivia. Muestras públicas sin autenticación; revisá la fecha de cada observación.

Unidades, fechas y fuentes

Los campos buy_bob_per_usd y sell_bob_per_usd, y buy, sell y mid del histórico, expresan BOB por USD de referencia. La fuente es el mercado P2P USDT/BOB; no es una oferta de efectivo ni garantiza la paridad USDT/USD. Los campos official_buy, official_sell y official_mid son una comparación separada en BOB por USD. En la cotización actual, solo se publican valores con official_observation verificada; unavailable o unverified devuelve null. official_status stale conserva el último BCB verificado, con official_source_date y official_observed_at originales.

updated_at_iso es la fecha de la observación; en los puntos históricos se llama t. generated_at_iso y metadata.generated_at indican cuándo se generó la respuesta o exportación, no una nueva observación. Revisá is_stale y la fecha de la lectura: las actualizaciones pueden retrasarse.

Los registros antiguos sin source_observation no acreditan qué plataformas participaron. Los nuevos registros pueden guardar una instantánea de fuentes, precios, versión del esquema e identificador del método; solo se publica cuando coincide con la lectura. En el pasado coexistieron métodos distintos; no las reclasificamos como una serie homogénea. Si sources_used está vacío, la composición de fuentes de esa observación es desconocida. Cambiar el recolector no corrige ni modifica observaciones pasadas.

source_provenance: persisted_observation identifica un source_observation válido: versión, método, activos y fuentes son válidos, y la fecha y las medianas coinciden con la fila guardada. Si no es válido o falta, source_observation es null y sources_used está vacío; no infieras plataformas participantes.

En JSON, cada punto incluye su procedencia. metadata.source_provenance puede ser persisted_observation, unavailable_for_historical_rows o mixed; provenance_rows_recorded y provenance_rows_unavailable cuentan las filas de cada grupo. CSV conserva sus siete columnas y no incluye snapshots de fuentes; usá JSON para la procedencia por fila. Los campos official_* históricos conservan los valores guardados, incluidos registros antiguos de fuente no verificada; no los atribuyas al BCB sin validar official_observation y official_status. metadata.official_provenance es per_row_in_json; legacy_values_unverified. En el histórico, stale conserva evidencia BCB validada: indica antigüedad al generar la exportación o un fallback ya marcado stale, no ausencia de procedencia. Para citarla, usá official_source_date y official_observed_at, no la fecha P2P t.

Las descargas públicas tienen un límite de 4.000 filas recientes. Consultá las fechas de cobertura y truncated en el JSON o las cabeceras del CSV antes de citar un período completo. Se conserva la exclusión existente de filas identificadas como interpolación durante una interrupción de 2026. Los campos official_* de las descargas conservan valores guardados, incluidos valores de fuente no verificada. CSV no incluye el estado oficial por fila: usá JSON y comprobá official_observation y official_status antes de atribuir un valor al BCB; unverified no acredita esa fuente.

Endpoints Disponibles

GET /api/blue-rate

Cotización actual USD/BOB. La composición de fuentes puede no estar registrada para la fila guardada.

Campos de respuesta documentados

{
  "buy_bob_per_usd": "number",
  "sell_bob_per_usd": "number",
  "updated_at_iso": "ISO 8601 observation time",
  "generated_at_iso": "ISO 8601 response generation time",
  "is_stale": "boolean",
  "sources_used": "array (empty when provenance is unknown)",
  "source_count": "number",
  "source_provenance": "persisted_observation | unavailable_for_stored_row",
  "source_observation": "validated snapshot or null",
  "quote_kind": "usdt_p2p_median",
  "official_buy": "number or null",
  "official_sell": "number or null",
  "official_mid": "number or null",
  "official_observation": "validated BCB evidence or an empty unavailable/unverified record; fields: version, status, source, source_url, source_date, observed_at, buy, sell, mid",
  "official_status": "verified | stale | unavailable | unverified",
  "official_source": "bcb or null",
  "official_source_date": "BCB board YYYY-MM-DD or null",
  "official_observed_at": "original BCB retrieval ISO 8601 or null"
}

https://www.boliviablue.com/api/blue-rate

GET /api/historical-data.csv

Hasta 4.000 observaciones recientes, ordenadas por fecha ascendente. 30d limita el período; all selecciona las últimas filas disponibles, no todo el archivo. 90d y 1y devuelven 400. No se requiere token para estas muestras públicas.

Parámetros

  • range (string): Default: 30d (30d, all)
  • limit (integer): 1–4000; default 4000. Larger values are capped at 4000.

Campos de respuesta documentados

CSV columns: t,buy,sell,mid,official_buy,official_sell,official_mid. Coverage headers: X-Data-Range, X-Data-Rows, X-Data-Limit, X-Data-Truncated, X-Data-Start, X-Data-End, X-Data-Provenance. Official provenance header: X-Official-Provenance: legacy-values-unverified; per-row-status-in-json. Legacy official values have unverified provenance; use JSON for per-row official_status and official_observation.

https://www.boliviablue.com/api/historical-data.csv?range=30d

GET /api/historical-data.json

Hasta 4.000 observaciones recientes, ordenadas por fecha ascendente. 30d limita el período; all selecciona las últimas filas disponibles, no todo el archivo. 90d y 1y devuelven 400. No se requiere token para estas muestras públicas.

Parámetros

  • range (string): Default: 30d (30d, all)
  • limit (integer): 1–4000; default 4000. Larger values are capped at 4000.

Campos de respuesta documentados

JSON: { range, count, points: [{ t, buy, sell, mid, official_buy, official_sell, official_mid, official_observation, official_status, official_source, official_source_date, official_observed_at, source, sources_used, source_count, source_provenance, source_observation, quote_kind }], metadata: { range_requested, requested_start, requested_end, returned_start, returned_end, rows_returned, limit, truncated, selection, order, source, source_provenance, provenance_rows_recorded, provenance_rows_unavailable, csv_provenance, official_provenance, excluded_interpolated_gap, attribution, generated_at } }

https://www.boliviablue.com/api/historical-data.json?range=30d

GET /api/health

Estado del archivo y fecha de la última observación.

Campos de respuesta documentados

{
  "ok": "boolean",
  "updated_at_iso": "ISO 8601 or null",
  "history_points": "number",
  "host": "vercel"
}

https://www.boliviablue.com/api/health

Cobertura y límites

La API pública y sus muestras siguen disponibles sin registro. Las descargas ampliadas automáticas del servicio separado no están disponibles aquí; cualquier cobertura o acceso adicional requiere revisión manual.

Los datos son solo informativos, no constituyen asesoramiento financiero