A MESMA resposta de uma operação do grafo, como tabela com papéis declarados
O resultado tabular canônico. Uma série de `getObjectHistory` ou um ranking de `rankObjects` volta como `{ schema.columns, rows, meta }`: cada coluna declara `type`, `role` (`identity`, `label`, `dimension`, `time`, `measure`, `status`) e `unit`, e as linhas são escalares na ordem das colunas. O casamento com um gráfico é mecânico — `time` no eixo x, `measure` no y, `dimension` separa séries — e é isso que permite a um notebook desenhar sem conhecer a operação por baixo. Nada é recalculado: os números são os da operação especializada, em formato longo. `input` leva os parâmetros dela em JSON, validados pelo mesmo schema; `meta.query` devolve a consulta como `ObjectQuery`, reexecutável. Série com réguas diferentes no lote deixa `unit` da coluna `value` nula, traz a régua por linha e avisa em `meta.warnings`.
In: header
Query Parameters
A operação projetada. Só as que já têm projeção tabular.
"getObjectHistory" | "rankObjects"O(s) id(s) do sujeito, como em /objects/{id}/history. Obrigatório em getObjectHistory; ausente em rankObjects.
Os parâmetros de query da operação, em JSON, pelo nome do contrato — {"facts":"close","from":"2025-01-01"}.
"{}"Response Body
curl -X GET "https://api.databolsa.com/v1/objects/table?operation=getObjectHistory&id=string&input=%7B%7D"{
"schema": {
"columns": [
{
"name": "string",
"type": "string",
"role": "identity",
"label": "string",
"semantic": "string",
"unit": "brl",
"nullable": true
}
],
"primary_key": [
"string"
]
},
"rows": [
[
"string"
]
],
"meta": {
"ontology_version": 0,
"query": {
"operation": "resolveObject",
"subject": {
"entity_id": "string",
"label": "string"
},
"input": {
"property1": null,
"property2": null
},
"description": "string"
},
"as_of": "string",
"count": 0,
"warnings": [
{
"code": "mixed_scales",
"message": "string"
}
],
"lineage": [
{
"source": "string",
"lineage": "string"
}
]
}
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"details": {
"property1": null,
"property2": null
}
}As PROPRIEDADES do objeto — o que ele é, em palavras
A terceira forma de dizer algo sobre uma coisa. `getObjectFacts` serve NÚMERO (tem unidade, escala, data-base, anda no tempo); `listObjectLinks` serve LIGAÇÃO (aponta para outro objeto); esta rota serve PALAVRA de vocabulário fechado — situação, forma de condomínio, público-alvo, segmento de listagem, rito da oferta. **Leia `vocabulary` antes de concluir qualquer coisa de um valor.** Ele traz os valores POSSÍVEIS quando a fonte tem lista fechada, e é o que separa 'existem cinco situações' de 'existem vinte'. Um exemplo que morde: a situação de fundo tem cinco valores e NENHUM deles é 'Encerrado' — referência de mercado que exibe isso está derivando de outro lugar. Onde a lista é grande e viva (70 setores, 66 classificações ANBIMA), `vocabulary` é nulo de propósito: vocabulário declarado e desatualizado é pior que vocabulário ausente. **O valor sai como a tabela o tem**, sempre texto — booleano vem `"true"`/`"false"`, e onde a CVM publica `S`/`N` é `S`/`N` que sai. Esta rota não traduz, porque traduzir aqui faria ela discordar da rota de domínio sobre a mesma coluna. **Propriedade nula não vira linha.** Publicá-la diria 'esta coisa não tem público-alvo' quando o que houve foi a fonte não declarar — 475 das 9.119 subclasses não declaram previdência, e isso não as torna não-previdenciárias. **O que NÃO está aqui, e por quê:** administrador, gestor, auditor e custodiante de um fundo, e o coordenador líder de uma oferta, parecem propriedade e são ARESTA — apontam para outro objeto. Hoje ainda são texto na tabela de origem; publicá-los como propriedade normalizaria o erro em vez de resolvê-lo.
ÁLGEBRA DE CONJUNTOS sobre relações: interseção, união e diferença
Responde a classe de pergunta que dois montes separados não respondem. `op` escolhe a operação e o resto dos parâmetros é o mesmo nas três: - `op=intersect` (default) — quem está nos DOIS. Ex.: `a=assigned_to&b=issued` são as empresas que vendem recebível para FIDC **e** têm debênture emitida. - `op=union` — quem está em QUALQUER um dos dois. - `op=difference` — quem está em A e NÃO em B. É a pergunta de concentração: cedente EXCLUSIVO é risco que não aparece em média nenhuma. EXEMPLO COMPLETO da diferença, com os parâmetros exatos: cedentes do FIDC X que não cedem para o FIDC Y é `a=assigned_to&a_to_id=<X>&b=assigned_to&b_to_id=<Y>&op=difference&total=true`. Note que o VERBO é o mesmo nos dois lados — o que muda é a outra ponta. Comparar dois objetos concretos é para isso que `a_to_id`/`b_to_id` existem; sem eles você compara dois verbos, que é outra pergunta. E reporte `meta.total`, não o tamanho da página. `a_to_id`/`b_to_id` prendem a OUTRA ponta de cada relação — é o que permite comparar dois objetos concretos (cedentes do FIDC A contra os do FIDC B) em vez de dois verbos. Use `?total=true` para o tamanho do conjunto sem paginar.