> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Get one contract's saldo devedor and its amortization book

> Returns ONE contract's saldo devedor obligation together with its whole amortization book, by the rail contract number.

'obrigacao' is the SAME shape as one element of GET /v1/consignado/saldo-devedor, so a console needs one renderer for both. 'amortizacoes' is the per-competência record of what has already amortized, ordered by competência, which is the amortization table's own key order.

'origem' on each amortization is the provenance a reversal acts against: E1 is an amortização prevista, which nothing withdraws, and E5 is an antecipação, which its own exclusion can withdraw. That distinction is why the two are published rather than collapsed into a count.

An obligation with NO amortization at all answers an empty list and never a 404. The obligation is real and has simply never amortized, which is the ordinary state of a contract in its first month.

It answers from a LOCAL table and never reaches the Dataprev rail. The tenant is derived from the validated identity: a contract that does not exist and a contract belonging to another tenant are the SAME answer, 404, so this read cannot be used to probe another tenant's book.



## OpenAPI

````yaml /pt/openapi/v3-current/consignado.yaml get /v1/consignado/contracts/{numero_contrato}/saldo-devedor
openapi: 3.1.0
info:
  contact:
    email: contact@lerian.studio
    name: Lerian Studio
    url: https://lerian.studio
  description: >-
    OpenAPI 3.1 surface for Lerian Consignado — Dataprev. The API covers tenant
    credentials and rail configuration, worker margin, loan auctions and bids,
    contract registration and lifecycle, B3 instrument codes, disbursement
    confirmation, portability, refinancing, renegotiation, FGTS guarantees,
    reconciliation, funds, assignments, throughput, and event subscriptions.
  license:
    name: Lerian Studio General License
  title: Lerian Consignado API
  version: v1.0.0
servers:
  - url: https://br-consignado-gw.sandbox.lerian.net
security:
  - BearerAuth: []
tags:
  - description: >-
      Per-tenant Dataprev credential custody and public rail configuration
      (upload, status, rotation, revoke, requester code, and worker portal base
      URL)
    name: Credentials
  - description: >-
      Per-tenant streaming-hub subscription control-plane (list, create, get,
      rotate, revoke, and test delivery)
    name: Subscriptions
  - description: >-
      Dataprev payroll-rail surface: FGTS balance and authorization reads, the
      FGTS guarantee execution, contract suspension, reactivation and term
      changes, the rail's own contract documents, and the on-demand reads of
      leilão solicitações, escriturações, repasses and employment terminations
    name: Consignado Rail
  - description: >-
      Synchronous rail command surface: the operations a bancarizador without
      the lender drives over HTTP.
    name: Consignado Rail Commands
  - description: >-
      Gateway-owned disbursement confirmation: a client bank recording money it
      has ALREADY paid to a worker. It crosses no government boundary and
      proxies no Dataprev operation.
    name: Consignado Disbursement
  - description: >-
      Per-tenant self-service outbound Dataprev rail throughput: read and set
      this tenant's own requests-per-second, including a deliberate pause at
      zero
    name: Consignado Throughput
  - description: >-
      The B3 instrument code (Código IF) of an averbado contract: informed once
      by the bancarizador after B3 registers the CCB, and read back
    name: Consignado Registro B3
paths:
  /v1/consignado/contracts/{numero_contrato}/saldo-devedor:
    get:
      tags:
        - Consignado Saldo Devedor
      summary: Get one contract's saldo devedor and its amortization book
      description: >-
        Returns ONE contract's saldo devedor obligation together with its whole
        amortization book, by the rail contract number.


        'obrigacao' is the SAME shape as one element of GET
        /v1/consignado/saldo-devedor, so a console needs one renderer for both.
        'amortizacoes' is the per-competência record of what has already
        amortized, ordered by competência, which is the amortization table's own
        key order.


        'origem' on each amortization is the provenance a reversal acts against:
        E1 is an amortização prevista, which nothing withdraws, and E5 is an
        antecipação, which its own exclusion can withdraw. That distinction is
        why the two are published rather than collapsed into a count.


        An obligation with NO amortization at all answers an empty list and
        never a 404. The obligation is real and has simply never amortized,
        which is the ordinary state of a contract in its first month.


        It answers from a LOCAL table and never reaches the Dataprev rail. The
        tenant is derived from the validated identity: a contract that does not
        exist and a contract belonging to another tenant are the SAME answer,
        404, so this read cannot be used to probe another tenant's book.
      operationId: getConsignadoContractSaldoDevedor
      parameters:
        - description: >-
            The rail contract number, exactly as it was registered. It is never
            trimmed or normalized.
          in: path
          name: numero_contrato
          required: true
          schema:
            description: >-
              The rail contract number, exactly as it was registered. It is
              never trimmed or normalized.
            examples:
              - 99999999999AN1
            maxLength: 15
            minLength: 2
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaldoDevedorDetail'
          description: OK
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unprocessable Entity
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Too Many Requests
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Internal Server Error
        '503':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Service Unavailable
      security:
        - BearerAuth: []
