> ## 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.

# Averbate a portability whose origin exclusion already ran

> Performs averbar-portabilidade-trabalhador (Manual 008 §5.3): the PROPONENTE institution's averbação of a portability, whose origin-side exclusion must already have run. The origin exclusion is a SEPARATE command at POST /v1/consignado/contracts/{numero_contrato}/portabilidade/exclusao; Dataprev refuses this averbação with rule PT when the exclusion has not run and with rule PW when the portability is already closed (Manual 008 §5.3), and either refusal frees the contract number.

dataExclusaoOrigem is OPTIONAL and NOT sent to Dataprev. When the client supplies it, it is the origin exclusion date the client itself tracks, echoed here so the gateway can refuse an averbação whose 20-CALENDAR-day window (Manual 008 §4) has already passed before the rail is ever called. No calendar is consulted: the window is explicitly "corridos". When absent, only that pre-rail window check is skipped and the rail judges the order and the window.

X-Idempotency is required as this surface's mandatory transport replay key. A retry under the SAME key is answered from the stored rail answer instead of re-submitting to the rail. A refusal the gateway gives on its own is not stored, so a corrected body under the same key is processed. A 500, 503 or 504 that may have reached Dataprev holds the key for its 7-day TTL: that answer carries X-Idempotency-Fenced: true, and a resend under the key is refused with 422 IDEMPOTENCY_OUTCOME_UNRECORDED. A 503 whose only Dataprev code is OZ (service suspended) does not hold the key. The contract number is claimed before the call, so a resend under a new key never submits again while that outcome is open: it answers 409 while the first call may still be running, then 503 OUTCOME_UNKNOWN until the gateway settles it by reading the contract on Dataprev (Manual 005). A contract Dataprev registered is then recorded as an acceptance is; one Dataprev holds no record of frees the number.

An accepted averbação is recorded before this answer as a contract of this gateway waiting for its documentation (GET /v1/consignado/contracts/{numero_contrato}/averbacao reads attachment_pending), at the competência Dataprev echoed, together with its saldo devedor (Manual 015) obligation; its contract_id is its numeroContrato. A refusal Dataprev publishes for this averbação leaves the number free. A contract number this tenant already holds, including one this route recorded, is refused 409 CONTRACT_ALREADY_REGISTERED before the rail; a number only an averbação Dataprev refused held is free, unless that averbação's contract_id is the same number. The optional booking object books the contract: its liberated_amount is valorEmprestimo less iof_amount (the origin payoffs plus the troco), and its origins name every origin contract the purchase pays off, one entry when there is one, with its share of valorPago. A booking the lender would refuse answers 422 with the averbação's codes before the rail. Document the contract through POST /v1/consignado/contracts/{numero_contrato}/ccb-attachment exactly as an averbação: booked, with the signed CCB, the evidence pack and signature_evidence_ref, and once Dataprev accepts the documentation the Lerian lender receives consignado.contract.registered carrying portability_in once Dataprev's status record for this portability (Manual 008 §5.4) shows exactly the origin contracts booked (each with its bank, its number and its share of valorPago, and the latest exclusion instant); without booking, the signed CCB alone and no lender fact.



## OpenAPI

