EDI Analytics API
v1
Inicio rápido OpenAPI

EDI Analytics API

Acceso programático a los mismos motores que impulsan la plataforma EDI: resolución de valores en Estados Unidos, Brasil, México y Perú; precios globales de fin de jornada; estados financieros estandarizados con inteligencia de períodos fiscales; matrices entre dominios a fecha de corte; y ejecución asíncrona por lotes. Una misma solicitud produce la misma cifra en Excel, Python, la Quant Workstation y un reporte programado — la paridad es estructural, no algo que se verifica a posteriori.

URL base https://api.edi.finance Mercados US · BR · MX · PE Formato JSON (camelCase) Autenticación cookie de sesión Especificación OpenAPI 3 ↗

Inicio rápido

Autentíquese una sola vez — la cookie de sesión lleva sus permisos de acceso en cada llamada posterior.

bash
# 1. Inicie sesión (guarda la cookie de sesión)
curl -c cookies.txt -X POST https://api.edi.finance/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "you@yourfirm.com", "password": "…"}'

# 2. Resuelva identificadores a ids canónicos de entidad
curl -b cookies.txt -X POST https://api.edi.finance/api/analytics/v1/resolve \
  -H "Content-Type: application/json" \
  -d '{"identifiers": [{"value": "PETR4-BR"}, {"value": "AAPL"}]}'

# 3. Una grilla de comparables entre mercados en USD, en una sola llamada
curl -b cookies.txt -X POST https://api.edi.finance/api/analytics/v1/matrix \
  -H "Content-Type: application/json" \
  -d '{"ids": ["AAPL-US","BBAS3-BR","BIMBOA-MX"],
       "metrics": ["close","MARKET_CAP","SECTOR"],
       "asOf": "2026-07-30", "currency": "USD"}'

O con el cliente de referencia en Python:

python
from edi_analytics import EdiAnalyticsClient, spill_matrix

client = EdiAnalyticsClient("https://api.edi.finance")
client.login("you@yourfirm.com", "…")

env = client.matrix(ids=["AAPL-US", "BBAS3-BR"],
                    metrics=["close", "MARKET_CAP", "SECTOR"])
grid = spill_matrix(env, ids=["AAPL-US", "BBAS3-BR"],
                    metrics=["close", "MARKET_CAP", "SECTOR"])

Autenticación de servicio — claves de API

Para scripts, SDKs e integraciones servidor a servidor, cree una clave de API (actúa en su nombre, con sus permisos) y envíela como X-API-Key o Authorization: Bearer — sin cookies. Las claves se muestran una sola vez al crearse, pueden expirar y son revocables; la gestión de claves siempre exige una sesión iniciada, nunca una clave.

bash
# Cree una clave (autenticado con sesión) y úsela donde quiera
curl -b cookies.txt -X POST https://api.edi.finance/api/analytics/v1/keys \
  -H "Content-Type: application/json" -d '{"label": "research pipeline", "expiresInDays": 365}'

curl -H "X-API-Key: edi_sk_…" -X POST https://api.edi.finance/api/analytics/v1/resolve \
  -H "Content-Type: application/json" -d '{"identifiers": [{"value": "AAPL"}]}'

Python: EdiAnalyticsClient("https://api.edi.finance", api_key="edi_sk_…") — omita login() por completo.

Conceptos fundamentales

El sobre de respuesta

Todos los endpoints de datos devuelven el mismo sobre de tres partes. Las filas en data son planas y autodescriptivas — se serializan de forma idéntica a JSON, CSV y rangos de derrame (spill) de Excel.

json
{
  "data":   [ /* filas de observación planas */ ],
  "errors": [ /* fallas a nivel de fila — nunca una falla de la solicitud */ ],
  "meta":   { "pagination": { "total": 412 }, "registryVersion": "2026.07.16.1A" }
}

Identificadores y el eco del requestId

Todos los endpoints aceptan directamente identificadores de tipos mixtos — tickers calificados por mercado (PETR4-BR, BIMBOA-MX), tickers sin sufijo, códigos ISIN, CUSIP, CIK e ids canónicos de entidad. Cada fila de respuesta lleva tanto requestId (su identificador, exactamente como lo envió — la clave de unión de regreso a la celda de su hoja de cálculo o al índice de su dataframe) como entityId (nuestra clave canónica, estable frente a cambios de ticker y clases de acciones).

La falla parcial es la norma

Un ticker inválido jamás debe tumbar un libro de 500 celdas. Los identificadores no resolubles, las métricas desconocidas y las conversiones que no pueden cotizarse regresan como entradas en errors — cada una con un requestId, un code estable y un detail legible — mientras todas las demás filas se devuelven con normalidad.

Procedencia

Cada respuesta declara la versión del registro de métricas con la que fue valorizada (meta.registryVersion), y las filas indican la divisa efectivamente devuelta. Las cifras son auditables entre clientes: la misma solicitud produce el mismo valor en todas partes, por construcción.

Vocabulario

Los parámetros de solicitud siguientes significan lo mismo en todos los endpoints que los aceptan.

Periodicidad (estados financieros)

ValorSignificado
FYAños fiscales, tal como fueron reportados.
QTRTrimestres fiscales verdaderos. Los 10-Q almacenados como acumulados del año se desacumulan del lado del servidor; el Q4 se deriva del total del año fiscal cuando no se reporta.
LTMSuma móvil de los últimos cuatro trimestres al cierre de cada trimestre (flujos). Las partidas de punto en el tiempo devuelven su valor al cierre de ese trimestre.
YTDAcumulado dentro de cada año fiscal.
SEMIEn preparación — a la espera de la normalización semestral.

basis selecciona el eje de reexpresión: original (predeterminado) o restated (en preparación — a la espera del modelado de vintages).

Frecuencia (precios y series)

ValorObservaciones conservadas
D / ADCada día de negociación observado.
W · M · CQ · CSA · CYÚltimo día de negociación de cada semana ISO / mes calendario / trimestre / semestre / año.
AM · AQ · ASA · AYAncladas: avanzando en pasos desde su startDate (un inicio el 16 de junio produce 16 jun, 16 jul, …), tomando la última observación en cada fecha ancla o antes de ella.

Ajuste de precios

ValorSignificado
SPLITAjustado por splits (predeterminado; coincide con los cierres de plaza almacenados). Solo listados de EE. UU. — MX/BR/PE guardan la cadena ajustada por separado y devuelven un error de fila indicando DIV_SPIN_SPLITS.
DIV_SPIN_SPLITSAjustado por dividendos, escisiones (spinoffs) y splits.
UNSPLIT · SPLIT_SPINOFFEn preparación — requieren el historial de factores de ajuste.