components:
  schemas:
    SaldoDevedorDetail:
      additionalProperties: false
      properties:
        amortizacoes:
          items:
            $ref: '#/components/schemas/SaldoDevedorAmortizacaoItem'
          type: array
        obrigacao:
          $ref: '#/components/schemas/SaldoDevedorItem'
      required:
        - obrigacao
        - amortizacoes
      type: object
    Detail:
      additionalProperties: true
      properties:
        code:
          description: >-
            Stable, machine-readable product error code. One of the enumerated
            values: the CLT-NNNN catalog codes for the general refusal classes;
            the named command conflicts, which a client branches on to tell one
            conflict from another; the four terminal refusals
            IDEMPOTENCY_STATE_UNRECOGNISED, IDEMPOTENCY_RECORD_UNREADABLE,
            IDEMPOTENCY_OUTCOME_UNRECORDED and IDEMPOTENCY_REPLAY_UNAVAILABLE
            (422), which tell the client to reconcile the original request and
            never retry under a new key; IDEMPOTENCY_KEY_REUSE (422): the key is
            spent on a different request, so send a new key; the codes a single
            surface answers, named after it (FUNDO_*, REGISTRO_B3_*, ...); and
            the 5xx codes naming an upstream (DATAPREV_*, STREAMING_HUB_*,
            TENANT_MANAGER_*, the Access Manager's AUT-0033 and AUT-1021) or an
            unknown outcome, whose detail is client-readable; and the Access
            Manager's AUT-1022 (403): the partner credential holds more than one
            originador, so name it in the path.
          enum:
            - AUT-0033
            - AUT-1021
            - AUT-1022
            - AVERBACAO_ARTIFACT_CONFLICT
            - AVERBACAO_CLAIM_CONFLICT
            - AVERBACAO_DOCUMENTATION_CONFLICT
            - AVERBACAO_EXCLUDED
            - AVERBACAO_HELD_BY_ANOTHER_SENDER
            - AVERBACAO_NOT_ACCEPTED
            - AVERBACAO_OPERATIONS_INTERNAL
            - AVERBACAO_OPERATIONS_INVALID_CURSOR
            - AVERBACAO_OPERATIONS_INVALID_QUERY
            - AVERBACAO_OPERATIONS_UNKNOWN_STATUS
            - AVERBACAO_OPERATION_NOT_FOUND
            - BID_NO_PROPOSTA_LEFT
            - BID_ORIGINADOR_INACTIVE
            - BID_ORIGINADOR_UNKNOWN
            - BID_PROPOSAL_SLOT_TAKEN
            - BID_SOLICITACAO_TAKEN
            - BID_SOLICITACAO_UNKNOWN
            - BID_SUBMISSIONS_INTERNAL
            - BID_SUBMISSIONS_INVALID_CURSOR
            - BID_SUBMISSIONS_UNKNOWN_SITUATION
            - BOOKING_FIELD_INVALID
            - CEDED_CREDIT_INTERNAL
            - CEDED_CREDIT_NO_FUND_ENTITLEMENT
            - CEDED_CREDIT_UNAVAILABLE
            - CLT-0001
            - CLT-0002
            - CLT-0003
            - CLT-0004
            - CLT-0005
            - CLT-0006
            - CLT-0007
            - CLT-0008
            - CLT-0009
            - CLT-0010
            - CLT-0011
            - CONTRACT_ALREADY_REGISTERED
            - CONTRACT_NOT_BOOKABLE
            - CURSOR_EXPIRED
            - CURSOR_FENCE_MISMATCH
            - DATAPREV_CREDENTIAL_REJECTED
            - DATAPREV_CREDENTIAL_REQUIRED
            - DATAPREV_CREDENTIAL_REVOKED
            - DATAPREV_INVALID_RESPONSE
            - DATAPREV_TIMEOUT
            - DATAPREV_UNAVAILABLE
            - DECLARED_DATES_OUT_OF_ORDER
            - DECLARED_TERMS_INCONSISTENT
            - DISBURSEMENT_CONFIRMATIONS_INTERNAL
            - DISBURSEMENT_CONFIRMATIONS_INVALID_CURSOR
            - DISBURSEMENT_PAYMENT_CONFLICT
            - EVENT_DELIVERY_INTERNAL
            - EXCLUSION_AUTHORITY_CONFLICT
            - EXCLUSION_BOOKING_IDENTITY_INCOMPLETE
            - EXCLUSION_DOCUMENTATION_UNDERWAY
            - EXCLUSION_OPERATIONS_INTERNAL
            - EXCLUSION_OPERATIONS_INVALID_CURSOR
            - EXCLUSION_OPERATIONS_INVALID_QUERY
            - EXCLUSION_OPERATIONS_UNKNOWN_STATUS
            - EXCLUSION_OPERATION_NOT_FOUND
            - EXCLUSION_RENEGOTIATION_UNDERWAY
            - FGTS_EXECUTION_ALREADY_REFUSED
            - FGTS_EXECUTION_CONTRACT_TAKEN
            - FGTS_EXECUTION_OUTCOME_UNRESOLVED
            - FGTS_EXECUTION_PAYLOAD_MISMATCH
            - FIRST_DEDUCTION_BEFORE_COMPETENCIA
            - FORMALIZATION_DEADLINE_EXCEEDED
            - FUNDO_CNPJ_CONFLICT
            - FUNDO_DEACTIVATED
            - FUNDO_INTERNAL
            - FUNDO_INVALID_ID
            - FUNDO_INVALID_INPUT
            - FUNDO_NOT_FOUND
            - FUNDO_NOT_REGISTERED
            - FUNDO_REF_CONFLICT
            - FUNDO_UNAVAILABLE
            - HELD_REPASSE_MONTH_CLOSED
            - HELD_REPASSE_MONTH_MISMATCH
            - HELD_REPASSE_NOT_FOUND
            - HELD_REPASSE_UNATTRIBUTABLE
            - IDEMPOTENCY_KEY_REUSE
            - IDEMPOTENCY_OUTCOME_UNRECORDED
            - IDEMPOTENCY_RECORD_UNREADABLE
            - IDEMPOTENCY_REPLAY_UNAVAILABLE
            - IDEMPOTENCY_STATE_UNRECOGNISED
            - INVALID_CONTRACT_NUMBER
            - INVALID_CURSOR
            - INVALID_EVENTS_INVALID_CURSOR
            - INVALID_EVENT_NOT_FOUND
            - INVALID_EVENT_NOT_REQUEUEABLE
            - INVALID_PAGE_LIMIT
            - INVENTORY_UNAVAILABLE
            - LOAN_PRODUCT_VERSION_UNKNOWN
            - MARGIN_SNAPSHOT_INCONSISTENT
            - MATRICULA_DIFFERS_FROM_PROPOSAL
            - ORIGINADOR_INTERNAL
            - ORIGINADOR_INVALID_ID
            - ORIGINADOR_INVALID_INPUT
            - ORIGINADOR_NOT_FOUND
            - ORIGINADOR_REF_CONFLICT
            - ORIGINADOR_UNAVAILABLE
            - OUTCOME_UNKNOWN
            - PORTABILIDADE_WINDOW_EXPIRED
            - RAIL_COMMANDS_INTERNAL
            - RAIL_COMMANDS_INVALID_CURSOR
            - RAIL_COMMANDS_TENANT_REQUIRED
            - RAIL_COMMANDS_UNKNOWN_FILTER
            - RAIL_COMMAND_ALREADY_REFUSED
            - RAIL_COMMAND_ANSWER_NOT_RETAINED
            - RAIL_COMMAND_CLAIM_CONFLICT
            - RAIL_COMMAND_CLOSE_CONTRADICTED
            - RAIL_COMMAND_NOT_CLOSEABLE
            - RAIL_COMMAND_OUTCOME_UNRESOLVED
            - RAIL_COMMAND_PAYLOAD_MISMATCH
            - RATE_OUTSIDE_PRODUCT_RANGE
            - REGISTRATION_NOT_FOUND
            - REGISTRO_B3_AVERBACAO_NAO_CONFIRMADA
            - REGISTRO_B3_CONTRATO_NAO_ENCONTRADO
            - REGISTRO_B3_DATA_REGISTRO_INVALIDA
            - REGISTRO_B3_INTERNAL
            - REGISTRO_B3_JA_INFORMADO
            - REGISTRO_B3_NAO_INFORMADO
            - REGISTRO_B3_UNAVAILABLE
            - REGISTRO_B3_UNWIRED
            - RENEGOTIATION_EXCLUSION_UNDERWAY
            - REPASSE_EXPECTATIONS_INTERNAL
            - REPASSE_EXPECTATIONS_INVALID_CURSOR
            - REPASSE_EXPECTATIONS_UNKNOWN_SITUATION
            - REVERSAO_WINDOW_EXPIRED
            - SALDO_DEVEDOR_INTERNAL
            - SALDO_DEVEDOR_INVALID_CURSOR
            - SALDO_DEVEDOR_NOT_FOUND
            - SALDO_DEVEDOR_TENANT_REQUIRED
            - SALDO_DEVEDOR_UNAVAILABLE
            - STREAMING_HUB_TIMEOUT
            - STREAMING_HUB_UNAVAILABLE
            - TENANT_MANAGER_TIMEOUT
            - TENANT_MANAGER_UNAVAILABLE
            - THROUGHPUT_HISTORY_INTERNAL
            - THROUGHPUT_HISTORY_INVALID_CURSOR
            - THROUGHPUT_HISTORY_TENANT_REQUIRED
            - THROUGHPUT_HISTORY_UNAVAILABLE
            - THROUGH_REQUIRED
            - UNKNOWN_QUERY_PARAMETER
            - VERSION_ADMITS_NO_PESSOA_FISICA
          type: string
        detail:
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
          examples:
            - Property foo is required but is missing.
          type: string
        errors:
          description: Optional list of individual error details
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
            - array
            - 'null'
        instance:
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        status:
          description: HTTP status code
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: >-
            A short, human-readable summary of the problem type. This value
            should not change between occurrences of the error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: A URI reference to human-readable documentation for the error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
        upstream:
          $ref: '#/components/schemas/Upstream'
          description: >-
            RFC 9457 extension member: the error a proxied third-party provider
            reported. Absent unless the emitting service explicitly surfaced
            one.
      type: object
    SaldoDevedorAmortizacaoItem:
      additionalProperties: false
      properties:
        competencia:
          description: The competencia this marker amortized, yyyyMM.
          examples:
            - '202601'
          type: string
        created_at:
          description: When the marker was recorded, in UTC.
          examples:
            - '2026-01-31T03:00:00Z'
          format: date-time
          type: string
        origem:
          description: Which event family recorded this competência as amortized.
          enum:
            - E1
            - E5
          examples:
            - E1
          type: string
      required:
        - competencia
        - origem
        - created_at
      type: object
    SaldoDevedorItem:
      additionalProperties: false
      properties:
        codigo_inscricao_empregador:
          description: 'Which register the employer identifier belongs to: 1 CNPJ, 2 CPF.'
          examples:
            - '1'
          type: string
        competencia_inicio_desconto:
          description: Payroll competencia the deductions start in, yyyyMM.
          examples:
            - '202601'
          type: string
        data_primeiro_desconto:
          description: >-
            The first payroll deduction date every instalment's due date is
            counted from, RFC 3339 UTC midnight.
          examples:
            - '2026-01-20T00:00:00Z'
          format: date-time
          type: string
        matricula:
          description: The worker's payroll registration with the employer.
          examples:
            - MATCEN716
          type: string
        numero_contrato:
          description: The rail contract number this obligation belongs to.
          examples:
            - 99999999999AN1
          type: string
        numero_inscricao_empregador:
          description: >-
            The employer identifier itself, as reported to Dataprev: text of up
            to 14 characters.
          examples:
            - '42422253000101'
          type: string
        numero_parcelas:
          description: >-
            How many instalments the cronograma holds from
            competencia_inicio_desconto: the ones E0 minted, or as an accepted
            alteração (M003 §3.2) set them.
          examples:
            - 12
          format: int64
          type: integer
        origem:
          description: >-
            Who averbou the contract: "gateway" if this gateway did (or
            renegotiated a legado one), "importado" if it was averbado elsewhere
            and adopted from the rail afterwards.
          enum:
            - gateway
            - importado
          examples:
            - gateway
          type: string
        parcelas_pagas:
          description: How many competencias have amortized so far.
          examples:
            - 3
          format: int64
          type: integer
        proximo_marco:
          description: The next scheduled-report marker, in UTC. Always null.
          examples:
            - null
          format: date-time
          type:
            - string
            - 'null'
        quitado:
          description: >-
            Whether the obligation is settled: every instalment amortized
            (parcelas_pagas against numero_parcelas), or an accepted
            refinanciamento or origin-side portability exclusion that no
            reversal undid, or an exclusion by refinanciamento or portabilidade
            the M005 follow-up observed at Dataprev. Derived, never a stored
            flag.
          examples:
            - false
          type: boolean
        taxa_mensal:
          description: >-
            The contract's monthly rate (valorTaxaMensal) the balance is
            discounted at, as a PERCENT-per-month decimal string: "1.80" is 1.80
            %/month.
          examples:
            - '1.80'
          type: string
        ultimo_envio_at:
          description: >-
            When this gateway last reported this obligation to the rail, in UTC.
            Null means nothing has been sent yet.
          examples:
            - '2026-08-14T09:12:33Z'
          format: date-time
          type:
            - string
            - 'null'
        valor_parcela:
          description: >-
            The instalment as the schedule stores it, republished verbatim as a
            BRL decimal string.
          examples:
            - '1116.31'
          type: string
        valor_saldo_devedor:
          description: >-
            The balance this gateway reports under M015 while vigente is true;
            once it is false, only a first report never accepted or a final 0.00
            still goes out: at today's Brasília date, the present value of every
            instalment still ahead whose competência has not amortized, each
            valor_parcela (its valores_parcela value once an alteração was
            accepted) / (1 + taxa_mensal)^(days/30), due on
            data_primeiro_desconto's day of month k months on, assuming on-time
            payment. "0.00" once the obligation is quitada.
          examples:
            - '10046.79'
          type: string
        valores_parcela:
          additionalProperties:
            type: string
          description: >-
            The instalment from each competencia key (yyyyMM) on, the
            averbação's included, once an accepted alteração (M003 §3.2) changed
            it; the latest equals valor_parcela. Absent while no alteração was
            accepted.
          examples:
            - '202509': '100.00'
              '202511': '101.00'
          type: object
        vigente:
          description: >-
            Whether the contract is still on the registry, so this gateway keeps
            reporting it under M015. False once it left: a confirmed exclusion,
            an accepted portability exclusion, a refinanciamento or renegociação
            that replaced it and no reversal undid, a refinanciamento of its own
            that was reversed, an exit other than situação 15 the M005 follow-up
            observed, or an exclusion's M005 read. Situação 15 (término de
            vínculo) keeps it true: its debt stands (Manual 017 v1.5 §2.1). A
            settled contract can still read true until it leaves. Derived, never
            a stored flag.
          examples:
            - true
          type: boolean
      required:
        - numero_contrato
        - matricula
        - codigo_inscricao_empregador
        - numero_inscricao_empregador
        - numero_parcelas
        - parcelas_pagas
        - valor_parcela
        - valor_saldo_devedor
        - taxa_mensal
        - data_primeiro_desconto
        - competencia_inicio_desconto
        - origem
        - ultimo_envio_at
        - proximo_marco
        - quitado
        - vigente
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    Upstream:
      additionalProperties: false
      properties:
        code:
          description: The upstream provider's own error code, verbatim.
          examples:
            - E4001
          type: string
        message:
          description: >-
            The upstream provider's own error message, verbatim (bounded, never
            its raw response body).
          examples:
            - account not found at provider
          type: string
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      description: JWT bearer token issued by the identity provider.
      scheme: bearer
      type: http

````

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