````yaml /pt/openapi/v3-current/consignado.yaml post /v1/consignado/portabilidade/{numero_unico}/averbacao
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/portabilidade/{numero_unico}/averbacao:
    post:
      tags:
        - Consignado Rail Commands
      summary: Averbate a portability whose origin exclusion already ran
      description: >-
        Performs averbar-portabilidade-trabalhador (Manual 008 §5.3): the
        PROPONENTE institution's averbação of a portability, whose origin-side
        exclusion must already have run. The origin exclusion is a SEPARATE
        command at POST
        /v1/consignado/contracts/{numero_contrato}/portabilidade/exclusao;
        Dataprev refuses this averbação with rule PT when the exclusion has not
        run and with rule PW when the portability is already closed (Manual 008
        §5.3), and either refusal frees the contract number.


        dataExclusaoOrigem is OPTIONAL and NOT sent to Dataprev. When the client
        supplies it, it is the origin exclusion date the client itself tracks,
        echoed here so the gateway can refuse an averbação whose 20-CALENDAR-day
        window (Manual 008 §4) has already passed before the rail is ever
        called. No calendar is consulted: the window is explicitly "corridos".
        When absent, only that pre-rail window check is skipped and the rail
        judges the order and the window.


        X-Idempotency is required as this surface's mandatory transport replay
        key. A retry under the SAME key is answered from the stored rail answer
        instead of re-submitting to the rail. A refusal the gateway gives on its
        own is not stored, so a corrected body under the same key is processed.
        A 500, 503 or 504 that may have reached Dataprev holds the key for its
        7-day TTL: that answer carries X-Idempotency-Fenced: true, and a resend
        under the key is refused with 422 IDEMPOTENCY_OUTCOME_UNRECORDED. A 503
        whose only Dataprev code is OZ (service suspended) does not hold the
        key. The contract number is claimed before the call, so a resend under a
        new key never submits again while that outcome is open: it answers 409
        while the first call may still be running, then 503 OUTCOME_UNKNOWN
        until the gateway settles it by reading the contract on Dataprev (Manual
        005). A contract Dataprev registered is then recorded as an acceptance
        is; one Dataprev holds no record of frees the number.


        An accepted averbação is recorded before this answer as a contract of
        this gateway waiting for its documentation (GET
        /v1/consignado/contracts/{numero_contrato}/averbacao reads
        attachment_pending), at the competência Dataprev echoed, together with
        its saldo devedor (Manual 015) obligation; its contract_id is its
        numeroContrato. A refusal Dataprev publishes for this averbação leaves
        the number free. A contract number this tenant already holds, including
        one this route recorded, is refused 409 CONTRACT_ALREADY_REGISTERED
        before the rail; a number only an averbação Dataprev refused held is
        free, unless that averbação's contract_id is the same number. The
        optional booking object books the contract: its liberated_amount is
        valorEmprestimo less iof_amount (the origin payoffs plus the troco), and
        its origins name every origin contract the purchase pays off, one entry
        when there is one, with its share of valorPago. A booking the lender
        would refuse answers 422 with the averbação's codes before the rail.
        Document the contract through POST
        /v1/consignado/contracts/{numero_contrato}/ccb-attachment exactly as an
        averbação: booked, with the signed CCB, the evidence pack and
        signature_evidence_ref, and once Dataprev accepts the documentation the
        Lerian lender receives consignado.contract.registered carrying
        portability_in once Dataprev's status record for this portability
        (Manual 008 §5.4) shows exactly the origin contracts booked (each with
        its bank, its number and its share of valorPago, and the latest
        exclusion instant); without booking, the signed CCB alone and no lender
        fact.
      operationId: averbarConsignadoPortabilidade
      parameters:
        - description: >-
            The portability's NSU (Manual 008 v1.14 publishes 21 algarismos,
            which overflows int64/float64 — carried and validated as a digit
            string only).
          in: path
          name: numero_unico
          required: true
          schema:
            description: >-
              The portability's NSU (Manual 008 v1.14 publishes 21 algarismos,
              which overflows int64/float64 — carried and validated as a digit
              string only).
            examples:
              - '100000000000000000001'
            maxLength: 21
            minLength: 1
            pattern: ^[0-9]{1,21}$
            type: string
        - description: Required transport replay key, scoped by authenticated tenant.
          in: header
          name: X-Idempotency
          required: true
          schema:
            description: Required transport replay key, scoped by authenticated tenant.
            examples:
              - idem-portabilidade-averbacao-2026-01-21-0001
            maxLength: 128
            minLength: 1
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PortabilidadeAverbacaoRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortabilidadeAverbacaoResponseBody'
          description: OK
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: >-
            CONTRACT_ALREADY_REGISTERED means this tenant already holds the
            contract number: nothing was sent to Dataprev, and it is definitive.
            A 409 carrying CLT-0007 means the first call under this contract
            number may still be running: retry later.
            DATAPREV_CREDENTIAL_REQUIRED means this tenant has no Dataprev
            credential in custody, so the gateway cannot act for it on the rail
            at all; it is definitive until the credential is provisioned, and
            retrying before that never succeeds. DATAPREV_CREDENTIAL_REVOKED
            means the tenant's credentials were revoked; it holds until a
            complete upload (PUT /v1/credentials/dataprev with the certificate
            and the OAuth client together) opens a new custody.
            DATAPREV_CREDENTIAL_REJECTED means Dataprev refused its OAuth client
            credentials, so correct them in custody before retrying.
        '413':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Request Entity Too Large
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: >-
            The request cannot be processed as sent. IDEMPOTENCY_KEY_REUSE means
            the X-Idempotency key is spent on a different request: send a new
            key. IDEMPOTENCY_OUTCOME_UNRECORDED means a resend under a key whose
            earlier outcome is unrecorded. PORTABILIDADE_WINDOW_EXPIRED means
            dataExclusaoOrigem is more than 20 calendar days old.
            DECLARED_DATES_OUT_OF_ORDER means the declared dates break an order
            the booking requires (see dataInicioContrato and
            dataPrimeiroDesconto); correct the dates and resend.
            BOOKING_FIELD_INVALID means the lender cannot read a booking field
            (see loan_product_version, margin_snapshot, numeroContrato).
            DECLARED_TERMS_INCONSISTENT means the declared amounts or rates
            contradict each other (see valorEmprestimo and valorTaxaMensal);
            correct the terms. MARGIN_SNAPSHOT_INCONSISTENT means
            margin_snapshot does not hold valorParcela; read the margin again or
            re-price. CONTRACT_NOT_BOOKABLE means the lender cannot book this
            contract at all (see numeroParcelas and expected_disbursement_date);
            send it without the booking block. RATE_OUTSIDE_PRODUCT_RANGE means
            valorTaxaMensal times 12 falls outside the annual rate range of the
            loan_product_version the Lender published.
            VERSION_ADMITS_NO_PESSOA_FISICA means the Lender published the
            loan_product_version as admitting no pessoaFisica.
            LOAN_PRODUCT_VERSION_UNKNOWN means the tenant has Lender versions
            and this gateway has not received this loan_product_version from the
            Lender; a version just created may still be on its way (resend
            later), one created before this gateway was linked to the tenant
            never arrives (create a new version in the Lender). A tenant without
            the Lender is not checked. Each detail names the rule; the booking
            codes apply only with the booking block, and the rail was not
            called.
        '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: >-
            OUTCOME_UNKNOWN means the first call may have reached Dataprev and
            the gateway is settling it by reading Dataprev: resending under any
            key is safe and never submits again until it settles.
            DATAPREV_UNAVAILABLE means Dataprev could not take the request, and
            a 503 with no code means the gateway could not serve it right now.
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Error
      security:
        - BearerAuth: []
