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

# Create LDL settlement transfer (LDL0004/0006/0008/0011/0014)

> Commands one of the five STR settlement transfers of the Liquidação Multilateral de Câmaras family, chosen by messageType: LDL0004 settles this participant's DEBIT net position for a cycle (Reservas Bancárias to the câmara's Conta de Liquidação), LDL0006 returns funds transferred in error quoting the original STR control number, LDL0008 funds the settlement of asset events and emissions, LDL0011 moves the câmara's current account into its settlement account debiting a named branch and account, and LDL0014 funds a deposit at the câmara. The client declares the total, its own control number, and the code-specific detail — the câmara control numbers and the per-participant breakdown reach the wire VERBATIM because they originate on the SILOC leg this rail never receives, so inventing one would forge another system's identifier. The platform SERVER-DERIVES the wire ISPBs (this participant and the câmara) and the movement date; none is client-supplied. A detail field the declared messageType does not carry is refused rather than dropped, and a control number already spent on the same messageType is refused as a conflict. The command is persisted idempotently and its signed frame enqueued for STR dispatch in the same transaction. This means dispatch was accepted, not BACEN settlement confirmation; the outcome arrives asynchronously on the code's R1 leg. Idempotent — replaying the same X-Idempotency key with the same body returns the cached response. Lerian SPB EMITS the settlement-command fact and routes settlement; the LDL cycle belongs to the câmara and the accounting position to the client's ledger — it holds neither, and never reconciles the breakdown against the declared total.



## OpenAPI

````yaml /pt/openapi/v3-current/spb.yaml post /v1/str/operations/ldl-settlements
openapi: 3.1.0
info:
  contact:
    email: contact@lerian.studio
    name: Lerian Studio
    url: https://lerian.studio
  description: >-
    OpenAPI 3.1 surface for Lerian SPB, the direct integration between the
    institution and the Brazilian Payment System (SPB) over the National
    Financial System Network (RSFN). It covers the Reserve Transfer System
    (STR): message registry and capability catalog, operation lifecycle (bank
    transfers, IBS repasses, liquidity transfers, returns and cancellations),
    reserve-account and schedule queries, alçada governance, SME and LDL
    operations, inbound quarantine triage, reconciliation, and event delivery.
  license:
    name: Lerian Studio General License
  title: Lerian SPB API
  version: 1.0.0
servers:
  - url: https://spb.sandbox.lerian.net