Moneda

currency tiene como valor predeterminado LOCAL: los valores se devuelven en su moneda nativa de cotización o de reporte, indicada en cada fila — un libro brasileño nunca recibe USD de forma silenciosa. Cualquier código ISO (USD, BRL, MXN, EUR, …) se convierte del lado del servidor; consulte conversión de divisas para saber qué tipo de cambio aplica en cada caso.

Resolución de valores

POST/api/analytics/v1/resolve

La capa de identidad que sostiene todas las demás llamadas. Envíe hasta 2,000 identificadores de tipos mixtos y reciba entidades canónicas con estructura empresa-versus-listado. Las filas que comparten un entityId son clases de acciones / listados del mismo emisor, enumerados bajo listings.

json
// POST /api/analytics/v1/resolve
{ "identifiers": [ {"value": "PETR4-BR"}, {"value": "US0378331005"}, {"value": "037833100", "type": "CUSIP"} ] }

// 200 — una fila por candidato
{ "data": [
    { "requestId": "PETR4-BR", "entityId": "BR-9512", "ticker": "PETR4",
      "market": "BR", "matchedBy": "ticker", "candidateCount": 1,
      "listings": [ {"ticker": "PETR3", "market": "BR"}, {"ticker": "PETR4", "market": "BR"} ] } ] }

Catálogo de métricas

GET/api/analytics/v1/catalog/metrics

El registro autoritativo de todas las métricas que los motores pueden calcular — el mismo registro contra el que se ejecutan el screener de la plataforma, los paneles cuantitativos y el banco de fórmulas, incluidas las métricas de fórmula personalizadas de su organización. Si su autocompletado se alimenta de aquí, una solicitud nunca podrá nombrar una métrica que los motores no conozcan.

FiltroSignificado
datasetfinancials_standardized · prices · valuation · derived · returns · entity_attributes · …
searchBusca coincidencias en código, nombre y alias (?search=revenue).
valueTypecurrency · percent · ratio · price · shares · text · …
entityTypecompany · etf · fund · bond · manager
includeDeprecatedLas métricas descontinuadas llevan un replacementMetricCode.
kindline (una partida del estado, reportada o estandarizada) · amount (un monto calculado) · ratio · market · attribute · holdings.
industryProfileindustrial · bank · insurance · reit · fund: solo las métricas que existen para ese tipo de emisor. Cartera / Captación es una métrica bancaria; la razón circulante no lo es.
marketUS · MX · BR · PE · CL: las métricas multimercado más las presentadas en ese mercado (partidas como se reportaron, tenencias institucionales, préstamo de valores).
limit / offsetPaginación; meta.pagination.total es el conteo filtrado.

Cada fila indica además su lugar en la taxonomía de métricas: folderPath (partidas bajo Estados financieros, indicadores bajo Razones e indicadores, una carpeta por familia de razones, partidas como se reportaron por regulador), kind, basis (standardized · as_reported · derived · observed), statement, market, industryProfiles (vacío significa todo tipo de emisor) y canonicalDataset, presente en la copia de un código que pertenece a otro conjunto de datos. Los nombres llevan alias en español y portugués: ?search=deuda%20neta encuentra NET_DEBT.

Cada fila declara su dataset, motor, tipo de valor, unidad, tipos de entidad admitidos, tipos de tiempo (a fecha de corte / serie de tiempo), modos de período y estatus.

Precios globales

POST/api/content/global-prices/v1/prices

OHLCV de fin de jornada en todos los mercados cubiertos, con contención de listados cruzados incorporada: una línea de São Paulo que comparte ticker con una emisión estadounidense nunca puede empalmarse en la serie de EE. UU. Las observaciones duplicadas se deduplican a una fila canónica por día de negociación.

json
// POST /api/content/global-prices/v1/prices
{ "ids": ["BBAS3-BR"], "startDate": "2026-01-01", "endDate": "2026-07-30",
  "frequency": "M", "fields": ["price", "volume"] }

// 200 — observaciones de fin de mes, moneda nativa indicada en cada fila
{ "data": [
    { "requestId": "BBAS3-BR", "entityId": "BR-1023", "date": "2026-06-30",
      "currency": "BRL", "price": 19.91, "volume": 31200400 }, … ] }

Estados financieros

POST/api/content/fundamentals/v1/fundamentals

Datos fiscales estandarizados con la inteligencia de períodos de la plataforma. El servidor es el dueño de la semántica de períodos — almacenamiento acumulado del año, inferencia del cierre de año fiscal, derivación del Q4, ventanas LTM — para que ninguna fórmula tenga que serlo.

json
// POST /api/content/fundamentals/v1/fundamentals
{ "ids": ["AAPL-US"], "metrics": ["REVENUE"], "periodicity": "LTM",
  "fiscalPeriod": { "start": "2025-01-01", "end": "2026-07-30" } }

// 200 — ingresos móviles de los últimos doce meses al cierre de cada trimestre fiscal
{ "data": [
    { "requestId": "AAPL-US", "metric": "REVENUE", "periodicity": "LTM",
      "fiscalYear": 2026, "fiscalPeriod": "Q2", "fiscalEndDate": "2026-03-28",
      "currency": "USD", "value": 451442000000 }, … ] }

Taxonomías de estados, estados completos y períodos fiscales

Tres complementos de descubrimiento y consulta del endpoint de fundamentales:

EndpointDevuelve
GET /taxonomies?market=BR&template=banksEl plan de cuentas que efectivamente reportan ese mercado y formato — market: US·BR·MX·PE, template: industrials·banks·insurance, statement opcional. Cada fila trae código de cuenta, etiqueta, estado y cuántas empresas la reportan — para conocer las cuentas disponibles antes de consultar datos. Un balance de Bancos BR (activos interbancarios, cartera de créditos…) no es el de bancos de EE. UU.
POST /statementsEl estado financiero completo (IS, BS, CF o FULL) de cada id en una sola llamada, al período implicado por asOf — mode: "annual" (último ejercicio fiscal, predeterminado) o "latest" (último período presentado, valores tal como se reportaron). La conversión de moneda respeta el estado: balance al tipo de cambio de cierre del período, flujos al promedio del período.
POST /segmentsDesglose de ingresos por segmento de negocio, producto y geografía para emisores de EE. UU. (a partir de archivos estructurados): los nombres de segmento del propio emisor, valores tal como se reportaron, eliminaciones excluidas. dimension: business·product·geographic; cualquier métrica del catálogo.
POST /periodsLos períodos fiscales reportados por cada empresa (año, período, fechas, cantidad de cuentas) — cobertura antes de consultar.
json
// POST /api/content/fundamentals/v1/statements — una llamada, el estado completo
{ "ids": ["BBAS3-BR"], "statement": "FULL", "asOf": "2026-07-30", "currency": "USD" }