components:
  schemas:
    PortabilidadeAverbacaoRequest:
      additionalProperties: false
      properties:
        booking:
          $ref: '#/components/schemas/PortabilidadeBooking'
          description: >-
            OPTIONAL. The block the Lerian lender books the bought contract
            with, never sent to Dataprev: all of its members or the object
            omitted. Omitted, the contract is rail-only and no lender fact
            follows.
        cnpjOperador:
          description: OPTIONAL correspondent/cooperado CNPJ.
          examples:
            - '12345678000199'
          maxLength: 14
          type: string
        codigoInscricaoEmpregador:
          description: 1 CNPJ, 2 CPF.
          examples:
            - '1'
          pattern: ^[12]$
          type: string
        competenciaInicioDesconto:
          description: OPTIONAL. yyyyMM.
          examples:
            - '202602'
          pattern: ^[0-9]{6}$
          type: string
        cpfTrabalhador:
          description: Worker CPF, 11 digits.
          examples:
            - '99999999999'
          pattern: ^[0-9]{11}$
          type: string
        dataExclusaoOrigem:
          description: >-
            OPTIONAL. Origin exclusion date the client tracks, NEVER sent to
            Dataprev. When present, the gateway's own 20-calendar-day pre-rail
            refusal is judged against it. When absent, only that check is
            skipped and Dataprev judges the order (rule PT: the origin exclusion
            must have run).
          examples:
            - '2026-01-01T00:00:00Z'
          format: date-time
          type: string
        dataFimContrato:
          description: Contract end date.
          examples:
            - '2031-01-01T00:00:00Z'
          format: date-time
          type: string
        dataInicioContrato:
          description: Contract start date.
          examples:
            - '2026-01-01T00:00:00Z'
          format: date-time
          type: string
        dataPrimeiroDesconto:
          description: First payroll discount date.
          examples:
            - '2026-02-01T00:00:00Z'
          format: date-time
          type: string
        matricula:
          description: Worker registration number at the employer.
          examples:
            - 99999999999-A
          maxLength: 30
          minLength: 1
          type: string
        nomeTrabalhador:
          description: >-
            Worker's full name. Manual 008 §5.3.1 publishes 90 characters; the
            mirrored Swagger publishes maxLength 100 for the same field — the
            wider bound is accepted here so a value the rail itself would honour
            is never rejected first.
          examples:
            - Trabalhador 99999999999
          maxLength: 100
          minLength: 1
          type: string
        numeroContrato:
          description: >-
            Contract number being averbado, minted by the CLIENT: 2 to 15
            letters or digits, without spaces, accents or symbols (Manual 008
            §5.3.1 and its note [2]; the Swagger's maxLength 20 is not
            followed).
          examples:
            - '199971600000'
          maxLength: 15
          minLength: 2
          pattern: ^[A-Za-z0-9]+$
          type: string
        numeroInscricaoEmpregador:
          description: Employer inscription number.
          examples:
            - '99999999999881'
          maxLength: 15
          minLength: 1
          type: string
        numeroParcelas:
          description: Number of instalments.
          examples:
            - 48
          format: int64
          maximum: 999
          minimum: 1
          type: integer
        numeroProposta:
          description: >-
            OPTIONAL. Manual-only field of undocumented referent — see the
            operation description.
          examples:
            - 7K9M2P4R6T8V3W5X2Y4Z
          maxLength: 20
          type: string
        percVerbaRescisoriaGarantia:
          description: OPTIONAL severance-pay percentage pledged as collateral.
          examples:
            - '15.00'
          maxLength: 6
          pattern: ^[0-9]+(\.[0-9]{1,2})?$
          type: string
        temGarantias:
          description: >-
            Whether this averbação pledges FGTS collateral. True with none of
            the three collateral values below is refused 422 before the rail is
            called (Dataprev rule FI).
          examples:
            - false
          type: boolean
        valorCETAnual:
          description: Annual total effective cost in percent.
          examples:
            - '11.00'
          maxLength: 10
          pattern: ^[0-9]+(\.[0-9]{1,2})?$
          type: string
        valorCETMensal:
          description: Monthly total effective cost in percent.
          examples:
            - '0.90'
          maxLength: 10
          pattern: ^[0-9]+(\.[0-9]{1,2})?$
          type: string
        valorEmprestimo:
          description: Principal plus financed costs as an exact decimal string.
          examples:
            - '2160.00'
          maxLength: 13
          pattern: ^[0-9]+(\.[0-9]{1,2})?$
          type: string
        valorMultaRescisoriaGarantiaFgts:
          description: OPTIONAL rescission-penalty amount pledged as collateral.
          examples:
            - '300.00'
          maxLength: 13
          pattern: ^[0-9]+(\.[0-9]{1,2})?$
          type: string
        valorPago:
          description: >-
            Settlement amount for the ORIGINAL contract(s) being ported — a
            field unique to this averbação.
          examples:
            - '2000.00'
          maxLength: 13
          pattern: ^[0-9]+(\.[0-9]{1,2})?$
          type: string
        valorParcela:
          description: Instalment amount as an exact decimal string.
          examples:
            - '180.00'
          maxLength: 13
          pattern: ^[0-9]+(\.[0-9]{1,2})?$
          type: string
        valorSaldoDisponivelGarantiaFgts:
          description: OPTIONAL consignable FGTS balance pledged as collateral.
          examples:
            - '600.00'
          maxLength: 13
          pattern: ^[0-9]+(\.[0-9]{1,2})?$
          type: string
        valorTaxaAnual:
          description: Annual interest rate in percent.
          examples:
            - '10.00'
          maxLength: 10
          pattern: ^[0-9]+(\.[0-9]{1,2})?$
          type: string
        valorTaxaMensal:
          description: Monthly interest rate in percent.
          examples:
            - '0.80'
          maxLength: 10
          pattern: ^[0-9]+(\.[0-9]{1,2})?$
          type: string
      required:
        - numeroContrato
        - cpfTrabalhador
        - matricula
        - nomeTrabalhador
        - codigoInscricaoEmpregador
        - numeroInscricaoEmpregador
        - dataPrimeiroDesconto
        - dataInicioContrato
        - dataFimContrato
        - numeroParcelas
        - valorParcela
        - valorEmprestimo
        - valorPago
        - valorTaxaAnual
        - valorTaxaMensal
        - valorCETAnual
        - valorCETMensal
        - temGarantias
      type: object
    PortabilidadeAverbacaoResponseBody:
      additionalProperties: false
      properties:
        codigoSucesso:
          description: >-
            Bounded rail outcome code, relayed verbatim. Free-form provider text
            is never returned.
          examples:
            - BD
          maxLength: 32
          pattern: ^[A-Za-z0-9_-]*$
          type: string
        competenciaInicioDesconto:
          description: First payroll-discount competência (yyyyMM) echoed by Dataprev.
          examples:
            - 202602
          format: int64
          type: integer
        mensagem:
          description: Rail message, relayed verbatim.
          examples:
            - Averbacao realizada com sucesso
          type: string
        numeroContrato:
          description: Contract number echoed by Dataprev.
          examples:
            - '199971600000'
          type: string
        numeroUnico:
          description: The portability identity addressed by this averbação.
          examples:
            - '100000000000000000001'
          type: string
        submittedAt:
          description: UTC instant the gateway submitted this averbação.
          examples:
            - '2026-01-15T00:00:00Z'
          format: date-time
          type: string
      required:
        - numeroUnico
        - submittedAt
        - codigoSucesso
        - numeroContrato
        - competenciaInicioDesconto
      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
    PortabilidadeBooking:
      additionalProperties: false
      properties:
        expected_disbursement_date:
          description: >-
            Expected disbursement date, YYYY-MM-DD: not before
            dataInicioContrato and before dataPrimeiroDesconto.
          examples:
            - '2026-01-05'
          maxLength: 10
          type: string
        formalization_deadline:
          description: >-
            UTC instant by which the worker signs the new contract's CCB; the
            documentation refuses a later signing instant.
          examples:
            - '2026-01-20T12:00:00Z'
          format: date-time
          type: string
        iof_amount:
          description: >-
            The IOF charged, in BRL as a decimal with at most two places; below
            valorEmprestimo.
          examples:
            - '0.00'
          maxLength: 64
          type: string
        loan_product_version:
          description: >-
            The Lender loan product version whose terms govern the contract, as
            a UUID. A version this gateway has not received from the Lender is
            refused 422 LOAN_PRODUCT_VERSION_UNKNOWN (see loan_product_version
            on the averbação booking).
          examples:
            - 0f9d1a7c-3b52-4c8e-9a1d-2f6b8c4e5d70
          maxLength: 128
          type: string
        margin_snapshot:
          $ref: '#/components/schemas/AverbacaoMarginSnapshot'
        origins:
          description: >-
            The origin contracts this purchase pays off and what each got,
            adding up to valorPago, in the order the lender lists them: one
            entry for a single origin contract, one per contract otherwise.
          items:
            $ref: '#/components/schemas/PortabilityInOrigin'
          minItems: 1
          type:
            - array
            - 'null'
      required:
        - iof_amount
        - expected_disbursement_date
        - loan_product_version
        - formalization_deadline
        - margin_snapshot
        - origins
      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
    AverbacaoMarginSnapshot:
      additionalProperties: false
      properties:
        as_of:
          description: UTC instant at which the margin snapshot was observed.
          examples:
            - '2026-07-30T11:55:00Z'
          format: date-time
          type: string
        available_margin:
          description: >-
            Available payroll margin observed for this booking, as a
            non-negative decimal string with at most two places; anything else
            is refused 422 BOOKING_FIELD_INVALID by the averbação route before
            the rail is called. It must hold installment_amount and not exceed
            remuneracao_disponivel, else 422 MARGIN_SNAPSHOT_INCONSISTENT.
          examples:
            - '1000.00'
          maxLength: 64
          type: string
        remuneracao_disponivel:
          description: >-
            Available remuneration observed with the margin, as a non-negative
            decimal string with at most two places; anything else is refused 422
            BOOKING_FIELD_INVALID by the averbação route before the rail is
            called. It must be greater than zero, else 422
            MARGIN_SNAPSHOT_INCONSISTENT.
          examples:
            - '5000.00'
          maxLength: 64
          type: string
      required:
        - available_margin
        - remuneracao_disponivel
        - as_of
      type: object
    PortabilityInOrigin:
      additionalProperties: false
      properties:
        external_operation_ref:
          description: >-
            The origin contract's number at that bank, 2 to 15 letters or digits
            (Manual 008 §4.1.1), as E5 reports it in
            contratosExcluidos[*].numeroContratoExcluido.
          examples:
            - ORIGEM0001
          maxLength: 15
          type: string
        origin_institution:
          description: >-
            The origin bank's COMPE code as three digits, leading zeros kept, as
            E5 reports it in contratosExcluidos[*].codigoOrigem.codigo.
          examples:
            - '001'
          maxLength: 3
          type: string
        transferred_principal:
          description: >-
            What the buyer paid this origin contract off with, in BRL as a
            positive decimal with at most two places. The entries add up to
            valorPago.
          examples:
            - '1500.00'
          maxLength: 64
          type: string
      required:
        - origin_institution
        - external_operation_ref
        - transferred_principal
      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.