security: []
tags:
  - description: Immutable audit-record trails for STR operations and lifecycle events.
    name: Audit
  - description: >-
      STR capability catalog describing supported message types and their
      constraints.
    name: Capabilities
  - description: >-
      ICP-Brasil certificate inventory with hot-reloadable rotation and
      activation.
    name: Certificates
  - description: >-
      STR compulsory-movement (RCO) family: the movements BACEN orders on a
      participant's reserve account, their answers and the periods they belong
      to.
    name: Compulsory
  - description: >-
      Maker-checker approval queue for emissions parked above their alçada band:
      list pending, sign (approve), and deny.
    name: EmissionApprovals
  - description: Webhook event-delivery records with retry control for failed dispatches.
    name: EventDeliveries
  - description: Operation event catalog enumerating the emitted domain event types.
    name: Events
  - description: >-
      Inbound GEN-family notice log (GEN0001 connectivity echo, GEN0004
      transmission error, GEN0005 administrative notice).
    name: GenNotices
  - description: >-
      SPB alçada governance config: value-band table + per-message-type
      signature requirements, hot-reloaded at runtime.
    name: Governance
  - description: >-
      Read raw STR message status: list messages and read a single message by
      NUOp.
    name: Messages
  - description: Aggregated operational summaries and metrics across STR operations.
    name: OperationalIntelligence
  - description: >-
      STR operation lifecycle for bank transfers and IBS repasses, including
      returns and cancellations.
    name: Operations
  - description: >-
      Service readiness state covering startup self-probes and dependency
      health.
    name: Readiness
  - description: Reconciliation cases and the actions that resolve operation discrepancies.
    name: Reconciliation
  - description: >-
      Redesconto do Banco Central: collateralised intraday and one-business-day
      BCB lending against Selic-registered federal securities. One create door
      derives the nine RDC commands from four operator-facing kinds (contract,
      payment, conversion, cancellation), plus the two consultas over
      eligible-security prices and open positions. An accepted rediscount is not
      necessarily a settled one — Selic may hold the request for want of
      securities, and that middle state is reported as its own.
    name: Rediscounts
  - description: >-
      STR Relatórios suite: synchronous, date-ranged aggregate reports
      (movimento financeiro, transações rejeitadas, volumetria) over Lerian
      SPB's own transmission record.
    name: Reports
  - description: >-
      STR0013 reserve-account balance and STR0014 statement (extrato,
      message-mode) queries and their async results.
    name: ReserveQueries
  - description: >-
      GEN0019 participant responsável roster: full-replacement updates announced
      to BACEN.
    name: Responsibles
  - description: STR operating-window schedule governing when operations may be sent.
    name: Schedule
  - description: >-
      STR0001 single-party schedule queries (consulta de horários do STR) and
      their async STR0001R1 grid results.
    name: ScheduleQueries
  - description: >-
      STR lançamentos (SLB) family: the charges BACEN raises against this
      participant, the payments that settle them, payments to BACEN it never
      demanded, and the entry consultas over them.
    name: SLB
  - description: >-
      Reads over an IEME's conta correspondente a moeda eletrônica (CCME):
      SME0003 statement (extrato) queries and their async SME0003R1 results,
      plus the log of SME0001R2/SME0002R2/SME0004R2 movement advices the STR
      delivered about movements this rail did not command.
    name: SMEQueries
  - description: Runtime SPB configuration settings for the STR integration.
    name: Settings
  - description: Webhook endpoint registration and management for event delivery.
    name: Webhooks
  - description: >-
      Flow (mandatory order): certificate → readiness → connectivity-test →
      submit. Activate a certificate, confirm the rail reports ready, pass a
      connectivity test, then submit an operation. Each step is its own
      resource; a submit must not be attempted before readiness passes.
    name: onboarding
  - description: >-
      Flow (mandatory order): parent operation SETTLED → return/cancel. A return
      or cancellation is a sub-resource of a settled parent operation; the
      {operationId}/{endToEndID} path segment enforces the parent structurally.
    name: lifecycle
paths:
  /v1/str/operations/ldl-settlements:
    post:
      tags:
        - Operations
      summary: Create LDL settlement transfer (LDL0004/0006/0008/0011/0014)
      description: >-
        Commands one of the five STR settlement transfers of the Liquidação
        Multilateral de Câmaras family, chosen by messageType: LDL0004 settles
        this participant's DEBIT net position for a cycle (Reservas Bancárias to
        the câmara's Conta de Liquidação), LDL0006 returns funds transferred in
        error quoting the original STR control number, LDL0008 funds the
        settlement of asset events and emissions, LDL0011 moves the câmara's
        current account into its settlement account debiting a named branch and
        account, and LDL0014 funds a deposit at the câmara. The client declares
        the total, its own control number, and the code-specific detail — the
        câmara control numbers and the per-participant breakdown reach the wire
        VERBATIM because they originate on the SILOC leg this rail never
        receives, so inventing one would forge another system's identifier. The
        platform SERVER-DERIVES the wire ISPBs (this participant and the câmara)
        and the movement date; none is client-supplied. A detail field the
        declared messageType does not carry is refused rather than dropped, and
        a control number already spent on the same messageType is refused as a
        conflict. The command is persisted idempotently and its signed frame
        enqueued for STR dispatch in the same transaction. This means dispatch
        was accepted, not BACEN settlement confirmation; the outcome arrives
        asynchronously on the code's R1 leg. Idempotent — replaying the same
        X-Idempotency key with the same body returns the cached response. Lerian
        SPB EMITS the settlement-command fact and routes settlement; the LDL
        cycle belongs to the câmara and the accounting position to the client's
        ledger — it holds neither, and never reconciles the breakdown against
        the declared total.
      operationId: createLDLSettlement
      parameters:
        - description: Idempotency key. Required on every mutation.
          in: header
          name: X-Idempotency
          required: true
          schema:
            description: Idempotency key. Required on every mutation.
            type: string
        - description: Idempotency key TTL in seconds.
          in: header
          name: X-TTL
          schema:
            description: Idempotency key TTL in seconds.
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLDLSettlementRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LDLSettlementAcceptedResponseWire'
          description: Created
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Bad Request
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Forbidden
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Conflict
        '413':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Request Entity Too Large
        '415':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unsupported Media Type
        '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
        '504':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Gateway Timeout
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Error
      security:
        - BearerAuth: []