Ratios

POST /ratios — el catálogo de ratios como serie: una pestaña completa (group), o ratios nombrados de cualquier pestaña, con todas las partidas de flujo leídas en una misma base de período. Es la ventana de Ratios de la aplicación web servida por API — la misma llamada al motor, así que una cifra aquí y una cifra allí no pueden discrepar. La matriz sigue sirviendo cualquier ratio a una sola fecha de referencia; este endpoint es para la historia.

json
// POST /api/content/fundamentals/v1/ratios
{ "ids": ["AAPL-US", "BIMBOA-MX"], "ratios": ["GROSS_MARGIN", "ROE", "PB"],
  "periodBasis": "ltm", "scale": "quarterly" }

// 200 — una fila por (id, ratio, período); un ratio de flujo lleva la base con la que se leyó
{ "data": [
    { "requestId": "AAPL-US", "ratio": "GROSS_MARGIN", "group": "profitability",
      "period": "FY2026 Q3", "periodEnd": "2026-06-27", "value": 0.4865,
      "valueType": "percent", "periodBasis": "ltm", "scale": "quarterly" },
    { "requestId": "AAPL-US", "ratio": "PB", "group": "valuation",
      "period": "2026-08-31", "periodEnd": "2026-08-31", "value": 43.05,
      "valueType": "multiple", "periodBasis": null, "scale": "monthly",
      "scaleClampReason": "tab_grid" }, … ],
  "errors": [] }
ParámetroSignificado
groupvaluation · profitability · returns · leverage · liquidity · efficiency · cash_flow · per_share · growth. Omítalo cuando ratios nombra los códigos: la pestaña de un ratio es una propiedad del ratio, y una solicitud que mezcla pestañas se responde pestaña por pestaña.
periodBasisltm (predeterminado) · ytd · 3m · fy — cómo se lee cada partida de flujo (ingresos, EBITDA, flujo de caja). Los ratios de balance son de punto en el tiempo y no se mueven con ella; sus filas llevan periodBasis: null para que el lector sepa por qué la fila no cambió.
scalequarterly (predeterminado) · annual para las pestañas fundamentales; daily · weekly · monthly para valuación, cuyo numerador se mueve cada día de negociación y no tiene período fiscal. Crecimiento es solo anual. La escala se ajusta a lo que la pestaña y el emisor pueden cumplir, y cada fila lo declara en scaleClampReason: tab_grid, o issuer_reports_annually para los emisores que no presentan estados intermedios.
asOf, startFecha de referencia (predeterminado hoy) y hasta dónde retroceder; sin start el alcance es el propio de la escala — diez años de trimestres, quince de años fiscales, dos de días.
currencyConvierte solo las filas de magnitud monetaria (deuda total, capitalización, importes por acción); un ratio nunca se convierte.

Point-in-time

POST /point-in-time — fundamentales tal como se conocían en una fecha, para backtesting sin sesgo de anticipación (emisores de EE. UU.). Dos garantías: un período fiscal es invisible hasta la fecha de publicación de su presentación (el trimestre de diciembre de Apple no existe antes del 30 de enero), y si una cifra se reexpresa después, se sirve el valor vigente en pitDate — las filas traen firstPublished, lastPublished (enmiendas) y valueVintage (as_known cuando aplica una vigencia capturada; la captura de reexpresiones acumula desde el 2026-08-02). pitDataItems=true en el catálogo lista las métricas con capacidad PIT. FY y QTR; componga LTM del lado cliente con trimestres PIT.

Matriz

POST/api/analytics/v1/matrix

Muchos valores × muchas métricas a una sola fecha de corte, en una sola solicitud — la primitiva de la grilla de comparables. Las métricas pueden mezclar datasets libremente: precios, estados financieros, múltiplos de valuación, medidas derivadas y atributos de texto regresan todos por el mismo sobre.

json
// POST /api/analytics/v1/matrix
{ "ids": ["AAPL-US", "BBAS3-BR", "BIMBOA-MX"],
  "metrics": ["close", "MARKET_CAP", "PE_LTM", "SECTOR"],
  "asOf": "2026-07-30", "currency": "USD" }

// 200 — una celda por (id, métrica); as-of = última observación en la fecha o antes
{ "data": [
    { "requestId": "AAPL-US",   "metric": "MARKET_CAP", "dataset": "derived",
      "valueType": "currency", "value": 4925847973597 },
    { "requestId": "BBAS3-BR",  "metric": "close",  "dataset": "prices", "value": 4.11 },
    { "requestId": "BIMBOA-MX", "metric": "SECTOR", "dataset": "entity_attributes",
      "valueType": "text", "value": "Food & Beverage" } ] }

Screener

POST/api/content/screener/v1/search

Ejecute filtros (screens) sobre el mismo motor que el screener de la plataforma — condiciones sobre métricas financieras, métricas de precio, múltiplos de valuación y las métricas de fórmula personalizadas de su organización, con filtros de sector, bolsa, país y universo. Endpoints complementarios: POST /count devuelve el conteo de coincidencias sin materializar filas (conéctelo a un indicador en vivo de «N empresas coinciden»), y GET /fields lista todos los campos filtrables.

json
// POST /api/content/screener/v1/search
{ "conditions": [ { "metric": "MARKET_CAP", "operator": "gt", "value": 100000000000 },
                  { "metric": "ROE", "operator": "gte", "value": 0.15 } ],
  "metrics": ["REVENUE", "PE"], "sortBy": "MARKET_CAP", "currency": "USD", "limit": 50 }

// 200 — una fila por valor coincidente; meta.pagination.total = conteo total de coincidencias
{ "data": [
    { "ticker": "AAPL", "entityId": "0000320193", "sector": "Technology",
      "nativeCurrency": "USD", "marketCap": 4925847973597,
      "metrics": { "REVENUE": 451442000000, "PE": 43.9 } }, … ] }

Screening a fecha pasada

POST /api/content/screener/v1/point-in-time — ejecuta un screening tal como se habría ejecutado en una fecha pasada. El screener normal es de tiempo presente: correrlo con umbrales antiguos indica cuáles de los supervivientes de hoy pasarían hoy.

