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