DataBolsa docs
Referência da APIDados de mercadoObjects

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`.

GET
/v1/objects
AuthorizationBearer <token>

In: header

Query Parameters

kindstring

O tipo dos objetos a listar.

Value in"company" | "equity_security" | "fund" | "service_provider" | "instrument" | "index" | "crypto_asset" | "commodity" | "country" | "indicator" | "data_series" | "offering" | "fund_share_class" | "market_event" | "role" | "sector" | "norm"
subkind?string

Recorte dentro do tipo.

rel?string

Restringe a quem tem esta relação com rel_to — a MESMA coorte de rankObjects.

rel_to?string

O outro lado de rel.

rel_direction?string

Onde a coorte está na aresta de rel.

Default"in"
Value in"in" | "out"
at?string

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.

Match^\d{4}-\d{2}-\d{2}$
where?string

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.

cursor?string
limit?integer
Default100
Range1 <= value <= 1000
total?string

true = 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.