Tres propiedades, cada una una forma distinta de equivocarse en silencio. Un periodo fiscal no existe hasta que se publica la presentación que lo contiene, así que un screening de 2019 no puede ver cifras presentadas en 2020. El universo es quien cotizaba en esa fecha, tomado de los propios precios, de modo que las empresas que después salieron a bolsa figuran en él. Y una métrica que no puede resolverse a esa fecha se devuelve como error de fila, nunca como el valor actual con fecha antigua.
Las métricas que dependen del precio se rechazan. MARKET_CAP, PE, PB, PS y EV devuelven un error de fila en lugar de un número. Formar una capitalización histórica exige que precio y número de acciones estén en la misma base de splits, y el histórico de precios no lo está: una parte es tal como se negoció y otra está ajustada a una fecha de actualización que varía por ticker. El resultado sería correcto para unos emisores y erróneo por el factor del split para otros, sin nada en la respuesta que lo indique.

Fondos

POST/api/content/funds/v1/…

Datos de fondos de mercado local en Brasil (más de 65,000 fondos registrados), México y Perú, con las convenciones de identificadores que cada mercado realmente utiliza: los fondos BR se resuelven por CNPJ en cualquier formato (00.000.684/0001-21 o 00000684000121), los fondos MX y PE por ticker o id de entidad. Cuatro endpoints comparten un mismo contrato:

EndpointDevuelve
POST /summaryAtributos de registro: nombre, clasificación, operador/administrador, benchmark, estatus, moneda nativa.
POST /pricesSeries de NAV (fields: ["nav", "netAssets"]) con el vocabulario completo de frecuencia.
POST /returnsRendimientos periódicos calculados a partir del NAV a la frecuencia muestreada. Los NAV de los fondos son de tipo acumulación, por lo que se trata de rendimientos totales.
POST /flowsAportes / rescates / flujo neto diarios — solo BR, donde el mercado reporta a diario; los demás mercados devuelven un error de fila, nunca silencio.
POST /holdingsCartera de los fondos BR/MX/PE y de los ETFs de EE. UU. al último reporte en o antes de asOf: nombre, identificadores, clase de activo, cantidad, valor de mercado, peso. top limita las filas (50 por defecto).

Tenencias institucionales viven en /api/content/ownership/v1: POST /holders devuelve quién posee un valor (por gestor: gana la última presentación del trimestre objetivo — las enmiendas prevalecen), y POST /manager-holdings devuelve la cartera de un gestor por CIK. El universo completo de gestores declarantes (~9.000) está cubierto para cada trimestre ya vencido; como estas divulgaciones vencen 45 días después del cierre del trimestre, las listas de tenedores apuntan por defecto al último trimestre completamente vencido — pase includePartial: true durante una ventana de presentación para ver el trimestre en curso. Los valores están en USD; los pesos son porcentaje del valor reportado.

json
// POST /api/content/funds/v1/prices
{ "ids": ["00000684000121", "+TASAD1F1"], "fields": ["nav", "netAssets"],
  "startDate": "2026-01-01", "endDate": "2026-07-30", "frequency": "M", "currency": "USD" }

Datos de referencia

Identidad histórica y el registro documental que la respalda. Ambos responden a la misma pregunta: qué significaba este identificador entonces — la clave de cruce que necesita cualquier conjunto de datos histórico ajeno a nuestro universo.

Historial de identificadores

POST /api/content/reference/v1/identifier-history — cada ticker, ISIN, CUSIP, CIK, mercado y MIC que ha llevado un valor, con sus intervalos de vigencia, desde 1926. Cada fila incluye el código del evento corporativo que provocó el cambio, de modo que un cambio de nombre se distingue de una fusión.

Por qué importa. Un blotter de 2019 hace referencia a símbolos que hoy pertenecen a otras empresas. Cruzarlo contra los identificadores actuales falla en silencio: nada da error, simplemente el backtest queda mal. asOf devuelve los intervalos vigentes en esa fecha.
json
// POST /api/content/reference/v1/identifier-history
{ "ids": [ "AAPL" ], "asOf": "2019-06-28" }

Índice de documentos regulatorios

POST /api/content/reference/v1/filings — 2,2 millones de presentaciones ante la regulatorios de EE. UU. de 20.205 emisores desde 1993: tipo de formulario, fecha, cierre de periodo, número de accession, tipo de enmienda y URL del documento. El reloj de eventos para estrategias basadas en anuncios, y la trazabilidad de cada dato fundamental que servimos.

formTypes compara por prefijo: 10-K incluye 10-K/A. Una enmienda es el mismo evento representado, y suele ser justamente la reexpresión que se busca.

Factores de ajuste de derechos corporativos

/corporate-actions ahora devuelve priceFactor, shareFactor, cashComponent, affectsSplitAdjusted, affectsTotalReturn y factorStatus junto a los términos del evento, para que pueda reconstruir su propia serie ajustada y conciliarla con la nuestra.

Los términos no determinan el factor. El split de NVIDIA de 2024 está registrado como emisión liberada con ratioOld: 1 y ratioNew: 9, y el factor de precio es 0,1 — un 10 por 1. Derivar el multiplicador del ratio daría 9×. Cuando un factor no pudo calcularse, los campos son nulos y factorStatus indica el motivo, en lugar de omitir la fila.

Calendarios bursátiles

POST /api/content/reference/v1/calendar — las sesiones que cada mercado opera realmente, para EE. UU., BR, MX y PE, desde los años noventa hasta 2029. Los días no hábiles llevan el motivo; use includeNonTrading para obtener el calendario completo.

Por qué esto no es un filtro de días de semana. El Jueves Santo cierra México y Perú, y no EE. UU. ni Brasil. En 2006 el Día de la Constitución y el natalicio de Benito Juárez se trasladaron a lunes determinados. Brasil cerró por los feriados de la ciudad y el estado de São Paulo hasta 2021 y desde entonces opera en ellos, y cierra el último día hábil del año en lugar del 31. Cada uno de esos casos es una respuesta incorrecta que una semana de cinco días produce en silencio.

Aritmética en días de negociación

POST /api/content/reference/v1/calendar/offset — desplace N días de negociación desde una fecha ancla. La liquidación T+2, la programación de rebalanceos y las ventanas de eventos son la misma pregunta, y todas resultan erróneas si se responden en días naturales.

Operaciones de insiders

POST /api/content/ownership/v1/insider-transactions — 1,75 millones de registros del Formulario 4 desde 2004, con la relación del declarante con el emisor (consejero, directivo, titular del 10%) incorporada.

Dos distinciones que las presentaciones no hacen por sí solas y que, de lo contrario, habría que reconstruir:

Renta fija

