EDI Analytics API
Acesso programático aos mesmos motores que sustentam a plataforma EDI: resolução de valores mobiliários nos Estados Unidos, Brasil, México e Peru; cotações globais de fechamento; fundamentos padronizados com inteligência de períodos fiscais; matrizes as-of multidomínio; e execução assíncrona em lote. Uma requisição produz o mesmo número no Excel, em Python, no Quant Workstation e em um relatório agendado — a paridade é estrutural, não dependente de testes.
Início rápido
Autentique-se uma vez — o cookie de sessão carrega suas permissões de acesso em todas as chamadas subsequentes.
# 1. Faça login (armazena o cookie de sessão) 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. Resolva identificadores em ids canônicos de entidade 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. Uma grade de comparáveis multimercado em USD, em uma única chamada 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"}'
Ou com o cliente de referência em 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"])
Autenticação de serviço — chaves de API
Para scripts, SDKs e integrações servidor a servidor, crie uma chave de API (ela age em seu
nome, com as suas permissões) e envie-a como X-API-Key ou
Authorization: Bearer — sem cookies. As chaves são exibidas uma única vez na
criação, podem expirar e são revogáveis; o gerenciamento de chaves sempre exige uma sessão
autenticada, nunca uma chave.
# Crie uma chave (autenticado por sessão) e use-a onde quiser 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_…") —
dispense o login() por completo.
Conceitos fundamentais
O envelope
Todo endpoint de dados retorna o mesmo envelope de três partes. As linhas em data
são planas e autodescritivas — serializam de forma idêntica para JSON, CSV e intervalos de spill
do Excel.
{
"data": [ /* linhas planas de observação */ ],
"errors": [ /* falhas no nível da linha — nunca uma falha da requisição */ ],
"meta": { "pagination": { "total": 412 }, "registryVersion": "2026.07.16.1A" }
}Identificadores e o eco do requestId
Todo endpoint aceita diretamente identificadores de tipos mistos — tickers qualificados por
mercado (PETR4-BR, BIMBOA-MX), tickers simples, ISINs, CUSIPs, CIKs e
ids canônicos de entidade. Cada linha de resposta carrega tanto requestId (o seu
identificador, exatamente como enviado — a chave de junção de volta para a célula da sua planilha
ou o índice do seu dataframe) quanto entityId (a nossa chave canônica, estável
através de mudanças de ticker e classes de ações).
Falha parcial é a norma
Um ticker inválido jamais pode derrubar uma pasta de trabalho de 500 células. Identificadores
não resolvíveis, métricas desconhecidas e conversões sem cotação retornam como entradas em
errors — cada uma com um requestId, um code estável e um
detail legível — enquanto todas as demais linhas retornam normalmente.
Proveniência
Toda resposta informa a versão do registro de métricas que a precificou
(meta.registryVersion), e as linhas carregam a moeda efetivamente retornada. Os
números são auditáveis entre clientes: a mesma requisição produz o mesmo valor em qualquer
lugar, por construção.
Vocabulário
Os parâmetros de requisição abaixo significam a mesma coisa em todo endpoint que os aceita.
Periodicidade (fundamentos)
| Valor | Significado |
|---|---|
FY | Exercícios fiscais, conforme reportados. |
QTR | Trimestres fiscais verdadeiros. 10-Qs armazenados como acumulado do ano são desacumulados no servidor; o Q4 deriva do total do exercício quando não reportado. |
LTM | Soma móvel dos últimos quatro trimestres em cada encerramento de trimestre (fluxos). Itens pontuais retornam seu valor na data de encerramento daquele trimestre. |
YTD | Acumulado dentro de cada exercício fiscal. |
SEMI | Em preparação — aguarda normalização semestral. |
basis seleciona o eixo de reapresentação: original (padrão) ou
restated (em preparação — aguarda modelagem de vintages).
Frequência (cotações & séries)
| Valor | Observações mantidas |
|---|---|
D / AD | Todos os pregões observados. |
W · M · CQ · CSA · CY | Último pregão de cada semana ISO / mês civil / trimestre / semestre / ano. |
AM · AQ · ASA · AY | Ancoradas: avançando a partir do seu startDate (um início em 16 de junho gera 16/jun, 16/jul, …), tomando a última observação na data-âncora ou antes dela. |
Ajuste de preço
| Valor | Significado |
|---|---|
SPLIT | Ajustado por desdobramentos (padrão; corresponde aos fechamentos armazenados das bolsas). Apenas listagens dos EUA — MX/BR/PE guardam a cadeia ajustada em separado e retornam erro de linha indicando DIV_SPIN_SPLITS. |
DIV_SPIN_SPLITS | Ajustado por dividendos, cisões (spinoffs) e desdobramentos. |
UNSPLIT · SPLIT_SPINOFF | Em preparação — exigem histórico de fatores de ajuste. |
Moeda
currency tem como padrão LOCAL: os valores retornam em sua moeda
nativa de cotação ou de reporte, informada por linha — uma planilha brasileira nunca recebe USD
silenciosamente. Qualquer código ISO (USD, BRL, MXN,
EUR, …) é convertido no servidor; veja conversão de moeda
para saber qual taxa de câmbio se aplica em cada caso.
Resolução de valores mobiliários
/api/analytics/v1/resolveA camada de identidade sob todas as demais chamadas. Envie até 2.000 identificadores de tipos
mistos; receba de volta entidades canônicas com a estrutura empresa vs. listagem. Linhas que
compartilham um entityId são classes de ações / listagens do mesmo emissor,
enumeradas em listings.
// POST /api/analytics/v1/resolve { "identifiers": [ {"value": "PETR4-BR"}, {"value": "US0378331005"}, {"value": "037833100", "type": "CUSIP"} ] } // 200 — uma linha 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"} ] } ] }
- Tickers sem qualificação resolvem contra o seu mercado padrão e, na ausência dele, contra os EUA. Qualifique com um sufixo (
-BR,-MX,-PE,-US) para ser explícito; tickers hifenizados comoBRK-Bpermanecem intactos. candidateCount > 1marca um identificador ambíguo — os endpoints de dados reportam esses casos como erros de linha em vez de adivinhar.- O formato do identificador é classificado automaticamente; passe
type(TICKER·ISIN·CUSIP·CIK·ENTITY_ID) para sobrescrever.
Catálogo de métricas
/api/analytics/v1/catalog/metricsO registro oficial de todas as métricas que os motores conseguem calcular — o mesmo registro contra o qual executam o screener da plataforma, os painéis quant e a bancada de fórmulas, incluindo as métricas de fórmula personalizadas da sua organização. Faça autocompletar a partir daqui e uma requisição jamais nomeará uma métrica que os motores não conheçam.
| Filtro | Significado |
|---|---|
dataset | financials_standardized · prices · valuation · derived · returns · entity_attributes · … |
search | Busca por código, nome e aliases (?search=revenue). |
valueType | currency · percent · ratio · price · shares · text · … |
entityType | company · etf · fund · bond · manager |
includeDeprecated | Métricas descontinuadas carregam um replacementMetricCode. |
kind | line (uma linha da demonstração, reportada ou padronizada) · amount (um valor calculado) · ratio · market · attribute · holdings. |
industryProfile | industrial · bank · insurance · reit · fund: apenas as métricas que existem para esse tipo de emissor. Crédito / Depósitos é uma métrica bancária; a liquidez corrente não é. |
market | US · MX · BR · PE · CL: as métricas multimercado mais as arquivadas nesse mercado (linhas como reportadas, posições institucionais, aluguel de ações). |
limit / offset | Paginação; meta.pagination.total é a contagem filtrada. |
Cada linha indica também seu lugar na taxonomia de métricas: folderPath (linhas sob
Demonstrações financeiras, indicadores sob Índices e indicadores, uma pasta por família de
índices, linhas como reportadas por regulador), kind, basis
(standardized · as_reported · derived · observed),
statement, market, industryProfiles (vazio significa todo tipo de
emissor) e canonicalDataset, presente na cópia de um código que pertence a outro conjunto de
dados. Os nomes trazem aliases em espanhol e português: ?search=d%C3%ADvida%20l%C3%ADquida
encontra NET_DEBT.
Cada linha informa seu dataset, motor, tipo de valor, unidade, tipos de entidade suportados, tipos de tempo (as-of / série temporal), modos de período e status.
Cotações globais
/api/content/global-prices/v1/pricesOHLCV de fechamento em todos os mercados cobertos, com contenção de listagens cruzadas embutida: uma linha de São Paulo que compartilha o ticker com uma emissão americana jamais pode se emendar na série dos EUA. Observações duplicadas são deduplicadas em uma única linha canônica por pregão.
// POST /api/content/global-prices/v1/prices { "ids": ["BBAS3-BR"], "startDate": "2026-01-01", "endDate": "2026-07-30", "frequency": "M", "fields": ["price", "volume"] } // 200 — observações de fim de mês, moeda nativa informada por linha { "data": [ { "requestId": "BBAS3-BR", "entityId": "BR-1023", "date": "2026-06-30", "currency": "BRL", "price": 19.91, "volume": 31200400 }, … ] }
fields:price·priceOpen·priceHigh·priceLow·volume.adjustseleciona a base de preço.- Todos os onze valores de frequência são suportados, com corte por calendário e ancoragem na data inicial.
- Com um
currency, cada observação é convertida pela taxa de câmbio à vista da data daquela observação; volume nunca é convertido.
Fundamentos
/api/content/fundamentals/v1/fundamentalsDados fiscais padronizados com a inteligência de períodos da plataforma. O servidor é o dono da semântica de períodos — armazenamento como acumulado do ano, inferência do encerramento do exercício fiscal, derivação do Q4, janelas LTM — para que nenhuma fórmula precise sê-lo.
// POST /api/content/fundamentals/v1/fundamentals { "ids": ["AAPL-US"], "metrics": ["REVENUE"], "periodicity": "LTM", "fiscalPeriod": { "start": "2025-01-01", "end": "2026-07-30" } } // 200 — receita móvel dos últimos doze meses em cada encerramento de trimestre fiscal { "data": [ { "requestId": "AAPL-US", "metric": "REVENUE", "periodicity": "LTM", "fiscalYear": 2026, "fiscalPeriod": "Q2", "fiscalEndDate": "2026-03-28", "currency": "USD", "value": 451442000000 }, … ] }
fiscalPeriod.start/endsão datas de calendário; o servidor as resolve para períodos fiscais encerrados. Janela padrão: cinco anos para trás.- As linhas reportam a moeda de reporte do emissor, ou a
currencysolicitada após conversão. - Métricas desconhecidas são erros de linha por métrica; o restante da requisição ainda retorna.
Taxonomias de demonstrações, demonstrações completas e períodos fiscais
Três complementos de descoberta e consulta do endpoint de fundamentos:
| Endpoint | Retorna |
|---|---|
GET /taxonomies?market=BR&template=banks | O plano de contas efetivamente reportado por aquele mercado e formato — market: US·BR·MX·PE, template: industrials·banks·insurance, statement opcional. Cada linha traz código da conta, rótulo, demonstração e quantas empresas a reportam — para conhecer as contas disponíveis antes de consultar dados. Um balanço de Bancos BR (aplicações interfinanceiras, operações de crédito…) não é o de bancos dos EUA. |
POST /statements | A demonstração financeira completa (IS, BS, CF ou FULL) de cada id em uma única chamada, no período implicado por asOf — mode: "annual" (último exercício fiscal, padrão) ou "latest" (último período divulgado, valores conforme reportados). A conversão cambial respeita a demonstração: balanço ao câmbio de fechamento do período, fluxos à média do período. |
POST /segments | Abertura de receita por segmento de negócio, produto e geografia para emissores dos EUA (a partir de arquivos estruturados): os nomes de segmento do próprio emissor, valores conforme reportados, eliminações excluídas. dimension: business·product·geographic; qualquer métrica do catálogo. |
POST /periods | Os períodos fiscais reportados por cada empresa (ano, período, datas, contagem de contas) — cobertura antes de consultar. |
// POST /api/content/fundamentals/v1/statements — uma chamada, a demonstração completa { "ids": ["BBAS3-BR"], "statement": "FULL", "asOf": "2026-07-30", "currency": "USD" }
Indicadores
POST /ratios — o catálogo de indicadores como
série: uma aba inteira (group), ou indicadores nomeados de qualquer aba, com
todas as linhas de fluxo lidas em uma mesma base de período. É a janela de Indicadores da aplicação
web servida pela API — a mesma chamada ao motor, então um número aqui e um número lá não podem
divergir. A matriz continua servindo qualquer indicador em uma única data de
referência; este endpoint é para o histórico.
// POST /api/content/fundamentals/v1/ratios { "ids": ["AAPL-US", "BIMBOA-MX"], "ratios": ["GROSS_MARGIN", "ROE", "PB"], "periodBasis": "ltm", "scale": "quarterly" } // 200 — uma linha por (id, indicador, período); um indicador de fluxo carrega a base em que foi lido { "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âmetro | Significado |
|---|---|
group | valuation · profitability · returns · leverage · liquidity · efficiency · cash_flow · per_share · growth. Omita quando ratios nomeia os códigos: a aba de um indicador é uma propriedade do indicador, e uma requisição que mistura abas é respondida aba por aba. |
periodBasis | ltm (padrão) · ytd · 3m · fy — como cada linha de fluxo (receita, EBITDA, fluxo de caixa) é lida. Indicadores de balanço são pontuais no tempo e não se movem com ela; suas linhas carregam periodBasis: null para que o leitor saiba por que a linha ficou parada. |
scale | quarterly (padrão) · annual para as abas fundamentais; daily · weekly · monthly para valuation, cujo numerador se move a cada pregão e não tem período fiscal. Crescimento é apenas anual. A escala é ajustada ao que a aba e o emissor conseguem honrar, e cada linha diz isso em scaleClampReason: tab_grid, ou issuer_reports_annually para os emissores que não publicam demonstrações intermediárias. |
asOf, start | Data de referência (padrão hoje) e até onde recuar; sem start o alcance é o próprio da escala — dez anos de trimestres, quinze de exercícios fiscais, dois de dias. |
currency | Converte apenas as linhas de magnitude monetária (dívida total, valor de mercado, valores por ação); um indicador nunca é convertido. |
periodé um período fiscal (FY2026 Q3) nas grades fiscais e uma data ISO na grade de preços.periodEnddata cada linha, porque os períodos não são comparáveis entre emissores: o FY2026 Q3 da Apple terminou em 2026-06-27 e o de um exercício encerrado em dezembro terminou em 2026-09-30.valueType: "percent"é uma fração — uma margem bruta de 48,65% é0.4865, o mesmo número que a matriz e o catálogo dão para o mesmo código.- Retido não é ausente. A margem bruta de um banco e o empréstimos/depósitos de uma industrial voltam como erros de linha
NO_DATAque dizem por quê; cada (id, indicador) pedido produz um valor ou um erro, nunca uma célula silenciosamente ausente. - GET
/ratios/fieldslista cada indicador que o endpoint serve com sua aba, fórmula, tipo de valor, escalas e os tipos de emissor para os quais existe — leia-o antes de montar uma consulta.
Point-in-time
POST /point-in-time — fundamentos como eram
conhecidos em uma data, para backtesting sem viés de antecipação (emissores dos EUA). Duas
garantias: um período fiscal é invisível até a data de publicação do seu protocolo (o trimestre de
dezembro da Apple não existe antes de 30 de janeiro), e se um número for reapresentado depois,
serve-se o valor vigente em pitDate — as linhas trazem firstPublished,
lastPublished (aditamentos) e valueVintage (as_known quando
há vigência capturada; a captura de reapresentações acumula desde 2026-08-02).
pitDataItems=true no catálogo lista as métricas com capacidade PIT. FY e QTR; componha
LTM no cliente a partir de trimestres PIT.
Matriz
/api/analytics/v1/matrixMuitos ativos × muitas métricas em uma única data as-of, em uma requisição — a primitiva da grade de comparáveis. As métricas podem misturar datasets livremente: cotações, fundamentos, múltiplos de valuation, medidas derivadas e atributos de texto retornam todos pelo mesmo envelope.
// 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 — uma célula por (id, métrica); as-of = última observação na data ou antes dela { "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" } ] }
- Nomes de métrica que colidem entre datasets são resolvidos por uma precedência documentada — as demonstrações reportadas vencem. Passe um par
{"metric": "…", "dataset": "…"}explícito para sobrescrever;GET /catalog/metricsinforma quais datasets servem cada nome. - Métricas de demonstrações financeiras aceitam
periodMode: "fy"para valores do último exercício fiscal; use o endpoint de fundamentos para séries QTR/LTM/YTD de linhas das demonstrações, o endpoint de indicadores para séries de indicadores na base de período escolhida, ou as métricas de valuation pré-calculadas (PE_LTM,EV_EBITDA_LTM, …). - Células cujo cálculo resulta em nulo ficam ausentes, não viram erro — uma planilha preenche
#N/A.
Screener
/api/content/screener/v1/searchExecute screens no mesmo motor do screener da plataforma — condições sobre métricas
financeiras, métricas de preço, múltiplos de valuation e as métricas de fórmula personalizadas
da sua organização, com filtros de setor, bolsa, país e universo. Endpoints complementares:
POST /count retorna a contagem de correspondências
sem materializar linhas (conecte-o a um indicador ao vivo de "N empresas correspondem"), e
GET /fields lista todos os campos filtráveis.
// 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 — uma linha por ativo correspondente; meta.pagination.total = total de correspondências { "data": [ { "ticker": "AAPL", "entityId": "0000320193", "sector": "Technology", "nativeCurrency": "USD", "marketCap": 4925847973597, "metrics": { "REVENUE": 451442000000, "PE": 43.9 } }, … ] }
- Operadores:
gt·gte·lt·lte·eq·neq. Uma empresa sem uma métrica condicionada é reprovada no screen. currencyaqui tem como padrão USD (não LOCAL): os limiares de um screen comparam emissores entre si, o que exige uma moeda comum. As linhas ainda informam suanativeCurrency;meta.fxRateDatedivulga a data da taxa de câmbio utilizada.tickersrestringe o universo de candidatos;batch:"Y"enfileira screens grandes pela execução em lote.- Listagens canceladas são excluídas por padrão. Omitir
excludeStatusaplica a leitura da plataforma de "não consta como morta": listagens cujo status écancelled/canceladosão descartadas. Milhares de emissores americanos deslistados carregam seus últimos fundamentos (para o trabalho point-in-time), e um screen de indicadores listaria, de outro modo, empresas mortas desde 2012 — um teste de negociação recente não as pegaria, pois muitas ainda imprimem centavos no mercado de balcão. PasseexcludeStatus: []para incluí-las, oustatuspara selecionar por status explicitamente;tradedWithinDayscontinua sendo o teste de liquidez separado e opcional.
Screening em data passada
POST /api/content/screener/v1/point-in-time — roda um screening como ele teria
rodado numa data passada. O screener normal é do tempo presente: rodá-lo com limiares antigos
informa quais dos sobreviventes de hoje passariam hoje.
- Cada linha traz
fiscalYear,fundamentalsPeriodEnd,fundamentalsPublishedeavailabilityBasis: o screening é reproduzível porque se vê qual arquivamento julgou cada papel. currencyé USD por padrão e converte pela taxa da data consultada, não pela de hoje. Índices e percentuais nunca são convertidos.- Um emissor cuja moeda não possa ser precificada naquela data é excluído e informado como
erro
FX_UNAVAILABLE, nunca comparado sobre outra base.
MARKET_CAP, PE, PB, PS e EV
retornam erro de linha em vez de um número. Formar um valor de mercado histórico exige preço e
quantidade de ações na mesma base de desdobramentos, e o histórico de preços não está: parte é
como negociado e parte está ajustada a uma data de atualização que varia por ticker. O resultado
seria correto para alguns emissores e errado pelo fator do desdobramento para outros, sem nada na
resposta que diga qual.Fundos
/api/content/funds/v1/…Dados de fundos dos mercados locais no Brasil (mais de 65.000 fundos registrados),
México e Peru, com as convenções de identificador que cada mercado realmente usa: fundos BR
resolvem por CNPJ em qualquer formato (00.000.684/0001-21 ou
00000684000121), fundos MX e PE por ticker ou id de entidade. Quatro endpoints
compartilham um único contrato:
| Endpoint | Retorna |
|---|---|
POST /summary | Atributos cadastrais: nome, classificação, gestor/administrador, benchmark, situação, moeda nativa. |
POST /prices | Séries de cota/NAV (fields: ["nav", "netAssets"]) com o vocabulário completo de frequência. |
POST /returns | Retornos periódicos calculados a partir da cota na frequência amostrada. As cotas dos fundos são do tipo acumulação, portanto trata-se de retornos totais. |
POST /flows | Captações / resgates / fluxo líquido diários — somente BR, onde o mercado informa diariamente; os demais mercados retornam um erro de linha, nunca silêncio. |
POST /holdings | Carteira dos fundos BR/MX/PE e dos ETFs dos EUA no último informe até asOf: nome, identificadores, classe de ativo, quantidade, valor de mercado, peso. top limita as linhas (padrão 50). |
Participações institucionais ficam em
/api/content/ownership/v1: POST /holders
retorna quem detém um ativo (por gestor: vale o último protocolo do trimestre-alvo — aditamentos
prevalecem), e POST /manager-holdings retorna a
carteira de um gestor pelo CIK. O universo completo de gestores declarantes (~9.000) está
coberto para cada trimestre já vencido; como essas divulgações vencem 45 dias após o fim do
trimestre, as
listas de detentores usam por padrão o último trimestre totalmente vencido — passe
includePartial: true durante a janela de protocolo para ver o trimestre em
andamento. Os valores estão em USD; os pesos são percentual do valor reportado.
// POST /api/content/funds/v1/prices { "ids": ["00000684000121", "+TASAD1F1"], "fields": ["nav", "netAssets"], "startDate": "2026-01-01", "endDate": "2026-07-30", "frequency": "M", "currency": "USD" }
- As séries BR referem-se à classe principal do fundo; fundos PE carregam a moeda de cada emissão (PEN ou USD), informada por linha.
currencyconverte os campos monetários (cota, patrimônio líquido, fluxos) pela taxa à vista de cada observação, exatamente como em cotações globais.
Dados de referência
Identidade histórica e o registro documental que a sustenta. Ambos respondem à mesma pergunta: o que este identificador significava naquela data — a chave de cruzamento que qualquer base histórica externa ao nosso universo precisa.
Histórico de identificadores
POST /api/content/reference/v1/identifier-history — cada ticker, ISIN, CUSIP, CIK,
bolsa e MIC que um papel já carregou, com intervalos de vigência, desde 1926. Cada linha traz o
código do evento corporativo que causou a mudança, de modo que uma troca de nome se distingue de
uma fusão.
asOf retorna os intervalos vigentes naquela data.// POST /api/content/reference/v1/identifier-history { "ids": [ "AAPL" ], "asOf": "2019-06-28" }
identifierTypesfiltra porTICKER·ISIN·CUSIP·CIK·EXCHANGE·MIC·MIC_SEGMENT·SECURITY_DESCRIPTION— os mesmos termos que/resolveaceita, então um valor retornado pode ser reenviado como está.startDate/endDateselecionam intervalos vigentes em algum momento da janela, não os que começaram dentro dela.- Vem do cadastro-mestre da EDI: listagens dos EUA. Qualquer outro mercado retorna erro de linha, não um resultado vazio — que seria indistinguível de «nunca mudou».
Índice de documentos regulatórios
POST /api/content/reference/v1/filings — 2,2 milhões de arquivamentos regulatórios dos EUA de
20.205 emissores desde 1993: tipo de formulário, data, fim do período, número de accession, tipo de
emenda e URL do documento. O relógio de eventos para estratégias baseadas em anúncios, e a trilha
de auditoria por trás de cada dado fundamental que servimos.
formTypes compara por prefixo: 10-K inclui 10-K/A. Uma
emenda é o mesmo evento rearquivado, e costuma ser justamente a reapresentação procurada.
Fatores de ajuste de proventos
/corporate-actions agora retorna priceFactor,
shareFactor, cashComponent, affectsSplitAdjusted,
affectsTotalReturn e factorStatus ao lado dos termos do evento, para que
você reconstrua sua própria série ajustada e a concilie com a nossa.
ratioOld: 1 e ratioNew: 9, e o fator
de preço é 0,1 — um 10 para 1. Derivar o multiplicador do ratio daria 9×. Quando um
fator não pôde ser calculado, os campos são nulos e factorStatus diz o motivo, em vez
de a linha sumir.Calendários de negociação
POST /api/content/reference/v1/calendar — os pregões que cada mercado realmente
opera, para EUA, BR, MX e PE, dos anos noventa até 2029. Os dias sem pregão trazem o motivo; use
includeNonTrading para obter o calendário completo.
originéobserved(um pregão com preços no nosso repositório),scheduled(derivado de regras, o único disponível para datas futuras) ouboth. Quem planeja um rebalanceamento a dois anos consegue distinguir.- Quando as regras e os preços divergem, a linha mantém o observado e informa o
conflict. Um dia de luto nacional é anunciado, não deduzido de uma regra. sessionsinaliza os fechamentos antecipados dos EUA. Nenhum outro mercado os publica com confiabilidade suficiente para afirmarmos o mesmo.
Aritmética em dias de pregão
POST /api/content/reference/v1/calendar/offset — desloque N dias de pregão a
partir de uma data âncora. Liquidação em T+2, agendamento de rebalanceamentos e janelas de
eventos são a mesma pergunta, e todas ficam erradas quando respondidas em dias corridos.
- Um
offsetde0ajusta para o pregão vigente na âncora ou antes — o que significa uma data «as of» quando ela cai em feriado. - Se o calendário acabar antes do deslocamento,
resultDateé nulo etradingDaysAvailablediz até onde chegou. Ajustar para a borda devolveria uma data plausível e errada.
Negociações de insiders
POST /api/content/ownership/v1/insider-transactions — 1,75 milhão de registros do
Formulário 4 desde 2004, com a relação do declarante com o emissor (conselheiro, diretor, detentor
de 10%) incorporada.
Duas distinções que os arquivamentos não fazem sozinhos e que, de outro modo, teriam de ser reconstruídas:
- Nem todo código é uma negociação. O Formulário 4 mistura compras e vendas em mercado
(P/S) com outorgas (A), exercícios de opções (M/X) e retenção de imposto (F). Somá-los produz
um número que parece atividade de negociação e não é: cada linha carrega uma classificação
activity, e o endpoint filtra por padrão para mercado aberto. - Linhas de derivativos são objetos distintos. Somar ações de derivativos e não
derivativos conta duas vezes um exercício e a operação que o liquida.
securityBucketé explícito e filtrável.
Renda fixa
POST /api/content/fixed-income/v1/search ·
/reference · /prices — papéis mexicanos,
corporativos peruanos e debêntures brasileiras. 2,2 milhões de observações de
preço; um universo de títulos é descoberto, não conhecido por ticker, então
comece pelo search.
indexBasis
traz "DI + 1,6%" e spreadOverIndex carrega o spread
indicativo sobre ele. yieldToMaturity é null numa
linha brasileira, porque 0,74 ao lado dos 6,52 do México diria que o crédito
brasileiro rende um sétimo do mexicano, em vez de DI mais 0,74.- As durations vêm em anos em toda parte. O Brasil publica em dias úteis, convertidos por 252 — o próprio divisor da curva DI.
- Percentual do par é servido apenas onde a fonte publica (PE, BR). O México
tem 114 valores de face distintos, então uma razão derivada do seu cadastro
seria uma normalização que ninguém consegue sustentar;
parValuevai na linha de referência. - Nada é convertido de moeda: uma taxa é uma taxa e uma duration é tempo. Cada linha declara a própria moeda.
- Os ratings voltam como um mapa por agência — seis avaliam papel mexicano e discordam entre si.
Taxas de fundos
POST /api/content/funds/v1/fees — taxas de administração e de
performance, despesas totais, cargas e giro. Classes americanas a partir das
divulgações do prospecto (7,58 milhões de fatos sobre 64.931 classes), fundos
brasileiros a partir das suas próprias divulgações regulatórias.
grossExpenseRatioenetExpenseRationunca são reduzidos a um único número: a diferença é uma isenção, e isenções expiram.- Todos os campos de uma linha vêm de um documento, cuja data está na linha. Ler o valor mais recente de cada campo isoladamente produzia tabelas de taxas que nenhum prospecto chegou a declarar.
asOfseleciona a divulgação mais recente publicada naquela data ou antes.
Mudanças de participação
POST /api/content/ownership/v1/changes — o que as instituições
fizeram num ativo entre dois trimestres: quem entrou, aumentou, reduziu ou
saiu, ordenado pelo que de fato se moveu.
EXITED quando o gestor de fato entregou aquele trimestre; quem não
entregou nada é NOT_FILED.- As duas carteiras são montadas pela autoridade de participações institucionais da plataforma: uma emenda NEW HOLDINGS é aditiva, não substitutiva, de modo que uma carteira é o arquivamento base mais todas as emendas aditivas posteriores. Lida como substituição, a carteira de um gestor saiu em US$ 47,0 bi contra US$ 4.042,9 bi reais.
- Ações:
NEW·ADDED·TRIMMED·EXITED·NOT_FILED·UNCHANGED, filtráveis.
Execução em lote
Todo endpoint de dados aceita "batch": "Y" com o corpo de requisição
idêntico — vire uma única flag quando a pasta de trabalho crescer além dos limites síncronos.
O ramo em lote executa o mesmo caminho de código do síncrono, então os resultados são idênticos
por construção.
| Etapa | Chamada | Resposta |
|---|---|---|
| 1. Enviar | POST em qualquer endpoint de dados com "batch":"Y" | 202 + cabeçalho Location; o corpo carrega o id do job |
| 2. Consultar | GET /api/analytics/v1/batch-status?id=… | 202 enquanto executa · 201 quando concluído (+Location) · 200 com status:"error" em caso de falha |
| 3. Buscar | GET /api/analytics/v1/batch-result?id=… | 200 com o envelope padrão |
Os jobs pertencem à conta que os enviou e expiram após 24 horas. Jobs com falha entregam um
envelope EXECUTION_ERROR pelo mesmo contrato.
Exportação em massa
A execução em lote escala uma planilha. A exportação em massa resolve o problema oposto: carregar um conjunto de dados no seu próprio repositório e mantê-lo atualizado. Um job, um arquivo comprimido e um cursor exato de onde continuar.
| Passo | Chamada | Resposta |
|---|---|---|
| 0. Descobrir | GET /api/content/bulk/v1/datasets | Conjuntos exportáveis, a projeção exata de colunas e se aceitam carga incremental |
| 1. Enviar | POST /api/content/bulk/v1/export | 202 + Location; o corpo traz o id |
| 2. Consultar | GET /api/content/bulk/v1/status?id=… | status, rowCount, byteCount, nextChangedSince |
| 3. Baixar | GET /api/content/bulk/v1/download?id=… | O arquivo — CSV comprimido ou NDJSON |
# Carga inicial: todo o histórico de preços em um arquivo curl -b cookies.txt -X POST https://api.edi.finance/api/content/bulk/v1/export \\ -H "Content-Type: application/json" -d '{"dataset": "prices_eod"}' # Toda noite: apenas o que foi escrito desde a última carga 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 é o contrato. Um job concluído informa a
maior marca de escrita que realmente incluiu. Reenvie esse valor e a próxima carga recomeça
exatamente onde a anterior parou: nada escrito durante a execução é perdido ou repetido. Usar o
próprio relógio, ou now, perde linhas em silêncio.- Nove conjuntos hoje:
prices_eod,corporate_actions,corporate_action_factors,identifier_history,filings_index,insider_transactions,fundamentals_standardized,index_levels,fund_monthly_returns. - Uma janela de datas e
changedSincesão alternativas, nunca ambas: uma seleciona um período, a outra o que mudou. - Conjuntos sem marca de escrita rejeitam
changedSinceexplicitamente, em vez de devolver tudo a cada vez — o que pareceria um feed incremental funcionando. - As colunas são uma projeção declarada por conjunto: uma coluna adicionada internamente nunca aparece sem aviso no seu repositório. Os arquivos expiram em 48 horas.
- Duas exportações rodam simultaneamente em toda a plataforma; uma terceira recebe
429comRetry-After.
Situação dos conjuntos de dados
GET /api/analytics/v1/datasets — por conjunto: janela de cobertura, última carga,
contagem de linhas e entidades, quais endpoints o servem e um veredicto de atualidade.
lastObservationé a última data útil presente nos dados;lastLoadedAté a última escrita. Respondem a perguntas diferentes — um carregador que rodou há uma hora sem escrever nada novo é uma falha distinta de um que não roda há uma semana — por isso são campos separados, elastLoadedScopediz o que a sonda de escrita mediu.freshnesséFRESH·LAGGING·STALE·UNKNOWN, avaliado contra umexpectedLagBusinessDayspróprio de cada conjunto. Um único limiar não serve para um feed diário de preços e para uma declaração trimestral de posições, então a defasagem em dias úteis também é retornada para seu próprio critério.rowCountIsEstimateddistingue uma estimativa do planejador de uma contagem exata.computedAté a atualização que produziu a linha: um atualizador parado informa a própria idade em vez de passar cobertura antiga por atual.
Conversão de moeda
A conversão é feita no servidor e é sensível à semântica — o tipo certo de taxa de câmbio se aplica a cada valor:
| Tipo de valor | Taxa aplicada |
|---|---|
| Observações de preço | Taxa à vista na data de cada observação. |
| Fundamentos de fluxo (DRE/DFC) | Taxa média do período ao longo da janela fiscal. |
| Fundamentos de estoque (BP) | Taxa à vista no encerramento do período fiscal. |
| Células de matriz (tipo moeda/preço) | Taxa à vista na data as-of. |
| Volume, razões, percentuais, texto | Nunca convertidos. |
Taxas cruzadas compõem-se via USD. Uma conversão que não pode ser precificada — moeda de
origem desconhecida, par não suportado, nenhuma taxa dentro da janela de defasagem — é um erro de
linha FX_UNAVAILABLE com as linhas afetadas descartadas: você nunca recebe
silenciosamente valores nativos sem conversão.
CSV em toda parte. Envie Accept: text/csv a qualquer endpoint de
dados e as linhas planas do envelope voltam como arquivo CSV — mapas aninhados viram colunas com
ponto, erros por linha acompanham como comentários # e o registryVersion
é carimbado no final. O caminho mais rápido de qualquer endpoint para uma planilha ou dataframe.
Pesquisa — pacote acadêmico
A superfície de pesquisa acadêmica — painéis ponto-no-tempo sobre universos históricos
livres de viés de sobrevivência, fixados por Research Snapshots citáveis — está listada no
índice de endpoints abaixo em /api/research/…. Mesma autenticação de todos os
endpoints; enquanto a seção Academia estiver em fase de testes, os endpoints de pesquisa
exigem também o papel de pesquisa na sua conta.
Downloads — o pacote acadêmico
Auto-hospedado e versionado com a plataforma: o wheel do SDK edifinance, os notebooks de ensino em três idiomas (inglês, espanhol, português — pastas de Excel de amostra incluídas), e os doze capítulos de metodologia. O SDK não está no PyPI enquanto a Academia estiver em fase de testes — instale-o direto daqui (funciona também no Colab).
# o SDK ainda não está no PyPI — instale a partir da plataforma
pip install https://api.edi.finance/static/academic/edifinance-0.1.1-py3-none-any.whl- edi-academic-package.zip — tudo: wheel do SDK, notebooks (en/es/pt), capítulos de metodologia, pastas de Excel.
- edifinance-0.1.1-py3-none-any.whl — apenas o SDK de Python.
- notebooks/README.md — o inventário de notebooks; arquivos individuais em
/static/academic/notebooks/.
Í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.
| Method | Path | Summary |
|---|---|---|
| analytics | ||
| GET | /api/analytics/v1/batch-result | Download a finished batch job's envelope. |
| GET | /api/analytics/v1/batch-status | Status 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-presets | Canonical equity presets; metric instances resolve through the catalog. |
| GET | /api/analytics/v1/catalog/fund-presets | Canonical Fund Quant presets resolved against market source capability. |
| GET | /api/analytics/v1/catalog/metrics | The 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/datasets | Coverage and freshness per dataset: how far it reaches, when it last moved. |
| GET | /api/analytics/v1/health | Liveness 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/inspect | Cell-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/keys | The caller's API keys and their status. |
| POST | /api/analytics/v1/keys | Issue an API key. |
| DELETE | /api/analytics/v1/keys/{key_id} | Revoke one API key immediately. |
| GET | /api/analytics/v1/keys/{key_id}/usage | Daily usage rollups for one of the caller's keys (session-only). |
| POST | /api/analytics/v1/matrix | Cross-domain retrieval: any set of ids against any set of metrics, each cell routed to the dataset that owns it. |
| POST | /api/analytics/v1/resolve | Resolve tickers, ISINs, CUSIPs, CIKs or entity ids to the platform's canonical security, with the candidates when one is ambiguous. |
| POST | /api/research/dataset-build | Run a build and return a PREVIEW plus the full diagnostics. |
| GET | /api/research/dataset-definitions | Named, reusable panel definitions: universe, metrics, window, frequency, PIT mode, currency. |
| POST | /api/research/dataset-definitions | Create a named panel definition. |
| POST | /api/research/dataset-export | Download a full panel as CSV or XLSX (§67). |
| GET | /api/research/dataset-runs | Recent builds with row counts, dataset hashes, full diagnostics, and any minted snapshot codes. |
| GET | /api/research/event-studies | Seeded event-study definitions: model, benchmark, windows, and event counts. |
| POST | /api/research/event-study | Thin transport over the event-study engine (§82 names this route; the engine predates it). |
| POST | /api/research/excel/panel | The =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/universe | The =EDI.UNIVERSE() backend. |
| GET | /api/research/metrics | Metrics that actually have facts, with their coverage. |
| GET | /api/research/research-snapshots | Research Snapshots: citation code, status, knowledge date, universe, registry hashes, and dataset hash. |
| POST | /api/research/snapshots/{snapshot_code}/replay | One-call snapshot replay (§27): re-run the build a citation pins and return the comparison as evidence. |
| GET | /api/research/universes | Universe definitions with markets, benchmark linkage, and snapshot counts. |
| bulk | ||
| GET | /api/content/bulk/v1/datasets | Which datasets can be exported, with their column projection. |
| GET | /api/content/bulk/v1/download | Stream the finished export file. |
| POST | /api/content/bulk/v1/export | Queue a whole-dataset export; poll status, then download one file. |
| GET | /api/content/bulk/v1/status | Progress of one export, or every export this account has queued. |
| fixed-income | ||
| POST | /api/content/fixed-income/v1/prices | Daily bond observations: price, yield, duration, spread. |
| POST | /api/content/fixed-income/v1/reference | Terms for specific bonds: coupon, maturity, par, amount issued, ratings. |
| POST | /api/content/fixed-income/v1/search | Find bonds across MX, PE, BR and CL by issuer, currency, maturity or ISIN. |
| formula | ||
| GET | /api/content/formula/v1/catalog/metrics | Metrics a formula may reference, with their argument shapes. |
| GET | /api/content/formula/v1/definitions | Formulas 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}/versions | Every saved version of a formula, newest first. |
| POST | /api/content/formula/v1/execute | Evaluate a formula for a set of securities and dates. |
| POST | /api/content/formula/v1/validate | Parse and type-check an expression without running it. |
| fundamentals | ||
| POST | /api/content/fundamentals/v1/fundamentals | Standardized fundamentals on one fiscal basis: FY, QTR, LTM or YTD. |
| POST | /api/content/fundamentals/v1/periods | Which fiscal periods exist for a security, and their end dates -- the calendar to ask fundamentals questions against. |
| POST | /api/content/fundamentals/v1/point-in-time | Fundamentals as they stood on a past date, resolved through the publication ladder so a restatement cannot leak backwards. |
| POST | /api/content/fundamentals/v1/ratios | Financial 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/fields | Every ratio the ratios endpoint serves: tab, formula, value type, grid scales and the issuer types it exists for. |
| POST | /api/content/fundamentals/v1/segments | Reported business and geographic segments. |
| POST | /api/content/fundamentals/v1/statements | Full financial statements as a hierarchy of line items, standardized or as reported. |
| GET | /api/content/fundamentals/v1/taxonomies | Statement taxonomies available per market, and the line items in each. |
| funds | ||
| POST | /api/content/funds/v1/aum | Assets under management history. |
| POST | /api/content/funds/v1/fees | What a fund costs to hold: expense ratios, fees and loads. |
| POST | /api/content/funds/v1/flows | Net subscriptions and redemptions per period. |
| POST | /api/content/funds/v1/holdings | Disclosed portfolio holdings for a fund at a reporting date. |
| POST | /api/content/funds/v1/portfolio/analytics | Risk and exposure analytics computed over a fund's disclosed holdings. |
| POST | /api/content/funds/v1/prices | Fund NAV and market price history. |
| POST | /api/content/funds/v1/rankings | Peer rankings within a fund category over a chosen window. |
| POST | /api/content/funds/v1/registry | Bulk share-class registry for a market, including point-in-time returns. |
| POST | /api/content/funds/v1/returns | Fund returns as reported and as computed from NAV. |
| POST | /api/content/funds/v1/summary | Identity and headline facts for a fund or share class. |
| fx | ||
| POST | /api/content/fx/v1/average | The 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/history | An FX pair over time. |
| POST | /api/content/fx/v1/rate | A spot FX rate on a date. |
| POST | /api/content/fx/v1/translate | Translate 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-actions | Splits, dividends and other corporate actions with the price and share factors derived from them. |
| POST | /api/content/global-prices/v1/prices | End-of-day prices across all covered markets. |
| POST | /api/content/global-prices/v1/returns | Period returns over named windows, price or total return. |
| POST | /api/content/global-prices/v1/returns-range | Returns between two explicit dates. |
| POST | /api/content/global-prices/v1/returns/snapshot | Standard 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/changes | Additions and deletions between two constituent dates. |
| POST | /api/content/indices/v1/constituents | Index constituents and weights at a date. |
| POST | /api/content/indices/v1/history | An index level series over time. |
| POST | /api/content/indices/v1/levels | Index levels. |
| POST | /api/content/indices/v1/membership | The index memberships a security has held, with entry and exit dates. |
| POST | /api/content/indices/v1/search | Find indices by name, market or provider. |
| POST | /api/content/indices/v1/weight | One security's weight in an index over time. |
| lending | ||
| POST | /api/content/lending/v1/history | Securities-lending history. |
| POST | /api/content/lending/v1/summary | Current securities-lending state for a security: balance, rate and availability where the market publishes them. |
| macro | ||
| POST | /api/content/macro/v1/history | A macro series over time. |
| POST | /api/content/macro/v1/observations | The latest observation of a macro series. |
| POST | /api/content/macro/v1/search | Find macro series by name, country or source. |
| market-analytics | ||
| POST | /api/content/market-analytics/v1/correlation | A correlation matrix across securities over a window. |
| POST | /api/content/market-analytics/v1/performance | Performance statistics against a benchmark, including the risk-free leg where a Sharpe ratio is asked for. |
| POST | /api/content/market-analytics/v1/regression | Regress a security against factors or a benchmark. |
| POST | /api/content/market-analytics/v1/risk | Risk statistics over a return window: volatility, drawdown, VaR, beta. |
| ownership | ||
| POST | /api/content/ownership/v1/changes | What institutions did in a security between two quarters. |
| POST | /api/content/ownership/v1/holders | Institutional holders of a security from 13F, N-PORT and BR/MX/PE local-fund disclosures. |
| POST | /api/content/ownership/v1/insider-transactions | Insider activity, classified so the transaction codes do not have to be. |
| POST | /api/content/ownership/v1/manager-holdings | One manager's disclosed book: every position they reported for a quarter. |
| POST | /api/content/ownership/v1/shareholders | Registered and beneficial shareholders as disclosed to the local regulator, for markets that publish them. |
| peers | ||
| POST | /api/content/peers/v1/search | Canonical peer set for one security (peer_universe.build_peer_universe). |
| portfolio | ||
| POST | /api/content/portfolio/v1/analytics | Risk, exposure and performance analytics for a supplied portfolio of weights or positions. |
| POST | /api/content/portfolio/v1/optimize | Optimize weights under constraints, over the same risk math the Construction workstation uses. |
| POST | /api/content/portfolio/v1/walk-forward | Optimize 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/curve | A yield curve: every tenor at one date. |
| POST | /api/content/rates/v1/history | An interest rate over time. |
| POST | /api/content/rates/v1/rate | An interest rate on a date. |
| POST | /api/content/rates/v1/spread | The spread between two tenors on one curve, or across two curves. |
| reference | ||
| POST | /api/content/reference/v1/calendar | Trading sessions per market. |
| POST | /api/content/reference/v1/calendar/offset | Move N trading days from an anchor date. |
| POST | /api/content/reference/v1/filings | The regulatory filing index for a security: what was filed, and when. |
| POST | /api/content/reference/v1/identifier-history | Every identifier a security has carried, with validity intervals. |
| regime | ||
| POST | /api/content/regime/v1/history | The regime classification over time. |
| POST | /api/content/regime/v1/snapshot | Which market regime is in force now, and on what evidence. |
| POST | /api/content/regime/v1/stats | How an asset behaved conditional on regime. |
| screener | ||
| POST | /api/content/screener/v1/count | How many securities match a screen, without returning them. |
| POST | /api/content/screener/v1/distinct-count | Distinct values of one field across a screen -- how many sectors, how many countries -- without pulling the rows. |
| GET | /api/content/screener/v1/fields | Fields available to screen on, with their types and permitted operators. |
| POST | /api/content/screener/v1/point-in-time | Run a screen as it would have run on a past date. |
| POST | /api/content/screener/v1/search | Screen the universe on any catalog metric and return the matching securities with the requested columns. |
| POST | /api/content/screener/v1/statistics | Aggregate statistics over a screen: count, mean, median, percentiles. |
| sustainability | ||
| GET | /api/content/sustainability/v1/fields | Available fields with units, definitions and current issuer coverage. |
| POST | /api/content/sustainability/v1/history | Disclosed history for one measure, one point per reported period. |
| POST | /api/content/sustainability/v1/summary | Latest disclosed workforce or environmental measure for an issuer. |
Taxonomia de erros
| Código | Significado | Mapeamento no Excel |
|---|---|---|
UNRESOLVED_IDENTIFIER | Nenhuma correspondência para o identificador (no mercado solicitado, se informado), ou nenhum dado na janela. | #N/A |
AMBIGUOUS_IDENTIFIER | Múltiplos candidatos; qualifique com um sufixo de mercado ou use um entityId. | #SPILL! |
INVALID_IDENTIFIER | Identificador vazio ou malformado. | #VALUE! |
UNSUPPORTED_MARKET | Código de mercado fora de US · BR · MX · PE · CL · CO. | #N/A |
UNSUPPORTED_METRIC | Métrica desconhecida, ou uma combinação de métrica/período que este endpoint não atende. | #NAME? |
FX_UNAVAILABLE | A moeda solicitada não pode ser precificada para algumas linhas. | #N/A |
EXECUTION_ERROR | Um job em lote ou handler falhou; detail explica. | #VALUE! |
429 + Retry-After | Limite de taxa por chave excedido (padrão 1.200 requisições/minuto; overrides por chave na criação, aprovação de admin acima do padrão). Respeite Retry-After antes de tentar novamente. | o suplemento tenta novamente até quatro vezes por conta própria; só então EDI rate limit reached |
Falhas no nível da requisição usam os status HTTP padrão: 400 requisição
malformada · 401 não autenticado · 404 id de lote
desconhecido/expirado.
Limites de requisição
| Endpoint | Síncrono | Em lote (batch:"Y") |
|---|---|---|
| /resolve | 2.000 identificadores | — |
| /prices — dia único | 1.000 ids | 2.000 ids |
| /prices — múltiplos dias | 100 ids | 1.000 ids |
| /fundamentals | 250 ids × 50 métricas | 5.000 ids × 50 métricas |
| /matrix | 500 ids × 50 métricas | 2.000 ids × 50 métricas |
| /screener/search | 1.000 linhas por página | igual, enfileirado |
Clientes & Excel
Python. O cliente de referência (edi_analytics.py) encapsula o
login, o envelope e o polling de lotes, e traz os helpers de spill usados pela integração com o
Excel — spill_scalar, spill_series, spill_fundamentals,
spill_ratios, spill_matrix, spill_fibonacci — cada um retornando uma grade 2-D pronta para um dataframe ou uma
matriz dinâmica.
Excel. O suplemento registra fórmulas exatamente sobre esta API. Comece pelo guia de instalação para Excel, que cobre tanto a implantação por um administrador do Microsoft 365 quanto a instalação individual. Também é possível baixar diretamente o manifesto de produção ou a pasta de trabalho de demonstração.
=EDI.VALUE("AAPL-US", "MARKET_CAP") → um valor =EDI.HISTORY("BBAS3-BR", "price", "2026-01-01", "2026-07-30", "M") → spill de 7×2 =EDI.FUNDAMENTALS("AAPL-US", "REVENUE", "LTM") → spill de períodos fiscais =EDI.MATRIX(A2:A20, B1:F1) → spill de uma grade de comparáveis
Entradas inválidas degradam célula a célula (#N/A, #NAME?) — nunca
uma atualização de pasta de trabalho que falha por inteiro. O suplemento agrupa as requisições de
fórmula pela execução em lote automaticamente.
Qualquer outra stack. O documento OpenAPI 3 alimenta clientes gerados para outras linguagens.
Experimente
Entre com sua conta EDI e execute requisições ao vivo contra a API — todos os exemplos desta página são executáveis. As requisições rodam com as suas permissões de acesso, exatamente como rodariam a partir do Excel ou de um script.
Recursos em preparação
Estes eixos de requisição fazem parte do contrato, mas são deliberadamente rejeitados (HTTP 400, com mensagem explicativa) até que o maquinário que os sustenta entre em produção — você pode programar contra o vocabulário hoje sem risco de respostas erradas silenciosas:
basis: "restated"— demonstrações reapresentadas, aguardando modelagem de vintages.periodicity: "SEMI"— emissores de reporte semestral, aguardando normalização.adjust: "UNSPLIT"/"SPLIT_SPINOFF"— aguardando histórico de fatores de ajuste na rota de serviço. Os fatores em si já estão disponíveis em /corporate-actions e via exportação em massa.- Estimativas de consenso — não há fonte por trás do dataset. Apenas demonstrações reportadas são servidas.
- Endpoints point-in-time (
/point-in-time,/periods) — reservados para backtesting livre de viés de lookahead. - Domínios de conteúdo de fundos e screener.