> ## Documentation Index
> Fetch the complete documentation index at: https://octo-98895abd.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# credit_implied_rate

> CALCULATED, not observed: the yield that discounts a debenture's published agenda (coupons, amortisation, maturity) to the average PU of a B3 trade group (api.credit_market_history avg_price), one row per trade_date, settlement_date, trade_classification and method_version, oldest first. is_calculated is always true; method_version says how (v1: 252 business days, ANBIMA holiday table, flat-forward pre curve from B3 TaxaSwap). rate_basis says what implied_rate_pct is: pre_aa, ipca_real_aa and di_spread_aa are percent a year; pct_di is a percent of DI. contract_rate_pct is the contracted rate for comparison. The PU is read as dirty; the average PU of a group mixes the trades of the day, and a yield of an average is not an average of yields. A trade group the method cannot price has no row (the daily log counts why), never a guess. Check tags: confidence is checked, divergent or unchecked against ANBIMA's indicative rate of the same code and day (within 1 pp, more than 1 pp, or no comparable rate); outlier is divergent by more than 5 pp; thin_trade is volume under BRL 20 thousand. unchecked means no check was possible, not that the row is good. ANBIMA's own rate and the gap to it are not served. In the first run (2026-10-01 to 10-26) the median absolute gap to ANBIMA was 0.13 pp; the worst gaps were thin trades. Unknown code (no calculated rate) raises 22023; a known code with no rows in the window returns an empty set. Row cap: more than 1000 rows RAISES 22023, never trimmed; narrow p_from/p_to. No cursor.

**Row cap.** A window producing more than 1000 rows raises SQLSTATE `22023` naming this function. Nothing is trimmed to fit — PostgREST would silently cut the response at 1000 and a cut-short series is indistinguishable from one that simply ends. This function does not page — narrow the window instead.



## OpenAPI

````yaml /openapi.json post /rpc/credit_implied_rate
openapi: 3.1.0
info:
  title: SILO Data API
  version: '79'
  summary: >-
    Read-only Brazilian public financial data: CVM filings, BACEN series, B3
    quotes and the B3 BDI group.
  description: >
    Schema `api` over PostgREST. Views are `GET /<view>`; functions are

    `POST /rpc/<function>` with a JSON body.


    **This document is generated** from the live Postgres catalog by

    `scripts/gen_openapi.py` — `pg_get_function_arguments` for the RPC
    signatures,

    `information_schema.columns` for the view columns, and the granted-to-`anon`

    privilege set for which objects exist at all. It is not hand-maintained, and

    `tests/test_openapi_spec.py` fails the build when it drifts from the SQL.


    ### Two different ceilings


    Reading one for the other is the most expensive mistake on this API.


    * **The row cap refuses.** Sixty set-returning functions raise SQLSTATE
      `22023` when the window they were handed would produce more than 1000 rows.
      Nothing is trimmed, and the error says why and how to fix it (the message,
      plus PostgREST's `details` and `hint`). Five of them (`panel`,
      `quote_history`, `fund_nav`, `index_history`, `trade_consolidated_history`)
      take a `p_after` cursor so you can walk the series; the other fifty-five ask you to narrow the window. `fund_nav` paging
      additionally REQUIRES `p_entity_type` — its cursor is a bare period, which
      is unique only within one family, and CNPJs that file under both `fi` and
      `fidc` in the same month would otherwise be ambiguous.
    * **The tier ceiling clamps.** Three other functions (`search_funds`,
      `option_chain`, `option_exercises`) silently lower `p_limit` to a per-tier maximum. No error is raised, so the
      only way to know the result was cut is to know the ceiling. Signing in
      raises it.

    Separately from both, PostgREST's server-wide `db-max-rows = 1000` cuts
    every

    response, on every endpoint, for every tier. On the GET views
    `Content-Range`

    is the signal (`0-999/*`); `Prefer: count=exact` turns the `*` into a total.


    ### Retention


    Most of this warehouse is append-only history. The **B3 BDI group** —

    `short_interest`, `short_interest_by_sector`, `investor_flow`,

    `lending_trades`, `lending_participants` — is not: B3 keeps roughly 21
    business

    days and publishes no archive. A missed session cannot be bought back. See

    Market Coverage.
  license:
    name: See repository
    url: https://github.com/PedroDnT/SILO-BZ
servers:
  - url: https://zcjbtpxuhdekpwcxmepn.supabase.co/rest/v1
    description: Supabase PostgREST, schema `api`
security:
  - apikey: []
tags:
  - name: ANBIMA
  - name: Company events
  - name: Coverage & catalog
  - name: Derivatives
  - name: FIDC
  - name: FNET documents
  - name: Financials
  - name: Funds
  - name: Holdings
  - name: Inflation
  - name: Lookup
  - name: Macro
  - name: Macro expectations
  - name: Other
  - name: Panel
  - name: Portfolio
  - name: Quotes
  - name: Rates
  - name: Research
  - name: Screens
  - name: Securities lending
  - name: Short interest & flows