POST /api/content/fixed-income/v1/search · /reference · /prices — papel mexicano, corporativos peruanos y debentures brasileñas. 2,2 M de observaciones de precio; un universo de bonos se descubre, no se conoce por ticker, así que conviene empezar por search.

Los tres mercados no cotizan las mismas magnitudes. México y Perú publican un rendimiento al vencimiento. Brasil no: una debenture opera contra la tasa DI, de modo que indexBasis dice "DI + 1,6%" y spreadOverIndex lleva el spread indicativo sobre ella. yieldToMaturity es null en una fila brasileña, porque un 0,74 junto al 6,52 mexicano afirmaría que el crédito brasileño rinde una séptima parte del mexicano, en vez de DI más 0,74.

Comisiones de fondos

POST /api/content/funds/v1/fees — ratios de gastos, comisiones de gestión y de éxito, cargas y rotación. Clases estadounidenses a partir de la información del prospecto (7,58 M de hechos sobre 64.931 clases), fondos brasileños a partir de sus propias divulgaciones regulatorias.

Todo va en porcentaje, y cada fila lo declara. Las divulgaciones estadounidenses reportan fracciones (0,0003 para VTI) y las brasileñas reportan porcentaje (2,5). Servidos tal como se almacenan quedarían a un factor de cuatrocientos de distancia mientras se leen como ochenta.

Cambios de propiedad

POST /api/content/ownership/v1/changes — qué hicieron las instituciones en un valor entre dos trimestres: quién entró, amplió, recortó o salió, ordenado por lo que efectivamente se movió.

Un gestor que no ha presentado no es un vendedor. Estas divulgaciones vencen 45 días después del cierre del trimestre, así que dentro de una ventana de presentación la mayoría de los gestores simplemente no aparece en el trimestre más reciente, y una diferencia ingenua lee a cada uno de ellos como una salida total. Ambos periodos van por defecto a trimestres ya vencidos, y una ausencia se marca EXITED solo cuando el gestor sí presentó ese trimestre; quien no presentó nada es NOT_FILED.

Investigación

La superficie de investigación académica: paneles punto-en-el-tiempo sobre universos históricos seguros frente al sesgo de supervivencia, fijados por Research Snapshots citables. Cada respuesta de dataset antepone sus diagnósticos — cobertura del universo, hechos retenidos por PIT, métricas vacías — porque un panel luce igual de completo al 6% que al 96% de cobertura sin ellos. Los métodos están documentados en los doce capítulos de metodología del paquete académico.

Acceso. La misma autenticación que todos los endpoints (clave API o sesión). Mientras la sección Academia esté en fase de prueba, los endpoints de investigación requieren además el rol de investigación en su cuenta.

Descargas — el paquete académico

Autoalojado y versionado con la plataforma: la rueda (wheel) del SDK edifinance, los cuadernos de enseñanza en tres idiomas (inglés, español, portugués — libros de Excel de muestra incluidos), y los doce capítulos de metodología. El SDK no está en PyPI mientras Academia esté en fase de prueba — instálalo directo desde aquí (funciona también en Colab).

bash
# el SDK no está en PyPI todavía — instálalo desde la plataforma
pip install https://api.edi.finance/static/academic/edifinance-0.1.1-py3-none-any.whl

Universos históricos

GET/api/research/universes

Definiciones de universo con conteo de snapshots. Resolver una a una fecha produce una membresía inmutable: el estado se guarda a esa fecha (un valor deslistado en 2022 es active en un snapshot de 2019), y los miembros sin precios se marcan price_coverage: none, nunca se eliminan — eliminarlos es el sesgo de supervivencia que este motor existe para prevenir.

bash
# membresía a una fecha, en forma de tabla
curl -s "https://api.edi.finance/api/research/excel/universe?code=BR_ALL_EQUITY&as_of=2022-12-31" \
  -H "X-API-Key: $EDI_KEY"

Constructor de datasets — paneles PIT

POST/api/research/dataset-build

Construye un panel desde una definición nombrada (créela vía POST /api/research/dataset-definitions) y devuelve una vista previa acotada más diagnósticos del panel completo. En modo PIT, un hecho cuya disponibilidad no puede probarse se retiene y se cuenta — nunca se sirve por conjetura. La cobertura PIT es honesta por mercado: EE. UU. y Brasil con soporte completo; México parcial; Perú sin soporte.

python
# instalación del SDK: ver Descargas arriba (aún no en PyPI)
from edifinance import ResearchClient

rc = ResearchClient(api_key="…")
df = rc.panel(universe="BR_ALL_EQUITY", metrics=["REVENUE", "NET_INCOME"],
              start="2019-12-31", end="2023-12-31", point_in_time=True)
df.attrs["diagnostics"]  # cobertura, hechos retenidos, código de snapshot

Research Snapshots

GET/api/research/research-snapshots

Un snapshot (EDI-RS-<año>-<token>) fija todo lo necesario para recrear un análisis: fecha de conocimiento, el snapshot de universo congelado, hashes de contenido de los registros de métricas y factores, políticas de moneda y ajuste, el payload de la solicitud y un hash del dataset independiente del orden. Los snapshots publicados son inmutables por trigger de base de datos — una cita resuelve para siempre. Procedencia de un código: GET /api/research/excel/snapshot/{code} (también =EDI.SNAPSHOT(code) en Excel).

Estudios de eventos

POST/api/research/event-study

Ejecuta un estudio ya sembrado: retornos anormales por modelo de mercado o ajustados por mercado, AAR/CAAR con prueba t transversal, ventanas en días de negociación, fechas de evento mapeadas a la siguiente sesión (los eventos de presentación en EE. UU. usan la marca de tiempo de aceptación regulatoria — dos tercios llegan tras el cierre y pertenecen a la sesión siguiente). Los eventos descartados se cuentan por motivo. La validación permanente del motor es una prueba placebo: fechas aleatorias no deben encontrar nada.

bash
curl -s -X POST https://api.edi.finance/api/research/event-study \
  -H "X-API-Key: $EDI_KEY" -H "Content-Type: application/json" \
  -d '{"definition_name": "us_earnings_announcements"}'

Ejecución por lotes

Todos los endpoints de datos aceptan "batch": "Y" con el cuerpo de solicitud idéntico — cambie una sola bandera cuando un libro crezca más allá de los límites síncronos. La rama por lotes ejecuta la misma ruta de código que la síncrona, por lo que los resultados son idénticos por construcción.

