> ## 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 SME electronic-money movement

> Prerequisite: the rail must be ready before a submit — an active certificate (see rotateCertificate, activateCertificate), a READY readiness report (see getReadiness), and a passing connectivity test (see createConnectivityTest). Accepts an SME movement of an IEME's conta correspondente a moeda eletrônica (CCME) through the operation-centric API: kind deposit funds the CCME from Reservas Bancárias / Conta de Liquidação (the platform DERIVES wire code SME0001), withdrawal recalls funds out of the CCME (SME0002), and return gives back an entry received in error quoting its original STR control number (SME0004) — the platform never composes the wire code, and the issuer ISPB is resolved server-side. On a deposit, the counterparty ISPB reaches the wire as the ISPBIEME only for an IEME that does NOT participate in the STR (RSME0001): participation is read from the participant directory the STR itself broadcasts, and a deposit naming an institution the STR announced as a participant is refused as a validation error before it becomes a durable movement — while a deposit into the deployment's own CCME carries no ISPBIEME at all. Ignorance does not block: when the directory holds no answer for that ISPB the movement proceeds, and BACEN remains the authoritative validator of the condition. Persists a PENDING movement projection BEFORE the frame is sent and returns the operation id, the PENDING status, and the derived wire code. This means dispatch was accepted, not BACEN settlement confirmation; the settlement arrives asynchronously on the inbound STR R-leg. Every accepted movement durably records the authenticated operator that commanded it. Lerian SPB EMITS the movement fact and projects the settlement verbatim; it never computes or holds a CCME position. Idempotent — replaying the same X-Idempotency key with the same body returns the cached response.



## OpenAPI