paths:
  /rpc/credit_implied_rate:
    post:
      tags:
        - Quotes
      summary: credit_implied_rate
      description: >-
        CALCULATED, not observed: the yield that discounts a debenture's
        published agenda (coupons, amortisation, maturity) to the average PU of
        a B3 trade group (api.credit_market_history avg_price), one row per
        trade_date, settlement_date, trade_classification and method_version,
        oldest first. is_calculated is always true; method_version says how (v1:
        252 business days, ANBIMA holiday table, flat-forward pre curve from B3
        TaxaSwap). rate_basis says what implied_rate_pct is: pre_aa,
        ipca_real_aa and di_spread_aa are percent a year; pct_di is a percent of
        DI. contract_rate_pct is the contracted rate for comparison. The PU is
        read as dirty; the average PU of a group mixes the trades of the day,
        and a yield of an average is not an average of yields. A trade group the
        method cannot price has no row (the daily log counts why), never a
        guess. Check tags: confidence is checked, divergent or unchecked against
        ANBIMA's indicative rate of the same code and day (within 1 pp, more
        than 1 pp, or no comparable rate); outlier is divergent by more than 5
        pp; thin_trade is volume under BRL 20 thousand. unchecked means no check
        was possible, not that the row is good. ANBIMA's own rate and the gap to
        it are not served. In the first run (2026-10-01 to 10-26) the median
        absolute gap to ANBIMA was 0.13 pp; the worst gaps were thin trades.
        Unknown code (no calculated rate) raises 22023; a known code with no
        rows in the window returns an empty set. Row cap: more than 1000 rows
        RAISES 22023, never trimmed; narrow p_from/p_to. No cursor.


        **Row cap.** A window producing more than 1000 rows raises SQLSTATE
        `22023` naming this function. Nothing is trimmed to fit — PostgREST
        would silently cut the response at 1000 and a cut-short series is
        indistinguishable from one that simply ends. This function does not page
        — narrow the window instead.
      operationId: rpc_credit_implied_rate
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                p_code:
                  type:
                    - string
                    - 'null'
                p_from:
                  type:
                    - string
                    - 'null'
                  format: date
                  description: Defaults to `(CURRENT_DATE - 365)`.
                p_to:
                  type:
                    - string
                    - 'null'
                  format: date
                  description: Defaults to `CURRENT_DATE`.
              required:
                - p_code
      responses:
        '200':
          description: >-
            The result set, oldest first. An unknown id is an empty array, not a
            404 and never a guessed value.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    instrument_code:
                      type:
                        - string
                        - 'null'
                    trade_date:
                      type:
                        - string
                        - 'null'
                      format: date
                    settlement_date:
                      type:
                        - string
                        - 'null'
                      format: date
                    trade_classification:
                      type:
                        - string
                        - 'null'
                    method_version:
                      type:
                        - string
                        - 'null'
                    is_calculated:
                      type:
                        - boolean
                        - 'null'
                    pu_brl:
                      type:
                        - number
                        - 'null'
                    quantity:
                      type:
                        - number
                        - 'null'
                    volume_brl:
                      type:
                        - number
                        - 'null'
                    trade_count:
                      type:
                        - integer
                        - 'null'
                      format: int32
                    indexador:
                      type:
                        - string
                        - 'null'
                    forma_remuneracao:
                      type:
                        - string
                        - 'null'
                    contract_rate_pct:
                      type:
                        - number
                        - 'null'
                    implied_rate_pct:
                      type:
                        - number
                        - 'null'
                    rate_basis:
                      type:
                        - string
                        - 'null'
                    flows_used:
                      type:
                        - integer
                        - 'null'
                      format: int32
                    confidence:
                      type:
                        - string
                        - 'null'
                    outlier:
                      type:
                        - boolean
                        - 'null'
                    thin_trade:
                      type:
                        - boolean
                        - 'null'
                    b3_capture_id:
                      type:
                        - string
                        - 'null'
                      format: uuid
                    computed_at:
                      type:
                        - string
                        - 'null'
                      format: date-time
                    source:
                      type:
                        - string
                        - 'null'
        '400':
          description: >-
            Bad request. Contract violations raise SQLSTATE `22023` with a
            message naming the limit or the argument at fault.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: >-
            No usable `apikey`, or a request for a schema outside `api`.
            `Accept-Profile: public` and any `cvm_*` / `b3_cotahist` / `cia_*`
            path answer 401 for every caller, by grant — schema `api` is the
            entire public surface.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: No such endpoint in schema `api`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      description: >-
        PostgREST error body. `code` carries the SQLSTATE — `22023` is a
        contract refusal.
      properties:
        code:
          type:
            - string
            - 'null'
          examples:
            - '22023'
        message:
          type:
            - string
            - 'null'
        details:
          type:
            - string
            - 'null'
        hint:
          type:
            - string
            - 'null'
  securitySchemes:
    apikey:
      type: apiKey
      in: header
      name: apikey
      description: >-
        The publishable key (`sb_publishable_…`), on every request. It is NOT a
        JWT — sending it as `Authorization: Bearer` is rejected as an invalid
        JWT. It identifies the project, not you, and maps to the Postgres `anon`
        role.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.