De um texto para o objeto — ticker, CNPJ, ISIN, código ou nome
Devolve CANDIDATOS, no plural e de propósito: 'Itaú' e 'BTG' são várias pessoas jurídicas distintas, e escolher uma em silêncio é o erro que o grafo existe para impedir. `confidence: low` marca chave ambígua (código reaproveitado após encerramento). **`match_kind` diz COMO casou**, e é por ele que se decide o quanto confiar. `exact_key` é o único em que o candidato foi identificado — e o único em que `matched_key_type`/`matched_key_value` significam alguma coisa. Os outros três são palpite ordenado do melhor para o pior: nome idêntico, nome que começa com o termo, e o resto. Trate `fuzzy_name` como candidato a confirmar, nunca como resposta. Buscar por NOME pode trazer o objeto certo fora da primeira posição (`Petrobras` casa a controlada Petroquisa e a própria companhia), então quem busca por nome deve olhar a lista. Quando existir identificador, use-o. **A AÇÃO É OBJETO SEPARADO DA COMPANHIA desde 16/08/2026.** `PETR4` resolve para o PAPEL (`kind: equity_security`), não para a Petrobras: preço, indicador e provento são dele e são diferentes dos de PETR3. Para chegar à emissora, atravesse `issued` na direção `in`; a companhia continua publicando `tickers` e `share_classes`. Código antigo do mesmo papel continua resolvendo — `VVAR3` e `VIIA3` chegam em `BHIA3`. Do mesmo jeito, o INDICADOR é o conceito (`ipca`) e a SÉRIE é a publicação dele (`bcb_sgs:433`, `kind: data_series`), ligados por `measures` — e por `forecasts` quando a série PROJETA o conceito em vez de medi-lo, como o Focus e o breakeven da curva. Código de série é MINÚSCULO e é encontrado como está — até 16/08/2026 a busca normalizava tudo para maiúscula e as 183 séries eram inalcançáveis por chave, sem erro nenhum.
In: header
Query Parameters
1001 <= value <= 1000Ticker, CNPJ, ISIN, código ou nome. Chave exata tem prioridade sobre nome. O nome aceita palavras em QUALQUER ORDEM ("banco brasil" acha BANCO DO BRASIL) e termo de TIPO vira recorte ("FIDC Cielo", "debênture vale", "gestora kinea" — FIDC/FII/ETF/fundo/debênture/BDR/COE/empresa/índice/gestora/assessoria filtram em vez de casar texto). Entre nomes parecidos, vence o objeto mais REFERENCIADO pelas fontes.
1 <= lengthRestringe o tipo do objeto.
"company" | "equity_security" | "fund" | "service_provider" | "instrument" | "index" | "crypto_asset" | "commodity" | "country" | "indicator" | "data_series" | "offering" | "fund_share_class" | "market_event"Restringe DENTRO do tipo: fii, fidc, fip, etf, debenture, bdr, coe, tesouro. É o recorte que kind sozinho não dá — fund mistura 26.846 FIF com 1.583 FIIs.
Response Body
curl -X GET "https://api.databolsa.com/v1/objects/resolve?cursor=string&limit=100&q=string&kind=company&subkind=string"{
"data": [
{
"id": "string",
"kind": "string",
"subkind": "string",
"name": "string",
"anchor_type": "string",
"anchor_value": "string",
"match_kind": "exact_key",
"matched_key_type": "string",
"matched_key_value": "string",
"confidence": "high"
}
],
"meta": {
"next_cursor": "string",
"count": 0,
"total": 0,
"subject": {
"property1": "string",
"property2": "string"
}
}
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string"
}Ordena e FILTRA uma coorte por medidas — nível ou variação
O quarto eixo. Os outros três já existiam e cada um sozinho: QUEM (`kind`, `subkind` e as relações do grafo), O QUÊ (`listFactCatalog`) e QUANDO (`at`, `from`). Faltava o que fazer com o CONJUNTO — e sem isso 'a companhia que mais perdeu margem' exigia ler o histórico de milhares de companhias, uma chamada cada. **Quase toda triagem tem DUAS medidas, e `where` é a segunda.** Ordene por uma e corte pelas outras na mesma chamada: `fact=fidc_impaired_ratio&measure=delta&where=fidc_portfolio>50000000` responde 'quem mais piorou ENTRE os grandes'. Sem isso o corte vira uma leitura por objeto — medido em 20/08/2026, a mesma pergunta custou 14 chamadas a quem não viu o parâmetro. `meta.filterable_facts` lista, na própria resposta, o que mais cabe ali, e cada linha volta com `where_values` — o valor dela em CADA corte, já calculado para filtrar. Não peça um segundo ranking para reler o segundo número. **`expand` traz o objeto ligado em cada linha.** `kind=offering&expand=issued` responde 'as maiores ofertas E quem emitiu cada uma' numa chamada só, com o nome e a chave do emissor na própria linha. **Para um PERÍODO, use `at` com `since`**: `at` é o teto da data-base e `since` o piso. Não existe `until` porque `at` já é ele. Em `delta` e `pct_change`, `since_from` é o piso da ponta INICIAL — sem ele a janela pedida não é a janela recebida. **Leia `unit` antes de comparar com outra medida.** `ratio` é fração (0,08 é 8%) e `pct` é percentual (8,0 é 8%). **`pct_change` não serve para medida que cruza o zero**: margem indo de -1% para -2% devolve +100% de 'crescimento'. Para essas, `delta`. **Quem não tem valor nas DUAS pontas não entra**, e não entrar não é valer zero — `cohort_size` é o denominador honesto. Cada linha declara `as_of` e `as_of_from` porque medida trimestral cai na última competência publicada até a data pedida, e duas companhias podem estar comparando trimestres diferentes. **`availability: unknown` significa que a fonte não publica data de entrega** e o corte é só pela data-base: um ranking numa data passada enxerga números que ainda não eram públicos. Com `filed`, o corte é point-in-time completo.
Travessia em CADEIA: A → B → C, com o meio invisível
Para pergunta de dois ou três saltos, onde o objeto do meio existe só para ligar as pontas. Também responde SUPERLATIVO sobre relação — 'qual X tem mais Y' — porque a lista já vem ordenada por `reached_count` decrescente — objetos DISTINTOS alcançados, não caminhos: a resposta é a primeira linha. TRÊS EXEMPLOS COMPLETOS, com os parâmetros exatos: - 'qual auditor audita mais fundos que detêm papel emitido' → `steps=audits:out,holds:out,issued:in&count_at=1&total=true`. `count_at=1` porque a contagem pedida é de FUNDOS (posição 1); sem ele contaria PAPÉIS (a ponta) e daria outro número, maior e plausível. - 'qual índice tem mais empresas emissoras de debênture' → `steps=exposed_to_issuer:out,issued:out&count_at=1&total=true`. `exposed_to_issuer` salta detentor→papel→emissora de uma vez. - 'quais empresas têm debênture indexada ao IPCA' → `steps=issued:out,indexed_to:out&start_kind=company&end_id=<id do ipca>&total=true`. O alvo é o CONCEITO (`ipca`), não a série que o publica (`bcb_sgs:433`). **O ÍNDICE CONTÉM O PAPEL, NÃO A COMPANHIA** (desde 16/08/2026, quando PETR3 e PETR4 deixaram de ser a mesma coisa). Toda cadeia que sai de um índice e quer chegar na emissora paga um salto a mais: `contains:out` traz papéis e `issued:in` traz quem os emitiu, e cadeias que cabiam em três passaram a exigir quatro. O quarto NÃO existe: medido em produção, uma travessia de quatro saltos leva 86 segundos. Por isso existe **`exposed_to_issuer`**, que faz detentor→papel→emissora em UM salto. Use-a sempre que a pergunta for sobre exposição à EMPRESA. Ela NÃO tem `magnitude`, de propósito: tamanho é do papel, e agregar tamanho por emissora foi o que apagava R$ 4,54 bilhões antes da separação. Para valores, atravesse `holds` até o papel. POSIÇÕES: 0 é a partida, 1 é depois do primeiro salto, e assim por diante. `return_at` escolhe quem é LISTADO (default 0); `count_at` escolhe quem é CONTADO (default: a ponta). `end_id` prende a ponta final a um objeto; `end_kind` prende o tipo dela. O TOTAL É `meta.total` com `?total=true` — nunca conte as linhas da página, que são no máximo `limit`. A direção é obrigatória em cada passo: `holds:out` é 'este detém aquele' e `holds:in` é o inverso. O recorte temporal é POR PASSO, cada verbo pela sua forma; passar `at` força a mesma data em todos, o que só serve para pergunta datada.