PasoLlamadaRespuesta
1. EnviarPOST a cualquier endpoint de datos con "batch":"Y"202 + encabezado Location; el cuerpo incluye el id del trabajo
2. ConsultarGET /api/analytics/v1/batch-status?id=…202 mientras corre · 201 al terminar (+Location) · 200 con status:"error" en caso de falla
3. RecuperarGET /api/analytics/v1/batch-result?id=…200 con el sobre estándar

Los trabajos pertenecen a la cuenta que los envía y expiran a las 24 horas. Los trabajos fallidos entregan un sobre EXECUTION_ERROR por el mismo contrato.

Exportación masiva

La ejecución por lotes escala un libro de Excel. La exportación masiva resuelve el problema contrario: cargar un conjunto de datos en su propio almacén y mantenerlo al día. Un trabajo, un archivo comprimido y un cursor exacto desde el que continuar.

PasoLlamadaRespuesta
0. DescubrirGET /api/content/bulk/v1/datasetsConjuntos exportables, su proyección exacta de columnas y si admiten carga incremental
1. EnviarPOST /api/content/bulk/v1/export202 + Location; el cuerpo lleva el id
2. ConsultarGET /api/content/bulk/v1/status?id=…status, rowCount, byteCount, nextChangedSince
3. DescargarGET /api/content/bulk/v1/download?id=…El archivo — CSV comprimido o NDJSON
bash
# Carga inicial: todo el histórico de precios en un archivo
curl -b cookies.txt -X POST https://api.edi.finance/api/content/bulk/v1/export \
  -H "Content-Type: application/json" -d '{"dataset": "prices_eod"}'

# Cada noche: solo lo escrito desde la última descarga
curl -b cookies.txt -X POST https://api.edi.finance/api/content/bulk/v1/export \
  -H "Content-Type: application/json" \
  -d '{"dataset": "prices_eod", "changedSince": "2026-08-21T23:16:18.915379Z"}'
nextChangedSince es el contrato. Un trabajo completado informa la marca de escritura más alta que realmente incluyó. Reenvíela tal cual y la siguiente descarga continúa exactamente donde terminó la anterior: nada escrito durante la ejecución se pierde ni se repite. Usar su propio reloj, o now, pierde filas en silencio.

Estado de los conjuntos de datos

GET /api/analytics/v1/datasets — por conjunto: ventana de cobertura, última carga, recuentos de filas y entidades, qué endpoints lo sirven y un veredicto de frescura.

Conversión de divisas

La conversión se realiza del lado del servidor y es sensible a la semántica — a cada valor se le aplica el tipo de cambio correcto:

Tipo de valorTipo de cambio aplicado
Observaciones de precioTipo de cambio spot en la fecha de cada observación.
Partidas de flujo (estado de resultados / flujo de efectivo)Tipo de cambio promedio del período sobre la ventana fiscal.
Partidas de saldo (balance general)Tipo de cambio spot al cierre del período fiscal.
Celdas de matriz (tipo divisa/precio)Tipo de cambio spot a la fecha de corte (as-of).
Volumen, razones, porcentajes, textoNunca se convierten.

Los tipos de cambio cruzados se componen a través del USD. Una conversión que no puede cotizarse — moneda de origen desconocida, par no admitido, sin tipo de cambio dentro de la ventana de vigencia — es un error de fila FX_UNAVAILABLE y las filas afectadas se descartan: usted nunca recibe de forma silenciosa valores nativos sin convertir.

CSV en todas partes. Envíe Accept: text/csv a cualquier endpoint de datos y las filas planas del sobre vuelven como archivo CSV — los mapas anidados se aplanan a columnas con punto, los errores por fila acompañan como líneas de comentario # y registryVersion queda estampado al final. El camino más rápido de cualquier endpoint a una hoja de cálculo o dataframe.

Índice completo de endpoints

Every operation the service routes, 113 of them, generated from the route table itself. The sections above describe the ones most clients start with; everything here is live and callable.

