Historial de ETF spot
Serie diaria de tenencias, activos netos o flujo neto de un activo (suma de los fondos cubiertos) o de un único fondo. Cada punto indica cuántos fondos contiene.
/api/sd/etf/historySolicitud
Parámetros de consulta
| Nombre | Tipo | Obligatorio | Valor por defecto | Valores admitidos | Descripción |
|---|---|---|---|---|---|
| asset | string | Obligatorio | — | BTC, ETH, SOL, HYPE | Activo subyacente, sin distinción entre mayúsculas y minúsculas. `coin` se acepta como alias. Ejemplo: BTC |
| metric | string | Obligatorio | — | holdings, aum, flow | Serie que se devuelve: tenencias (moneda), activos netos (USD) o flujo neto (USD). Ejemplo: flow |
| range | string | Opcional | 30d | 30d, 90d, all | Rango retrospectivo. |
| ticker | string | Opcional | — | — | Ticker de un fondo registrado para el activo (por ejemplo `ARKB`). Por defecto: la suma de todos los fondos cubiertos. Un ticker no registrado devuelve 404; un fondo registrado que no puede recopilarse devuelve 200 con `series: null`. |
Solicitud de ejemplo
curl -s "https://www.coinboss.com/api/sd/etf/history?asset=BTC&metric=flow"Campos de la respuesta
La tabla de campos se genera a partir de respuestas reales, por lo que recoge exactamente lo que devuelve el endpoint. Las rutas usan a[] para los elementos de un array y {*} para los objetos cuya clave es un nombre dinámico, como una moneda o un exchange.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
| success | boolean | — | true cuando la solicitud se completó correctamente. En caso de fallo, el cuerpo es `{ success: false, code, error, request_id }`. |
| schema | string | — | Id de esquema de esta respuesta. Solo cambia cuando un campo existente cambia de significado o de tipo. |
| now | number | ms | Hora del servidor en el momento de generar la respuesta. |
| asset | string | — | Activo subyacente. |
| metric | string | — | Serie seleccionada por el parámetro `metric`. |
| range | string | — | Rango retrospectivo aplicado. |
| ticker | string|null | — | Ticker del fondo. |
| unit | string | — | Unidad de los valores de la serie: `coin` o `USD`. |
| funds_total | number | — | Fondos registrados para el activo. |
| funds_in_series | array | — | Fondos que contribuyen a la serie. |
| funds_in_series[] | string | — | Fondos que contribuyen a la serie. |
| first_date_by_fund | object | — | Primera fecha disponible por fondo (la clave es el ticker). claves dinámicas: ARKB,EZBC |
| first_date_by_fund.{*} | string | — | Primera fecha disponible por fondo (la clave es el ticker). |
| points | number | — | Puntos de la serie, del más antiguo al más reciente. |
| series | array | — | Puntos diarios, del más antiguo al más reciente; `null` cuando el fondo no puede recopilarse. |
| series[] | object | — | Puntos diarios, del más antiguo al más reciente; `null` cuando el fondo no puede recopilarse. |
| series[].date | string | — | Fecha de referencia del emisor del punto. |
| series[].value | number | — | Valor de la métrica seleccionada, sumado sobre los fondos presentes en esa fecha. |
| series[].funds | number | — | Una fila por fondo registrado, incluidos los fondos que no pueden recopilarse. puede faltar |
| coverage | object | — | Qué se incluye y qué no en las cifras. Conviene revisarlo antes de comparar totales con otra fuente. |
| coverage.included_exchanges | array | — | Fuentes cuyos datos frescos se incluyen. |
| coverage.included_exchanges[] | string | — | Fuentes cuyos datos frescos se incluyen. |
| coverage.unavailable | array | — | Fuentes que no pudieron incluirse, cada una con su motivo. Nunca se cuentan como 0. |
| coverage.unavailable[] | object | — | Fuentes que no pudieron incluirse, cada una con su motivo. Nunca se cuentan como 0. |
| coverage.unavailable[].exchange | string | — | Id del exchange (en minúsculas). |
| coverage.unavailable[].issuer | string | — | Id del emisor del fondo. |
| coverage.unavailable[].reason | string | — | Código de motivo legible por máquina. |
| coverage.unavailable[].detail | string | — | Explicación del motivo legible por personas. |
| coverage.stale_excluded | array | — | Filas excluidas porque su última actualización está fuera de la ventana de frescura. vacío en las muestras usadas para generar esta tabla |
| method | object | — | Enunciado en texto plano de las fórmulas utilizadas en esta respuesta, con una entrada por campo. |
| method.value | string | — | Nota de fórmula de `value`, en texto plano. |
| method.funds | string | — | Nota de fórmula de `funds`, en texto plano. |
| method.multi_day | string | — | Nota de fórmula de `multi_day`, en texto plano. |
| method.history_start | string | — | Nota de fórmula de `history_start`, en texto plano. |
| meta | object | — | Linaje y frescura de esta respuesta. |
| meta.schema | string | — | Id de esquema de esta respuesta. Solo cambia cuando un campo existente cambia de significado o de tipo. |
| meta.source | array | — | Endpoints públicos de origen de los que se recopilaron los datos. |
| meta.source[] | object | — | Endpoints públicos de origen de los que se recopilaron los datos. |
| meta.source[].exchange | string | — | Id del exchange (en minúsculas). |
| meta.source[].endpoint | string | — | Endpoint público de la fuente que lee el recolector (se muestra por linaje; los clientes nunca lo llaman). |
| meta.observed_at | number | ms | Marca de tiempo que la fuente asigna a los datos. |
| meta.received_at | number | ms | Hora en que el recolector de CoinBoss recibió los datos. |
| meta.fetched_at | number | ms | Hora en que se compuso esta respuesta. |
| meta.window | string | — | Ventana temporal que cubren las cifras. |
| meta.quality | string | — | FRESH, PARTIAL, STALE, BROKEN o UNAVAILABLE, según las marcas de tiempo de los datos y la cobertura. |
| meta.is_stale | boolean | — | True cuando los datos son más antiguos que su ventana de frescura. |
| meta.cache_ttl_s | number | s | Tiempo de vida en caché de esta respuesta. |
| meta.fallback | string | — | Qué devuelve el endpoint cuando falla el recolector o una fuente. |
Generada 2026-11-11 23:00 UTC a partir de 3 respuestas reales.
Respuesta de ejemplo
/api/sd/etf/history?asset=BTC&metric=flow · Respuesta real capturada 2026-11-13 04:02:51 UTC. Los arrays y mapas largos se abrevian para su visualización: series tenía 21 elementos; meta.source tenía 5 elementos; first_date_by_fund tenía 5 elementos; coverage.unavailable tenía 7 elementos.
- "success"true
- "schema""coinboss.sd.etf/1"
- "now"1794542297946
- "asset""BTC"
- "metric""flow"
- "range""30d"
- "ticker"null
- "unit""USD"
- "funds_total"12
- "funds_in_series"
- "ARKB"
- "BITB"
- "BTCO"
- "EZBC"
- "HODL"
- "first_date_by_fund"
- "ARKB""2026-10-14"
- "BITB""2026-11-11"
- "points"21
- "series"
- "coverage"
- "included_exchanges"
- "unavailable"
- "stale_excluded"
- "method"
- "value""own method, per fund between two consecutive issuer as-of rows: shares_x_nav = (shares_out[t] - shares_out[t-1]) x NAV[t], dated t; aum_nav_ratio_t1 (issuer pub…"
- "funds""number of funds contributing to that date; the aggregate is only comparable across dates with the same contributing funds (history starts on different dates per…"
- "multi_day""true when a contributing flow spans more than one trading day because the issuer history has no row for the day(s) in between"
- "history_start""issuer-provided official history is back-filled where it exists (21Shares valuation history, Franklin price history); other issuers start on the first collectio…"
- "meta"
- "schema""coinboss.sd.etf/1"
- "source"
- "observed_at"1794441600000
- "received_at"1794537318126
- "fetched_at"1794542297946
- "window""30d"
- "quality""PARTIAL"
- "is_stale"false
- "cache_ttl_s"300
- "fallback""collector failure keeps the last issuer row with its real as_of_date; a fund whose as_of_date is more than 1 trading day behind the expected as-of is flagged is…"
Muestras verificadas
Además del ejemplo anterior, la sonda llama a este endpoint con estos parámetros y comprueba el esquema en cada ocasión.
| Parámetros | HTTP | Latencia | Resultado |
|---|---|---|---|
| asset=ETH&range=90d&metric=aum | 200 | 5 ms | Correcto PARTIAL |
| asset=BTC&metric=holdings&ticker=ARKB | 200 | 4 ms | Correcto FRESH |
| asset=BTC | 400 | 1 ms | Correcto devuelve el error esperado |
Comprobado 2026-11-13 03:58:17 UTC
Detalles
- Autenticación
- Ninguna. Endpoint público.
- Límite de solicitudes
- 1200 solicitudes por minuto por IP
- Caché del servidor
- 5m
- Microcaché de borde
- 10s
- Frecuencia de actualización
- Tres rondas del recolector al día (02:35, 10:35, 16:35 UTC). Los emisores publican una vez por día de negociación de EE. UU., normalmente la tarde-noche de la fecha de negociación.
- Ventana
- 30d / 90d / all, un punto por fecha de referencia del emisor.
- Fuentes de datos
- Divulgaciones diarias publicadas por los propios emisores de los fondos (tenencias, activos netos, participaciones en circulación, NAV), recopiladas y almacenadas por CoinBoss (sd_etf_fund_daily). CoinBoss calcula el flujo neto a partir de esas divulgaciones.
- Cobertura de exchanges
- Solo se cubren los fondos cuyo emisor publica datos diarios legibles por máquina. `funds_total` y `funds_covered` indican cuántos; cada fondo no cubierto se lista en `coverage.unavailable` con el motivo. Los totales son sumas solo sobre los fondos cubiertos (`totals_scope = "covered_funds_only"`), no sobre todo el mercado.
- Paginación
- Sin paginación; `range` limita el número de puntos.
- Ordenación
- Fecha ascendente.
- Unidades
- Amounts in USD; holdings in units of the underlying coin; NAV and market price in USD per share; `premium_pct` and `fee_pct` in percent.
- Método
- A point sums the funds that have a row on that date; `funds` is that count. Points with different `funds` are not directly comparable. Flow is bucketed by its booking date.
- Marcas de tiempo
- Milisegundos de época Unix (UTC), salvo que la descripción del campo indique otra cosa
- Formato de respuesta
- json
- Estabilidad
- Estable
- Disponible desde
- 2026-11-11
Estado en vivo
El endpoint informa de una calidad de datos PARTIAL — Cobertura parcial: varios emisores grandes no ofrecen una divulgación pública legible por máquina que pueda recopilarse desde un servidor. Sus fondos se listan como no disponibles y los totales cubren únicamente los fondos restantes. Compare `funds_covered` / `funds_total` antes de comparar los totales con otras fuentes.
Disponibilidad, últimos 30 días
100% de 408 comprobaciones superadas
Errores
Las llamadas fallidas tienen la misma estructura en todos los endpoints. La lista completa está en la página de errores. Errores y límites de solicitudes →
| Código | HTTP | Significado | Qué hacer |
|---|---|---|---|
| INVALID_PARAM | 400 | Falta un parámetro obligatorio o un valor no se acepta. `param` indica el nombre del parámetro cuando se conoce. | No reintente sin cambios; corrija la solicitud. |
| UNAUTHORIZED | 401 | Se envió la cabecera `CB-API-KEY`, pero la clave es desconocida o está revocada. Los datos públicos no necesitan clave: elimine la cabecera o use una clave válida. | No reintente sin cambios. |
| FORBIDDEN | 403 | La ruta no forma parte de la API pública (interna o solo para cuentas). | No reintente. |
| NOT_FOUND | 404 | Ruta desconocida, o la moneda / el exchange / el fondo solicitado no existe. | No reintente; compruebe la ruta y los identificadores en el catálogo. |
| RATE_LIMITED | 429 | Más solicitudes que el límite por minuto. `Retry-After` indica los segundos de espera. | Espere el tiempo de `Retry-After` y después reintente con espera progresiva. |
| INTERNAL | 500 | Error inesperado del servidor. El mensaje es genérico por diseño; cite `request_id` al informar del error. | Reintente una vez tras unos segundos; si persiste, infórmelo con el ID de solicitud. |
| UPSTREAM_FAILED | 503 | La fuente de datos de este endpoint no respondió a tiempo. No se devuelven cifras desactualizadas ni sustitutas en su lugar. | Reintente con espera progresiva; consulte la página de estado. |
| UNAVAILABLE | 501 / 503 | El conjunto de datos no está listo temporalmente (calentamiento de la caché) o el endpoint aún no tiene una fuente pública lícita. | Reintente más tarde; el catálogo marca los endpoints que no están disponibles por diseño. |
| REQUEST_FAILED | 200 | Algunos endpoints antiguos responden HTTP 200 con `success: false`. Compruebe siempre `success`, no solo el estado HTTP. | Depende del mensaje; trátelo como una solicitud fallida. |
Pruébelo
/api/sd/etf/historyParcialstring — Underlying asset, case-insensitive. `coin` is accepted as an alias.
string — Series to return: holdings (coin), net assets (USD) or net flow (USD).
string · por defecto 30d — Look-back range.
string — Fund ticker registered for the asset (for example `ARKB`). Default: all covered funds summed. An unregistered ticker returns 404; a registered fund that cannot be collected returns 200 with `series: null`.
https://www.coinboss.com/api/sd/etf/history?asset=BTC&metric=flowMás en esta categoría
- Fondos ETF spot /api/sd/etf/funds
- Historial de ETF spot /api/sd/etf/history
- Resumen de ETF spot (información de los emisores) /api/sd/etf/overview
- Flujos netos diarios de ETF spot por fondo /api/etf/detail
- Historial de flujos netos diarios de ETF spot /api/etf/flows
- Detalle de un ETF /api/etf/fund/:ticker
- Lista de fondos ETF /api/etf/funds
- Tenencias de monedas de los ETF por fondo /api/etf/holdings
- Productos ETF / fideicomiso de un emisor /api/etf/issuer
- Resumen de ETF /api/etf/overview
- Prima / descuento de los fideicomisos de Grayscale /api/grayscale/premium
- Volúmenes de los ETF basados en futuros /api/indicators/futures-etf-volumes