````yaml /en/openapi/v3-current/spb.yaml post /v1/str/operations/sme-transfers
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: >-
      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: >-
      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: >-
      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/sme-transfers:
    post:
      tags:
        - Operations
        - onboarding
      summary: Create SME electronic-money movement
      description: >-
        Prerequisite: the rail must be ready before a submit — an active
        certificate (see rotateCertificate, activateCertificate), a READY
        readiness report (see getReadiness), and a passing connectivity test
        (see createConnectivityTest). Accepts an SME movement of an IEME's conta
        correspondente a moeda eletrônica (CCME) through the operation-centric
        API: kind deposit funds the CCME from Reservas Bancárias / Conta de
        Liquidação (the platform DERIVES wire code SME0001), withdrawal recalls
        funds out of the CCME (SME0002), and return gives back an entry received
        in error quoting its original STR control number (SME0004) — the
        platform never composes the wire code, and the issuer ISPB is resolved
        server-side. On a deposit, the counterparty ISPB reaches the wire as the
        ISPBIEME only for an IEME that does NOT participate in the STR
        (RSME0001): participation is read from the participant directory the STR
        itself broadcasts, and a deposit naming an institution the STR announced
        as a participant is refused as a validation error before it becomes a
        durable movement — while a deposit into the deployment's own CCME
        carries no ISPBIEME at all. Ignorance does not block: when the directory
        holds no answer for that ISPB the movement proceeds, and BACEN remains
        the authoritative validator of the condition. Persists a PENDING
        movement projection BEFORE the frame is sent and returns the operation
        id, the PENDING status, and the derived wire code. This means dispatch
        was accepted, not BACEN settlement confirmation; the settlement arrives
        asynchronously on the inbound STR R-leg. Every accepted movement durably
        records the authenticated operator that commanded it. Lerian SPB EMITS
        the movement fact and projects the settlement verbatim; it never
        computes or holds a CCME position. Idempotent — replaying the same
        X-Idempotency key with the same body returns the cached response.
      operationId: createSMETransferOperation
      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/CreateSMETransferRequest'
        required: true
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SMETransferAcceptedResponse'
          description: Accepted
          links:
            prerequisite:
              description: >-
                Onboarding prerequisite: the rail readiness reported by
                getReadiness must be READY before a submit is accepted.
              operationId: getReadiness
        '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:
    CreateSMETransferRequest:
      additionalProperties: false
      properties:
        amount:
          description: >-
            Movement amount as a decimal-reais string, forwarded verbatim into
            the SME submit — Lerian SPB performs NO arithmetic on it. Canonical
            form only: exactly two decimal places and no leading integer zeros —
            the single spelling the durable column stores; anything else is
            refused at the door with 422.
          examples:
            - '1500.25'
          pattern: ^(0|[1-9][0-9]*)\.[0-9]{2}$
          type: string
        counterpartyISPB:
          description: >-
            The other party's ISPB. On a deposit it is the OPTIONAL ISPBIEME
            whose CCME is credited (empty is the own-CCME deposit); on a return
            it is the REQUIRED credited IEME being paid back. A withdrawal names
            its credited FI inside creditedAccount instead, so supplying one
            there is refused.
          examples:
            - '00038166'
          pattern: ^[0-9A-Z]{8}$
          type: string
        creditedAccount:
          $ref: '#/components/schemas/SMECreditedAccountRequest'
          description: >-
            Withdrawal-only credited Reservas Bancárias account (all four
            children required when the group is present). Absent is the
            own-account withdrawal. Supplying it on a deposit or return is
            refused.
        description:
          description: >-
            Return-only free-text history (Hist). SME0001 and SME0002 declare no
            such element, so supplying it there is refused.
          examples:
            - devolucao lancamento indevido
          type: string
        kind:
          description: >-
            Operator-facing movement kind. deposit funds an IEME's conta
            correspondente a moeda eletrônica (CCME) from Reservas Bancárias /
            Conta de Liquidação (wire SME0001); withdrawal recalls funds out of
            the CCME (SME0002); return gives back an entry received in error
            (SME0004).
          enum:
            - deposit
            - withdrawal
            - return
          examples:
            - deposit
          type: string
        originalControlNumber:
          description: >-
            Return-only: the BACEN STR control number (NumCtrlSTROr) of the
            entry this return reverses. Required on a return; refused on a
            deposit or withdrawal.
          examples:
            - '20260619000001'
          type: string
      required:
        - kind
        - amount
      type: object
    SMETransferAcceptedResponse:
      additionalProperties: false
      properties:
        correlationId:
          description: >-
            Request-scoped correlation identifier echoing X-Request-ID, for
            pivoting from response to trace.
          examples:
            - req-7a3f9c2e
          type: string
        operationId:
          description: >-
            Server-assigned operation UUID identifying the accepted SME
            movement.
          examples:
            - 7c8b3a2e-9f1d-4a55-9b8e-1e1234567890
          format: uuid
          type: string
        status:
          description: >-
            Projection lifecycle status; PENDING on accept (awaiting the STR
            R-leg settlement confirmation).
          enum:
            - PENDING
            - SETTLED
            - REJECTED
          examples:
            - PENDING
          type: string
        wireCode:
          description: >-
            SME wire code derived server-side from the kind: deposit=SME0001,
            withdrawal=SME0002, return=SME0004.
          enum:
            - SME0001
            - SME0002
            - SME0004
          examples:
            - SME0001
          type: string
      required:
        - operationId
        - status
        - wireCode
        - correlationId
      type: object
    Detail:
      additionalProperties: false
      properties:
        code:
          description: >-
            Stable, machine-readable domain error code scoped to the emitting
            service (format: <SERVICE>-NNNN).
          examples:
            - SPB-0001
          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
    SMECreditedAccountRequest:
      additionalProperties: false
      properties:
        agCredtd:
          description: Credited agency (agência) number.
          examples:
            - '0001'
          type: string
        cnpjCliCredtd:
          description: CNPJ of the credited client.
          examples:
            - '12345678000199'
          type: string
        ctCredtd:
          description: Credited account number.
          examples:
            - '123456'
          type: string
        ispbIFCredtd:
          description: >-
            ISPB of the credited FI, the 8-character BACEN institution
            identifier.
          examples:
            - '00038166'
          pattern: ^[0-9A-Z]{8}$
          type: string
      required:
        - ispbIFCredtd
        - agCredtd
        - ctCredtd
        - cnpjCliCredtd
      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

````