components:
  schemas:
    CreateLDLSettlementRequest:
      additionalProperties: false
      properties:
        amount:
          description: >-
            The declared total as an unsigned, non-zero decimal-reais string (at
            most two fractional digits). Forwarded verbatim into VlrLanc —
            Lerian SPB performs NO arithmetic.
          examples:
            - '1250.00'
          pattern: ^([1-9][0-9]{0,16}(\.[0-9]{1,2})?|0\.(0[1-9]|[1-9][0-9]?))$
          type: string
        detail:
          $ref: '#/components/schemas/LDLSettlementDetailRequest'
          description: >-
            The code-specific fields: control numbers, the debited account pair,
            the credited counterparty of a return, and the breakdown group.
        messageType:
          description: >-
            Which STR settlement transfer to command: LDL0004 settles a debit
            net position, LDL0006 returns funds transferred in error, LDL0008
            funds events and emissions, LDL0011 moves the câmara current account
            into its settlement account, LDL0014 funds a deposit. It decides
            which detail fields are required and which are refused.
          enum:
            - LDL0004
            - LDL0006
            - LDL0008
            - LDL0011
            - LDL0014
          examples:
            - LDL0004
          type: string
        traceabilityId:
          description: >-
            This participant's OWN control number for the entry (official
            ControleIF, 1-20 characters), carried verbatim as the command's
            NumCtrlIF. Reusing one already spent on the same messageType is
            refused as a conflict.
          examples:
            - LDLSETT0000000000001
          maxLength: 20
          minLength: 1
          type: string
      required:
        - messageType
        - amount
        - traceabilityId
        - detail
      type: object
    LDLSettlementAcceptedResponseWire:
      additionalProperties: false
      properties:
        amountRaw:
          type: string
        commandId:
          type: string
        correlationId:
          description: >-
            Request-scoped correlation identifier echoing X-Request-ID, for
            pivoting from response to trace.
          examples:
            - req-7a3f9c2e
          type: string
        messageType:
          type: string
        movementDate:
          type: string
        numCtrlIF:
          type: string
        outboundNuOp:
          pattern: ^[0-9A-Z]{8}[0-9]{15}$
          type: string
        status:
          type: string
      required:
        - correlationId
        - status
        - commandId
        - messageType
        - outboundNuOp
        - numCtrlIF
        - amountRaw
        - movementDate
      type: object
    Detail:
      additionalProperties: false
      properties:
        code:
          description: >-
            Stable, machine-readable domain error code scoped to the emitting
            service (format: <SERVICE>-NNNN).
          type: string
        correlationId:
          description: Request-scoped correlation identifier echoing X-Request-ID.
          examples:
            - req-7a3f9c2e
          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.
      required:
        - correlationId
      type: object
    LDLSettlementDetailRequest:
      additionalProperties: false
      properties:
        agDebtd:
          description: >-
            Branch of the debited câmara current account. Required by LDL0011
            only.
          examples:
            - '0001'
          type: string
        codProdt:
          description: >-
            Product code of the entry being returned. Optional on LDL0006;
            carried by no other code.
          examples:
            - OT
          type: string
        ctDebtd:
          description: >-
            Number of the debited câmara current account. Required by LDL0011
            only.
          examples:
            - '000000123456'
          type: string
        entries:
          description: >-
            Per-participant breakdown of the declared total. Required (at least
            one) by LDL0004/LDL0008/LDL0014, optional on LDL0006, and refused on
            LDL0011. Lerian SPB never sums it against the total: no BACEN rule
            requires that reconciliation and doing arithmetic on a declared
            money total is position-keeping.
          items:
            $ref: '#/components/schemas/LDLSettlementEntryRequest'
          type:
            - array
            - 'null'
        ispbIFCredtd:
          description: >-
            ISPB of the institution being credited by the return. Required by
            LDL0006 only; this participant is always the debited side and its
            own ISPB is server-derived.
          examples:
            - '87654321'
          pattern: ^[0-9A-Z]{8}$
          type: string
        numCtrlLDLOr:
          description: >-
            The câmara's control number for the cycle being settled, received
            over the SILOC leg (LDL0001 / LDL0007 / LDL0013). Required by
            LDL0004, LDL0008, LDL0011 and LDL0014; carried by no other code.
          examples:
            - LDL000000000000001
          type: string
        numCtrlSTROr:
          description: >-
            Control number of the ORIGINAL STR entry being returned. Required by
            LDL0006 only — it is BACEN-issued and echoed verbatim, never minted
            here.
          examples:
            - '20260919000000000001'
          type: string
      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
    LDLSettlementEntryRequest:
      additionalProperties: false
      properties:
        amount:
          description: >-
            This entry's magnitude as an unsigned, non-zero decimal-reais string
            (at most two fractional digits). Forwarded verbatim — Lerian SPB
            performs NO arithmetic and never reconciles the entries against the
            declared total.
          examples:
            - '600.10'
          pattern: ^([1-9][0-9]{0,16}(\.[0-9]{1,2})?|0\.(0[1-9]|[1-9][0-9]?))$
          type: string
        cnpjNLiqdant:
          description: CNPJ of the non-liquidating participant this entry belongs to.
          examples:
            - '12345678000195'
          pattern: ^[0-9A-Z]{12}[0-9]{2}$
          type: string
        hist:
          description: Free-text history for the entry. Carried by LDL0006 only.
          examples:
            - Devolucao de credito
          type: string
        identdPartCamr:
          description: >-
            The câmara's own 8-character identifier for the participant, when
            the câmara issued one.
          examples:
            - PART0001
          pattern: ^[0-9A-Z]{8}$
          type: string
        numCtrlActeLDLOr:
          description: >-
            Control number of the câmara's acceptance, received on LDL0013
            (RLDL0003). Carried by LDL0014 only.
          examples:
            - ACT0000000000000001
          type: string
        numCtrlReqIFOr:
          description: >-
            Control number of the originating IF request, received on LDL0013
            (RLDL0004). Carried by LDL0014 only.
          examples:
            - REQ0000000000000001
          type: string
        numPgtoLDL:
          description: The câmara's payment number. Carried by LDL0006 and LDL0008.
          examples:
            - '000001'
          type: string
        tpMovtc:
          description: Asset-movement type. Carried by LDL0006 only.
          examples:
            - '1'
          type: string
        tpPgtoLDL:
          description: >-
            LDL payment type. Mandatory on LDL0008, optional on LDL0006, carried
            by no other code.
          examples:
            - '1'
          type: string
      required:
        - cnpjNLiqdant
        - amount
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      description: JWT bearer token issued by the identity provider.
      scheme: bearer
      type: http

````