MethodPathSummary
analytics
GET/api/analytics/v1/batch-resultDownload a finished batch job's envelope.
GET/api/analytics/v1/batch-statusStatus codes: 202 while pending/running, 201 when the result exists (Location points at /batch-result), 200 with status=error.
GET/api/analytics/v1/catalog/equity-presetsCanonical equity presets; metric instances resolve through the catalog.
GET/api/analytics/v1/catalog/fund-presetsCanonical Fund Quant presets resolved against market source capability.
GET/api/analytics/v1/catalog/metricsThe unified metric catalog: every metric this API can serve, with its category, datasets, entity types and value type, plus its place in the Research Library taxonomy (folderPath, kind, basi
GET/api/analytics/v1/datasetsCoverage and freshness per dataset: how far it reaches, when it last moved.
GET/api/analytics/v1/healthLiveness plus a per-store check -- database, facts, prices, FX, batch workers -- so a degraded dependency is visible before it is inferred from empty responses.
POST/api/analytics/v1/inspectCell-level provenance for one (id, metric) pair: what the identifier resolved to, which dataset served the value, and which engine owns it.
GET/api/analytics/v1/keysThe caller's API keys and their status.
POST/api/analytics/v1/keysIssue an API key.
DELETE/api/analytics/v1/keys/{key_id}Revoke one API key immediately.
GET/api/analytics/v1/keys/{key_id}/usageDaily usage rollups for one of the caller's keys (session-only).
POST/api/analytics/v1/matrixCross-domain retrieval: any set of ids against any set of metrics, each cell routed to the dataset that owns it.
POST/api/analytics/v1/resolveResolve tickers, ISINs, CUSIPs, CIKs or entity ids to the platform's canonical security, with the candidates when one is ambiguous.
POST/api/research/dataset-buildRun a build and return a PREVIEW plus the full diagnostics.
GET/api/research/dataset-definitionsNamed, reusable panel definitions: universe, metrics, window, frequency, PIT mode, currency.
POST/api/research/dataset-definitionsCreate a named panel definition.
POST/api/research/dataset-exportDownload a full panel as CSV or XLSX (§67).
GET/api/research/dataset-runsRecent builds with row counts, dataset hashes, full diagnostics, and any minted snapshot codes.
GET/api/research/event-studiesSeeded event-study definitions: model, benchmark, windows, and event counts.
POST/api/research/event-studyThin transport over the event-study engine (§82 names this route; the engine predates it).
POST/api/research/excel/panelThe =EDI.DATASET() backend: derive-or-reuse a definition (the SDK's exact naming scheme, "xl_" prefixed so Excel-born definitions are recognisable), build, and answer as a grid.
GET/api/research/excel/snapshot/{snapshot_code}The =EDI.SNAPSHOT() backend -- the provenance inspector (§36) as a key/value grid: what a citation code pins, and whether it is reproducible, as EVIDENCE fields rather than a bare claim.
GET/api/research/excel/universeThe =EDI.UNIVERSE() backend.
GET/api/research/metricsMetrics that actually have facts, with their coverage.
GET/api/research/research-snapshotsResearch Snapshots: citation code, status, knowledge date, universe, registry hashes, and dataset hash.
POST/api/research/snapshots/{snapshot_code}/replayOne-call snapshot replay (§27): re-run the build a citation pins and return the comparison as evidence.
GET/api/research/universesUniverse definitions with markets, benchmark linkage, and snapshot counts.
bulk
GET/api/content/bulk/v1/datasetsWhich datasets can be exported, with their column projection.
GET/api/content/bulk/v1/downloadStream the finished export file.
POST/api/content/bulk/v1/exportQueue a whole-dataset export; poll status, then download one file.
GET/api/content/bulk/v1/statusProgress of one export, or every export this account has queued.
fixed-income
POST/api/content/fixed-income/v1/pricesDaily bond observations: price, yield, duration, spread.
POST/api/content/fixed-income/v1/referenceTerms for specific bonds: coupon, maturity, par, amount issued, ratings.
POST/api/content/fixed-income/v1/searchFind bonds across MX, PE, BR and CL by issuer, currency, maturity or ISIN.
formula
GET/api/content/formula/v1/catalog/metricsMetrics a formula may reference, with their argument shapes.
GET/api/content/formula/v1/definitionsFormulas visible to the caller: their own, plus anything shared with them.
GET/api/content/formula/v1/definitions/{formula_id}One formula's current definition.
GET/api/content/formula/v1/definitions/{formula_id}/versionsEvery saved version of a formula, newest first.
POST/api/content/formula/v1/executeEvaluate a formula for a set of securities and dates.
POST/api/content/formula/v1/validateParse and type-check an expression without running it.
fundamentals
POST/api/content/fundamentals/v1/fundamentalsStandardized fundamentals on one fiscal basis: FY, QTR, LTM or YTD.
POST/api/content/fundamentals/v1/periodsWhich fiscal periods exist for a security, and their end dates -- the calendar to ask fundamentals questions against.
POST/api/content/fundamentals/v1/point-in-timeFundamentals as they stood on a past date, resolved through the publication ladder so a restatement cannot leak backwards.
POST/api/content/fundamentals/v1/ratiosFinancial ratios as a series: one tab of the ratio catalog, or named ratios, at one period basis (LTM, YTD, 3M, FY) on the fiscal or price grid.
GET/api/content/fundamentals/v1/ratios/fieldsEvery ratio the ratios endpoint serves: tab, formula, value type, grid scales and the issuer types it exists for.
POST/api/content/fundamentals/v1/segmentsReported business and geographic segments.
POST/api/content/fundamentals/v1/statementsFull financial statements as a hierarchy of line items, standardized or as reported.
GET/api/content/fundamentals/v1/taxonomiesStatement taxonomies available per market, and the line items in each.
funds
POST/api/content/funds/v1/aumAssets under management history.
POST/api/content/funds/v1/feesWhat a fund costs to hold: expense ratios, fees and loads.
POST/api/content/funds/v1/flowsNet subscriptions and redemptions per period.
POST/api/content/funds/v1/holdingsDisclosed portfolio holdings for a fund at a reporting date.
POST/api/content/funds/v1/portfolio/analyticsRisk and exposure analytics computed over a fund's disclosed holdings.
POST/api/content/funds/v1/pricesFund NAV and market price history.
POST/api/content/funds/v1/rankingsPeer rankings within a fund category over a chosen window.
POST/api/content/funds/v1/registryBulk share-class registry for a market, including point-in-time returns.
POST/api/content/funds/v1/returnsFund returns as reported and as computed from NAV.
POST/api/content/funds/v1/summaryIdentity and headline facts for a fund or share class.
fx
POST/api/content/fx/v1/averageThe average FX rate over a period -- the right basis for translating a flow, where a spot rate is right for a balance.
POST/api/content/fx/v1/historyAn FX pair over time.
POST/api/content/fx/v1/rateA spot FX rate on a date.
POST/api/content/fx/v1/translateTranslate an amount between currencies at a stated date and basis, so the rate used is on the response rather than assumed.
global-prices
POST/api/content/global-prices/v1/corporate-actionsSplits, dividends and other corporate actions with the price and share factors derived from them.
POST/api/content/global-prices/v1/pricesEnd-of-day prices across all covered markets.
POST/api/content/global-prices/v1/returnsPeriod returns over named windows, price or total return.
POST/api/content/global-prices/v1/returns-rangeReturns between two explicit dates.
POST/api/content/global-prices/v1/returns/snapshotStandard return windows for a set of securities in one row each: the performance strip, without a request per window.
indices
POST/api/content/indices/v1/changesAdditions and deletions between two constituent dates.
POST/api/content/indices/v1/constituentsIndex constituents and weights at a date.
POST/api/content/indices/v1/historyAn index level series over time.
POST/api/content/indices/v1/levelsIndex levels.
POST/api/content/indices/v1/membershipThe index memberships a security has held, with entry and exit dates.
POST/api/content/indices/v1/searchFind indices by name, market or provider.
POST/api/content/indices/v1/weightOne security's weight in an index over time.
lending
POST/api/content/lending/v1/historySecurities-lending history.
POST/api/content/lending/v1/summaryCurrent securities-lending state for a security: balance, rate and availability where the market publishes them.
macro
POST/api/content/macro/v1/historyA macro series over time.
POST/api/content/macro/v1/observationsThe latest observation of a macro series.
POST/api/content/macro/v1/searchFind macro series by name, country or source.
market-analytics
POST/api/content/market-analytics/v1/correlationA correlation matrix across securities over a window.
POST/api/content/market-analytics/v1/performancePerformance statistics against a benchmark, including the risk-free leg where a Sharpe ratio is asked for.
POST/api/content/market-analytics/v1/regressionRegress a security against factors or a benchmark.
POST/api/content/market-analytics/v1/riskRisk statistics over a return window: volatility, drawdown, VaR, beta.
ownership
POST/api/content/ownership/v1/changesWhat institutions did in a security between two quarters.
POST/api/content/ownership/v1/holdersInstitutional holders of a security from 13F, N-PORT and BR/MX/PE local-fund disclosures.
POST/api/content/ownership/v1/insider-transactionsInsider activity, classified so the transaction codes do not have to be.
POST/api/content/ownership/v1/manager-holdingsOne manager's disclosed book: every position they reported for a quarter.
POST/api/content/ownership/v1/shareholdersRegistered and beneficial shareholders as disclosed to the local regulator, for markets that publish them.
peers
POST/api/content/peers/v1/searchCanonical peer set for one security (peer_universe.build_peer_universe).
portfolio
POST/api/content/portfolio/v1/analyticsRisk, exposure and performance analytics for a supplied portfolio of weights or positions.
POST/api/content/portfolio/v1/optimizeOptimize weights under constraints, over the same risk math the Construction workstation uses.
POST/api/content/portfolio/v1/walk-forwardOptimize at each as-of date on what was knowable then, hold the weights out of sample to the next, and chain the held-out segments -- beside 1/N over each step's eligible names and the bench
rates
POST/api/content/rates/v1/curveA yield curve: every tenor at one date.
POST/api/content/rates/v1/historyAn interest rate over time.
POST/api/content/rates/v1/rateAn interest rate on a date.
POST/api/content/rates/v1/spreadThe spread between two tenors on one curve, or across two curves.
reference
POST/api/content/reference/v1/calendarTrading sessions per market.
POST/api/content/reference/v1/calendar/offsetMove N trading days from an anchor date.
POST/api/content/reference/v1/filingsThe regulatory filing index for a security: what was filed, and when.
POST/api/content/reference/v1/identifier-historyEvery identifier a security has carried, with validity intervals.
regime
POST/api/content/regime/v1/historyThe regime classification over time.
POST/api/content/regime/v1/snapshotWhich market regime is in force now, and on what evidence.
POST/api/content/regime/v1/statsHow an asset behaved conditional on regime.
screener
POST/api/content/screener/v1/countHow many securities match a screen, without returning them.
POST/api/content/screener/v1/distinct-countDistinct values of one field across a screen -- how many sectors, how many countries -- without pulling the rows.
GET/api/content/screener/v1/fieldsFields available to screen on, with their types and permitted operators.
POST/api/content/screener/v1/point-in-timeRun a screen as it would have run on a past date.
POST/api/content/screener/v1/searchScreen the universe on any catalog metric and return the matching securities with the requested columns.
POST/api/content/screener/v1/statisticsAggregate statistics over a screen: count, mean, median, percentiles.
sustainability
GET/api/content/sustainability/v1/fieldsAvailable fields with units, definitions and current issuer coverage.
POST/api/content/sustainability/v1/historyDisclosed history for one measure, one point per reported period.
POST/api/content/sustainability/v1/summaryLatest disclosed workforce or environmental measure for an issuer.

Taxonomía de errores

CódigoSignificadoEquivalencia en Excel
UNRESOLVED_IDENTIFIERSin coincidencia para el identificador (en el mercado solicitado, si se indicó), o sin datos en la ventana.#N/A
AMBIGUOUS_IDENTIFIERMúltiples candidatos; califique con un sufijo de mercado o use un entityId.#SPILL!
INVALID_IDENTIFIERIdentificador vacío o mal formado.#VALUE!
UNSUPPORTED_MARKETCódigo de mercado fuera de US · BR · MX · PE · CL · CO.#N/A
UNSUPPORTED_METRICMétrica desconocida, o una combinación métrica/período que este endpoint no atiende.#NAME?
FX_UNAVAILABLELa divisa solicitada no puede cotizarse para algunas filas.#N/A
EXECUTION_ERRORFalló un trabajo por lotes o un handler; detail lo explica.#VALUE!
429 + Retry-AfterLímite de tasa por clave excedido (1.200 solicitudes/minuto por defecto; overrides por clave al crearla, aprobación de admin por encima del valor por defecto). Respete Retry-After antes de reintentar.el complemento reintenta hasta cuatro veces por su cuenta; solo entonces EDI rate limit reached

Las fallas a nivel de solicitud usan los códigos HTTP estándar: 400 solicitud mal formada · 401 no autenticado · 404 id de lote desconocido o expirado.

Límites de solicitud

EndpointSíncronoPor lotes (batch:"Y")
/resolve2,000 identificadores—
/prices — un solo día1,000 ids2,000 ids
/prices — varios días100 ids1,000 ids
/fundamentals250 ids × 50 métricas5,000 ids × 50 métricas
/matrix500 ids × 50 métricas2,000 ids × 50 métricas
/screener/search1,000 filas por páginaigual, encolado

Clientes y Excel

Python. El cliente de referencia (edi_analytics.py) encapsula el inicio de sesión, el sobre de respuesta y el sondeo de lotes, e incluye los ayudantes de derrame (spill) que usa la integración con Excel — spill_scalar, spill_series, spill_fundamentals, spill_ratios, spill_matrix, spill_fibonacci — cada uno devuelve una grilla 2-D lista para un dataframe o un arreglo dinámico.

Excel. El complemento registra fórmulas sobre exactamente esta API. Comience con la guía de instalación para Excel, que cubre tanto la implementación por un administrador de Microsoft 365 como la instalación individual. También puede descargar directamente el manifiesto de producción o el libro de demostración.

¿Microsoft 365 administrado por su empresa? Pida al administrador que implemente el manifiesto mediante Aplicaciones integradas. Los usuarios recibirán la cinta EDI sin manipular manifiestos ni configurar carpetas de confianza.
excel
=EDI.VALUE("AAPL-US", "MARKET_CAP")                → un valor
=EDI.HISTORY("BBAS3-BR", "price", "2026-01-01", "2026-07-30", "M")   → derrama 7×2
=EDI.FUNDAMENTALS("AAPL-US", "REVENUE", "LTM")   → derrama períodos fiscales
=EDI.MATRIX(A2:A20, B1:F1)                          → derrama una grilla de comparables

Las entradas inválidas se degradan celda por celda (#N/A, #NAME?) — nunca una actualización fallida del libro. El complemento agrupa automáticamente las solicitudes de fórmulas a través de la ejecución por lotes.

Todo lo demás. El documento OpenAPI 3 permite generar clientes para otras tecnologías.

Pruébelo

Inicie sesión con su cuenta EDI y ejecute solicitudes en vivo contra la API — todos los ejemplos de esta página son ejecutables. Las solicitudes se ejecutan con sus permisos de acceso, exactamente como lo harían desde Excel o un script.

Capacidades en preparación

Estos ejes de solicitud forman parte del contrato pero se rechazan deliberadamente (HTTP 400, con un mensaje explicativo) hasta que su maquinaria de soporte esté lista — usted puede programar contra el vocabulario hoy sin riesgo de respuestas incorrectas silenciosas: