DataBolsa docs
Referência da APIDados de mercadoCrédito privado

Rentabilidade da série com o CDI ao lado

Quanto a série rendeu, **contra o CDI do mesmo período**. `/credit/fidc/{cnpj}/series` já dava `return_month_pct` as-filed, e isso responde "quanto rendeu no mês" sem responder nenhuma das perguntas que quem compra sênior faz de verdade: quanto no ano, quanto desde que entrei e quanto foi o CDI enquanto isso. Uma sênior que rende 1,45% no mês é ótima ou péssima conforme o CDI tenha sido 1,12% ou 1,60%. Diferente dos outros blocos do informe, esta rota devolve **série histórica**, não a foto de uma competência — a pergunta só existe ao longo do tempo. **Duas convenções de spread convivem no mercado e significam coisas diferentes.** `pct_of_cdi` é multiplicativo ("110% do CDI"); `spread_annual_pp` é ADITIVO ("CDI + 3,5% a.a."), que é a forma em que o regulamento promete e portanto a única comparável com a meta. Publicar uma chamando-a da outra é erro que só aparece quando o CDI muda de patamar. **`is_reported` não é `has_position`.** A fonte continua publicando a série amortizada com cota 0 e rentabilidade 0; quem filtrar só pela primeira mostra série fantasma rendendo 0% e puxa a média da classe para baixo. A série ENCERRADA fica na resposta de propósito — omiti-la produziria viés de sobrevivente no track record da gestora. O acumulado encadeia só mês OBSERVADO: buraco na série não vira zero. Compare `months_in_window` com os meses do período antes de concluir que um acumulado está baixo. Mês com `return_implausible` (a fonte publica coisas como -1.165,85%) fica fora do encadeamento, mas continua as-filed na linha.

GET
/v1/credit/fidc/{cnpj}/returns
AuthorizationBearer <token>

In: header

Path Parameters

cnpjstring

CNPJ completo do emissor, 14 dígitos sem pontuação.

Match^\d{14}$

Query Parameters

from?string

Competência inicial (inclusive).

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

Competência final (inclusive).

Match^\d{4}-\d{2}-\d{2}$
limit?integer

Máximo de linhas. Default: 240.

Range1 <= value <= 1000

Response Body

curl -X GET "https://api.databolsa.com/v1/credit/fidc/string/returns?from=string&to=string&limit=1"
{
  "data": [
    {
      "cnpj": "string",
      "reference_date": "string",
      "series_label": "string",
      "seniority": "senior",
      "return_month_pct": 0,
      "return_implausible": true,
      "cdi_month_pct": 0,
      "excess_month_pp": 0,
      "pct_of_cdi": 0,
      "spread_annual_pp": 0,
      "cum_year": 0,
      "cdi_cum_year": 0,
      "cum_since_inception": 0,
      "cdi_cum_since_inception": 0,
      "months_in_window": 0,
      "is_reported": true,
      "has_position": true
    }
  ],
  "meta": {
    "next_cursor": "string",
    "count": 0,
    "total": 0,
    "subject": {
      "property1": "string",
      "property2": "string"
    },
    "order": "desc",
    "cnpj": "string",
    "reference_date": "string"
  }
}
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string"
}

Secundário da cota do FIDC (negócios de balcão da classe)

Por quanto a cota desta classe NEGOCIOU, pregão a pregão. É a outra metade do FIDC: o informe mensal diz o que o fundo tem e nunca o preço; o balcão diz o preço e nunca de que fundo é. Duas coisas que valem saber antes de concluir qualquer coisa da ausência de linhas. A primeira é que a B3 publica cota de FIDC sob a família **`CFF`** (cota de fundo fechado), junto com FII, FIP e FIF — procurar `family=FIDC` em `/credit/otc` devolve vazio, o que parece ausência de mercado e é só rótulo diferente. A segunda é que a esmagadora maioria das classes simplesmente não tem giro: em 2026, 379 emissores de FIDC apareceram no balcão, contra mais de 4.300 classes no informe. Silêncio aqui é característica do produto, não falha de cobertura. `match_level` viaja em toda linha porque o elo entre as duas fontes é o **nome**: o informe de FIDC não publica ISIN e o balcão não publica CNPJ. `exact_name` é denominação social normalizada idêntica — 95,3% dos emissores de FIDC do balcão resolvem assim, sem nenhum caso ambíguo. Quem preferir descartar a ponte fica com o preço, que é as-filed e correto de qualquer forma.

Classes de FIDC por competência: patrimônio, carteira e inadimplência

Fundos de direitos creditórios do informe mensal da CVM. O FIDC tem superfície própria e não aparece nas séries de `/funds` porque sua cota é marcada a **laudo** e não passa pelo informe diário — servi-lo por lá devolveria fundo sem série. A chave é a **classe**, não o fundo: um fundo multiclasse tem um CNPJ por classe, e as classes têm prioridades diferentes. `entity_kind` vem null nas competências anteriores a 2020-11, quando a fonte publicava o CNPJ do fundo e o grão era outro — é o marcador da era, não uma lacuna. As duas séries de inadimplência **não se somam**: em `*_with_risk` o cedente responde pelo crédito, em `*_no_risk` o fundo carrega a perda. `impaired_ratio` é fração da **carteira** (não do patrimônio) e vem null quando o inadimplente declarado excede a carteira — nesse caso `impaired_exceeds_portfolio` é true e os componentes brutos continuam na resposta. `overdue_*` (vencido e não pago) e `impaired_*` (reconhecido como inadimplente) também são rubricas distintas e nunca substituem uma à outra. Um FIDC feeder pode declarar recebíveis diretos e inadimplência iguais a zero porque carrega cotas de outros FIDCs. Isso significa risco em outra camada, não ausência de risco; `/funds/:cnpj/holdings` e `/funds/:cnpj/invested-funds` cobrem fundos ordinários e podem vir vazios nesse caso. Sem `date`, serve a competência mais recente com dado. **Os filtros daqui são de CADASTRO e tamanho** (`cnpj`, `q`, `minNetWorth`). Para cortar por uma MEDIDA — grande E inadimplente, inadimplência acima de um limiar, os N maiores de um recorte — use `rankObjects` / `aggregateObjects` com `where`: é uma chamada, contra paginar as 4.208 classes e calcular do lado de fora. Atenção à escala ao compor: `impaired_ratio` é FRAÇÃO (0,05 = 5%) e `top_originator_pct` é PERCENTUAL (35,2 = 35,2%).