Enumera os objetos de um tipo — o universo, sem exigir medida
"Liste as companhias do setor X" pelo que elas SÃO. `rankObjects` reduz o universo a quem TEM a medida escolhida — no setor Petróleo e Gás, 24 companhias viravam 6, e a lista parecia completa. Aqui companhia fechada, sem ticker e sem preço, também é linha: o universo é o do cadastro, e cada linha traz a identidade para continuar (`id` → `getObject`, `getObjectFacts`, `listObjectLinks`). **A coorte é a MESMA de `rankObjects` e `aggregateObjects`** — `kind`, `subkind`, `rel`/`rel_to` e o `where` por palavra recortam igual nas três; o que muda é o que se faz com ela (listar, ordenar, resumir). Ordem estável por nome com desempate por `id`; `total=true` devolve `meta.cohort_size` — o denominador que a página não promete. **Listar não é ranquear nem buscar**: corte por número é recusado apontando `rankObjects`; nome aproximado é `resolveObject`.
In: header
Query Parameters
O tipo dos objetos a listar.
"company" | "equity_security" | "fund" | "service_provider" | "instrument" | "index" | "crypto_asset" | "commodity" | "country" | "indicator" | "data_series" | "offering" | "fund_share_class" | "market_event" | "role" | "sector" | "norm"Recorte dentro do tipo.
Restringe a quem tem esta relação com rel_to — a MESMA coorte de rankObjects.
O outro lado de rel.
Onde a coorte está na aresta de rel.
"in""in" | "out"Vigência das ARESTAS do recorte por rel. Ausente: acervo (quem JÁ se relacionou), o mesmo default de listObjectLinks. Não há data para o resto — propriedade não tem série.
^\d{4}-\d{2}-\d{2}$Cortes por PALAVRA (sector=Bancos, situation!=Em Liquidação), a mesma sintaxe de rankObjects. Corte por NÚMERO é recusado com 422: número é medida com data-base — assunto do ranking, não da listagem.
1001 <= value <= 1000true = inclui meta.total (contagem do universo filtrado). Custa uma consulta a mais.
Response Body
curl -X GET "https://api.databolsa.com/v1/objects?kind=company&subkind=string&rel=string&rel_to=string&rel_direction=in&at=string&where=string&cursor=string&limit=100&total=string"{
"data": [
{
"id": "string",
"kind": "string",
"subkind": "string",
"name": "string",
"anchor_type": "string",
"anchor_value": "string"
}
],
"meta": {
"next_cursor": "string",
"count": 0,
"total": 0,
"subject": {
"property1": "string",
"property2": "string"
},
"cohort_size": 0,
"applied_property_where": [
{
"property": "string",
"op": "eq",
"values": [
"string"
],
"matched": [
"string"
],
"source": "string"
}
],
"filterable_properties": [
{
"name": "string",
"vocabulary": [
"string"
]
}
]
}
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"details": {
"property1": null,
"property2": null
}
}O VOCABULÁRIO dos verbos: o que cada relação afirma, e o que ela NÃO afirma
Leia isto ANTES de atravessar o grafo. O nome do verbo não basta: `manages` é o GESTOR e não o administrador fiduciário; `shareholder_of` é quadro societário SEM percentual e SEM qualificação, então nenhuma dessas arestas afirma controle; `same_owner` é simétrica e liga dois cedentes que compartilham sócio pessoa jurídica; `exposed_to_issuer` responde COM QUEM e nunca QUANTO. `shape` decide o que 'quantos' significa e qual `at` reproduz a contagem: `event` é total de todos os tempos, `snapshot` é o último retrato, `static` é o vigente — e verbo `static` RECUSA data passada, porque a fonte não publica série. `domain_kinds` e `range_kinds` dizem quais tipos podem estar em cada ponta, o que permite descartar uma travessia impossível antes de pagar por ela: `holds` termina em instrumento, fundo ou papel, nunca na companhia emissora. Catálogo fechado e pequeno, sem paginação. Traz também os verbos que ainda não têm nenhuma aresta — o range é declarado antes de o objeto nascer.
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.