Changelog
Cambios públicos del portal y del contrato de la API. Cada entrada indica fecha efectiva, endpoints o modelos afectados, compatibilidad hacia atrás, acción requerida y enlace a la referencia actualizada.
2026-10-08: Fondos de inversión y ETF
Impacto: aditivo para quien consume fondos mutuos con los parámetros por defecto, con un cambio de tipo en el contrato: asset_id de las rutas /api/real_assets/{asset_id}/* pasa de integer a string. Acción requerida: si generas un SDK desde OpenAPI, regenéralo y trata asset_id y serieId como texto. Los IDs numéricos de fondos mutuos siguen funcionando igual. Si pides vehicle=etf, investment_fund o all, considera que serieId puede ser un UUID.
Endpoints nuevos
Los cinco requieren X-Api-Key y están disponibles en el playground. Pertenecen al área Investment Funds, que todavía no está declarada en la lista de tags del contrato. Las tres primeras devuelven un objeto meta con generated_at y expires_at; el catálogo y los precios agregan total, limit y offset. Las rutas de cartera usan otro meta, descrito abajo.
GET /api/fi/instruments: catálogo de fondos de inversión y ETF. Filtra porprovider_id,is_etf,regulatory_type(FIRESoFINRE),status(activepor defecto,inactive,unknownoall) yq(nombre, ticker o RUN). Pagina conlimit(100 por defecto, máximo 500) yoffset.GET /api/fi/instruments/{instrument_id}: detalle de un instrumento por UUID, con su clasificación regulatoria, la última cuota y los bloquesfact_sheet,article107,patrimonyytactomados de la ficha CMF.tac.statusindica la situación del dato:available,pending_review,not_checked,stale,not_reportedounavailable_or_conflict.GET /api/fi/instruments/{instrument_id}/prices: historial de valores libro CMF, con valor económico, patrimonio y aportantes por fecha. Filtra confrom_dateyto_date(YYYY-MM-DD) y pagina conlimit(1.000 por defecto, máximo 5.000) yoffset. Un rango confrom_dateposterior ato_dateresponde422.GET /api/fi/instruments/{instrument_id}/cartera/holdingsy/cartera/resumen: cartera trimestral del fondo, por posición o agrupada por tipo de instrumento. Aceptanmonth(YYYY-MM) ymarket(Nnacional,Eextranjero oall, por defecto). Sinmonth, usan el último período con posiciones observadas y responden404si el fondo no tiene ninguno. Con unmonthsin datos responden200condata: []. Unmonthmal formado responde400.metainformarun,month,availability(availableounavailableparaNyE),sources,valuation_unit: "cmf_reported"ypercentage_unit: "percent_of_fund_assets".
Un instrumento que no está publicado responde 404. Si el servicio de fondos de inversión no está disponible, estas rutas responden 503.
Endpoints modificados
GET /api/all-funds: nuevo parámetrovehicleconmutual_fund(por defecto),etf,investment_fund(fondos de inversión rescatables que no son ETF) oall. Sinvehicle, la respuesta sigue siendo el universo de fondos mutuos; cada fila agrega el campovehicle.- En filas ETF y de fondos de inversión,
serieIdes un UUID,fundIdtiene la formafi:{run},pricees el último valor libro CMF (price_basis: "valor_libro") yprice_statusindica si la cuota está al día (current), atrasada (stale) o ausente (unavailable). Cuando la cuota no está al día,dailyChangeymonthlyChangesonnull.category,fundFamily,investorClass,article107RegulationStatusyseriesContinuitysonnull, así que los filtroscategory,fund_familyyarticle107_regulation_statuslas excluyen. Sindate,tacesnullcuando no hay una ficha CMF revisada y vigente, y solo se listan instrumentos con estado CMF activo. - Con
vehicle=etfoinvestment_fund,meta.dateymeta.previousDateson la fecha de corte de fondos de inversión y ETF,meta.agfCountes0y el conteo de administradoras va enetfAgfCountoinvestmentFundAgfCount. - Con
vehicle=all,meta.date,meta.previousDateymeta.agfCountconservan los valores de fondos mutuos;metaagregaetfAgfCount,investmentFundAgfCountydatesByVehicle(ETF y fondos de inversión comparten la misma fecha de corte). - Cualquier
vehicledistinto demutual_fund, incluidoall, responde503si los datos de fondos de inversión no están disponibles. En ese caso tampoco se entregan las filas de fondos mutuos; usa el valor por defecto si solo necesitas fondos mutuos.
- En filas ETF y de fondos de inversión,
GET /api/asset_providers: nuevo parámetroscope. Conscope=allincluye las administradoras de fondos de inversión, agregacoverage(FM,ETF,FI) a cada administradora yrut,displayName,slug,instrument_countyfund_counta las que tienen fondos de inversión o ETF. La respuesta agregametacongenerated_atyexpires_at. Sinscope, la respuesta no cambia. Conscope=allpuede responder503si el servicio de fondos de inversión no está disponible; declara422para valores inválidos./days,/returns,/expense_ratio,/expense_ratio/historyy/risk_metricsbajo/api/real_assets/{asset_id}:asset_idacepta el ID numérico de una serie de fondo mutuo o el UUID de un ETF o fondo de inversión.- Un UUID que no corresponde a un instrumento publicado responde
404. Si los datos de fondos de inversión no están disponibles, estas rutas responden503. /daysentrega valores libro CMF en la moneda contable del instrumento; cada día agregacurrency,price_source: "cmf"yprice_basis: "valor_libro"./returnsusa las mismas ocho ventanas y declaraquota_source: "cmf_valor_libro". Para estos instrumentos solo admitereturn_basis=price:totalresponde422, o503mientras la base total no esté habilitada. Las series en monedas sin conversión disponible (por ejemplo COP) entregan ventanasnullcon motivounknown_currency./expense_ratioresponde200conexpense_ratio: nullcuando no hay TAC documentada, y/expense_ratio/historyrespondedata: []sin observaciones./risk_metricsentrega el último cálculo de riesgo, conunavailable_reasoncuando no se puede calcular (por ejemplounknown_currency).
- Un UUID que no corresponde a un instrumento publicado responde
Modelos
quota_sourceenReturnAttributes,FundReturnAttributesyAdjustedReturnAttributespasa de la constanteCMFa un enum:CMF,market_closeocmf_valor_libro. Hoy las respuestas usanCMFpara fondos mutuos ycmf_valor_libropara fondos de inversión y ETF.TotalReturnAttributesmantiene la constanteCMF.- En los modelos de rentabilidad, algunos
minimumymaximumenteros se publican ahora como0.0y31.0. Es un cambio de serialización, no de contrato. WatchlistRequest(rutas de cuenta, fuera de la API pública):serie_idadmite hasta 36 caracteres para aceptar UUID de ETF.
Alcance
/api/compare,/api/screener, las estadísticas por administradora y los rankings por familia siguen cubriendo solo fondos mutuos.- Las rutas de cartera
/api/funds/{run}/cartera/*no resuelven ETF ni fondos de inversión; usa las rutas de cartera bajo/api/fi/instruments. - Las respuestas de las rutas
/api/fi/*no declaran schema en OpenAPI y no traen ejemplo. Los campos descritos en esta entrada provienen del comportamiento del backend, no del contrato publicado.
2026-10-02: Continuidad de series renombradas
Impacto: aditivo en el contrato, con cambio de comportamiento en /days, /returns, /compare, /screener y /all-funds para las series renombradas. Acción requerida: si guardas IDs de series BCI renombradas, puedes seguir usándolos como entrada. Si cruzas respuestas por ID, considera que /compare, /screener y /all-funds devuelven el ID vigente; usa seriesContinuity.aliasIds para mapear el ID anterior.
Comportamiento
- La API reconoce 18 series BCI que la CMF publicó con una etiqueta nueva desde el 24 de septiembre de 2026. Ambos IDs de serie, el anterior y el vigente, resuelven a la misma identidad. Los valores cuota no se modifican. Las series Familia (
FAMIL) absorbidas por otra serie no se vinculan: su historia termina el 23 de septiembre de 2026 y sigue separada. GET /api/real_assets/{asset_id}/daysentrega la misma secuencia continua con cualquiera de los dos IDs y conserva el ID solicitado en los recursos.GET /api/real_assets/{asset_id}/returnscalcula sobre el historial continuo, conserva el ID solicitado e informa la etiqueta de serie vigente a la fecha de corte.GET /api/compareacepta los IDs anteriores. Si pides el ID anterior y el vigente de una misma serie, la respuesta trae una sola serie canónica, con el ID vigente, así que puede tener menos elementos que los IDs solicitados.GET /api/screenerlista una sola fila por serie renombrada, con el ID vigente.GET /api/all-fundslista una sola fila por serie renombrada, con el ID vigente y variaciones diaria y mensual que cruzan el cambio de etiqueta. Agrega los camposprice_as_of_date(fecha del valor cuota) yseriesContinuity. El schema de esta respuesta sigue sin declararse en OpenAPI.
Modelos
- Nuevo:
SeriesContinuity, contype(hoy solorename),previousSerie,currentSerie,firstCurrentDate(primera fecha observada con la etiqueta nueva) yaliasIds(ID vigente primero, luego el anterior). MarketAttributes, usado por/api/comparey/api/screener, agregaseriesContinuityopcional y nullable. Esnullcuando la serie no tiene renombre.
2026-10-01: Nueva cuota del tier free
Impacto: restrictivo para las keys del tier free. Acción requerida: revisa tu consumo diario con GET /api/key/info. Si supera 300 requests, optimiza o solicita más cuota.
- La cuota diaria del tier
freebaja de 5.000 a 300 requests/día. Aplica a las keys nuevas y a las existentes. Las keys no cambian y siguen funcionando. - El tier
institutional(referencia: 25.000 requests/día) y el límite por IP de 10 requests/segundo (ráfagas de 20) no cambian. - Si necesitas más cuota, escribe a api@buscafondos.com indicando tu requerimiento (requests diarias estimadas, endpoints y frecuencia) y tu justificación (caso de uso y por qué la cuota
freeno alcanza). - La tabla completa y recomendaciones para rendir la cuota están en límites por tier.
2026-09-06: Rentabilidades, comparador y screener
Impacto: aditivo. Ningún endpoint existente cambia de forma incompatible. Acción requerida: ninguna.
Endpoints nuevos
Los tres requieren X-Api-Key y están disponibles en el playground.
GET /api/real_assets/{asset_id}/returns: rentabilidades de una serie en ocho ventanas (1m,3m,6m,1y,ytd,3y_ann,5y_ann,last_closed_month), en fracción decimal, con fecha de corte y motivo cuando una ventana no está disponible.valuationaceptaaccounting(por defecto),clporeal_uf;return_basisaceptaprice(por defecto) ototal. Las bases ajustadas responden503mientras no estén habilitadas.GET /api/compare: compara entre una y diez series del último lote publicado, conservando el orden solicitado.seriesrecibe IDs decimales de serie separados por comas. Entrega retornos de precio en moneda contable, datos del catálogo y esferas CMF, con comparabilidad por período y de esferas informadas por separado. Responde404si un ID no pertenece al universo publicado y422si la lista es inválida, tiene duplicados o supera diez series.GET /api/screener: filtra el último lote publicado por nombre o RUN, familia, clase de inversionista, moneda, categoría, administradora, rango de esferas CMF y familia o tipo de inversionista CMF.sortadmiteid,tac,cmf_spheresy las ocho ventanas de rentabilidad; ordenar por retorno requierecurrencyy ordenar por esferas requierecmf_familyycmf_investor_type. Pagina conlimit(1 a 200) yoffset; el paginado es estable dentro del mismo lote.
Endpoints modificados
GET /api/all-funds: declara la respuesta503que ya producía cuando la base cambia entre dos lecturas consecutivas. Reintenta respetandoRetry-After. Su descripción ahora explica que coalesce misses por respuesta efectiva.
Modelos
- Nuevos:
FundReturnResponse,AdjustedReturnResponse,TotalReturnResponsey sus recursos, atributos y ventanas (ReturnPeriods,ReturnPeriod,CmfSpheres,AppliedDistribution,AppliedExchange,FactorCoverage,EndpointInputs,IndicatorInput,PeriodInputs, entre otros). - Nuevos para el comparador y el screener:
CompareResponse,CompareMeta,ScreenerResponse,ScreenerMeta,ReturnAttributes,MarketAttributes,MarketResource,PeriodComparability,ReturnComparabilityySpheresComparability. Article107EvidenceResponseagrega el campo requeridoseriesException.AlertPreferenceRequest(rutas de cuenta, fuera de la API pública):email_opt_in_alertspasa a ser opcional y nullable, y se agregaemail_opt_in_monthly_summary.info.contactdel contrato apunta aapi@buscafondos.com.
Notas del contrato
/api/comparey/api/screenerpertenecen al área nuevaFund Returns, declarada en el contrato con su descripción. Ambos declaran503cuando el lote publicado no existe o es inválido; reintenta respetandoRetry-After.- El comparador no incluye historia diaria y el screener no incluye metadatos de comparabilidad. Las esferas CMF no equivalen a rentabilidad ajustada por riesgo.