Empresas fora de operação regular — recuperação judicial e afins
Papéis cuja emissora está em situação excepcional carimbada pela B3 no CODBDI do pregão: recuperação judicial, extrajudicial, concordata, sancionada. **NÃO é suspensão de negociação** — a maioria segue com pregão todo dia. Use `?total=true` para a contagem do universo sem paginar.
In: header
Query Parameters
1001 <= value <= 1000true = inclui meta.total (contagem do universo filtrado). Custa uma consulta a mais.
Filtra por uma situação específica. Omitir = todas as não-regulares.
"sancionada" | "concordataria" | "recuperacao_extrajudicial" | "recuperacao_judicial"Response Body
curl -X GET "https://api.databolsa.com/v1/corporate/trading-status?cursor=string&limit=100&total=string&status=sancionada"{
"data": [
{
"ticker": "string",
"entity_id": "string",
"trading_status": "regular",
"trading_status_since": "string",
"last_session": "string"
}
],
"meta": {
"next_cursor": "string",
"count": 0,
"total": 0,
"subject": {
"property1": "string",
"property2": "string"
}
}
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string"
}Sucessões de código — esta empresa virou aquela
Liga o código antigo ao novo, com a data ex e o `ratio` de conversão. `rename` é troca de código 1:1 (a empresa é a mesma); `incorporation` é M&A e a posição converte pelo ratio. É o que permite reconstruir histórico de posição atravessando a troca de código. `new_ticker` é o PRÓXIMO elo — o que casa com `ex_date` — e `current_ticker` é o código vivo no fim da cadeia. Os dois coincidem em 48 das 51 renomeações; nas outras três a diferença é que VVAR3 virou VIIA3 em 2021 e só chegou a BHIA3 em 2023.
Resume uma coorte — soma, média ou mediana, repartida por propriedade ou relação
A outra metade de `rankObjects`. Aquele responde QUEM se destaca; este responde QUANTO DÁ, repartido. "O patrimônio dos FIDCs somado por gestora" não tinha caminho: a saída era paginar o ranking inteiro e agrupar no cliente, o que só funciona se a coorte couber na página. **A COORTE é a mesma de `rankObjects`** — `kind`, `subkind`, `rel`/`rel_to` e `where`, com a mesma sintaxe e o mesmo significado. Troque `rankObjects` por `aggregateObjects` na mesma consulta e você resume exatamente o conjunto que ordenaria. **`group_by` aceita PROPRIEDADE ou RELAÇÃO**, e a resposta diz qual em `meta.group_by_kind`. `group_by=situation` reparte por atributo; `group_by=manages` reparte pelo objeto do outro lado da aresta — e aí cada grupo traz `entity_id`, porque gestora é objeto. Quando o grupo é palavra, `entity_id` vem nulo: é assim que se distingue, e o formato da linha nunca muda. `meta.groupable` lista, na própria resposta, o que cabe aqui. **`group_by_direction` diz onde a COORTE está na aresta**, igual a `rel_direction`. `manages` liga gestora a fundo, então uma coorte de fundos está na ponta de ENTRADA (`in`). Errar a direção devolve lista vazia — e nesse caso `meta.empty_reason` diz qual direção funcionaria, em vez de deixar a resposta parecer "não há dado". **`sum` é RECUSADO em percentual, razão, múltiplo e ponto de índice.** Somar o dividend yield de 300 FIIs devolve um número, responde 200 e não significa nada. `avg`, `median`, `min` e `max` valem para qualquer unidade — a média de um percentual é um percentual. **Três números de cobertura, e eles não são detalhe.** `cohort_objects` é a coorte inteira e `cohort_with_value` o subconjunto que tem número na medida — este segundo é o que `rankObjects` chama de `cohort_size`, e os nomes diferem de propósito para que ninguém leia um pelo outro. `ungrouped` conta quem ficou FORA de todo grupo (medido: 20.098 dos 57.090 fundos não declaram situação), e sem ele o total dos grupos parece completo sendo parcial. `multi_group` conta quem caiu em MAIS DE UM grupo: zero num verbo funcional, grande em `issued`, onde o mesmo objeto entra numa vez por emissão e o `sum` o conta várias — o número não fica errado, a leitura muda. Cada grupo traz `objects` e `with_value`. Diferença entre os dois é cobertura parcial: um grupo com 36 objetos e nenhum valor devolve `value: null`, nunca zero. **Para o TOTAL do mercado, leia `meta.cohort_value` — não some a página.** É a mesma agregação aplicada à coorte inteira, antes de repartir: inclui os `ungrouped` e não depende do `limit`. O `group_by` continua obrigatório, mas deixou de ser o único caminho até o total. **`order_by=objects` ordena pelos grupos MAIORES em objetos** — "as gestoras com mais fundos" é essa pergunta. O default `value` ordena pela agregação, e com o teto de grupos as duas ordens podem devolver PÁGINAS diferentes. **Sem `fact`, com `agg=count`, a operação vira CENSO**: conta OBJETOS por grupo. É o único caminho de contagem para tipo que só tem propriedades — "quantas assessorias ativas por UF" é `kind=service_provider&agg=count&group_by=advisor_state&where=advisor_situation=EM FUNCIONAMENTO NORMAL`, sem medida nenhuma envolvida. `meta.fact` volta nulo e `value` = `objects`.