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

# Abandon a claim BACEN never registered

> Ends a claim this deployment initiated that BACEN never registered. Such a claim is OPEN with no BACEN id because its createClaim gave up without an answer: every claim verb refuses it with 409, the deadline sweep cannot read it at BACEN, and the claimed key stays taken by it. The claim becomes CANCELLED with resolution NOT_REGISTERED_AT_BACEN, nothing is sent to BACEN, the key is free for a new claim, and dict.claim.cancelled is emitted in the same transaction. It is refused with 409 for a claim that carries a BACEN id (cancel it instead), for a claim that is not OPEN, and while its createClaim is still pending, being sent or waiting for a retry: only an intent that exhausted its retries leaves a claim BACEN will not register. A claim BACEN did register while its answer was lost is not abandonable either: the claimer feed adopts BACEN's id within its next tick, so check GET /api/v1/dict/discovery-feeds for a held or blocked claimer feed before abandoning. It is refused for a caller with no identifiable principal and for a claimer this deployment does not serve, requires a reason, and writes audit rows naming who, which claim and why. Idempotent — re-sending it for an abandoned claim changes nothing and is still audited.



## OpenAPI

````yaml /es/openapi/v3-current/spi-dict.yaml post /api/v1/dict/claims/{claimID}/abandon
openapi: 3.1.0
info:
  contact:
    email: contact@lerian.studio
    name: Lerian Studio
    url: https://lerian.studio
  description: >-
    OpenAPI 3.1 surface for the DICT (Diretório de Identificadores de Contas
    Transacionais) capability of Lerian SPI, the direct integration between the
    institution and the Brazilian Instant Payment System (SPI/Pix). It covers
    the PIX key lifecycle, portability and ownership claims, the MED 2.0 dispute
    surface (infraction reports, refunds, fraud markers, and funds recoveries),
    antifraud statistics, synchronous DICT reports, and the internal operations
    that keep the key directory consistent.
  license:
    name: Lerian Studio General License
  title: Lerian SPI — DICT API
  version: 1.0.0
servers:
  - url: https://api.example.com
    description: >-
      Replace the example host with the URL provided during environment
      onboarding.
security: []
tags:
  - description: 'PIX key lifecycle: register, list, search, lookup, delete, and statistics.'
    name: Keys
  - description: >-
      PIX key portability and ownership claims through their full lifecycle
      (initiate, confirm, reject, cancel, acknowledge, complete).
    name: Claims
  - description: 'DICT infraction reports: list and retrieve.'
    name: Infractions
  - description: 'DICT refund requests: create, list, and retrieve.'
    name: Refunds
  - description: 'PIX fraud markers: create, list, and statistics.'
    name: Fraud Markers
  - description: >-
      Durable MED operation-intent status: the operationId every
      create/lifecycle-transition backlog route returns or references on every
      outcome, queryable independently of the business resource.
    name: Operations
  - description: >-
      Synchronous reports over Lerian SPI's own DICT record: COUNT(*) summaries
      of keys (by type/status) and claims (by type/status + open-past-deadline).
      COUNT-only — DICT holds no money.
    name: Reports
  - description: 'Internal DICT operations: claim deadline processing.'
    name: Internal
  - description: >-
      DICT synchronism checks transported to BACEN for the participant named in
      X-ISPB: sync verification, CID resolution and CID set events, projected
      verbatim.
    name: VSync
paths:
  /api/v1/dict/claims/{claimID}/abandon:
    post:
      tags:
        - Claims
      summary: Abandon a claim BACEN never registered
      description: >-
        Ends a claim this deployment initiated that BACEN never registered. Such
        a claim is OPEN with no BACEN id because its createClaim gave up without
        an answer: every claim verb refuses it with 409, the deadline sweep
        cannot read it at BACEN, and the claimed key stays taken by it. The
        claim becomes CANCELLED with resolution NOT_REGISTERED_AT_BACEN, nothing
        is sent to BACEN, the key is free for a new claim, and
        dict.claim.cancelled is emitted in the same transaction. It is refused
        with 409 for a claim that carries a BACEN id (cancel it instead), for a
        claim that is not OPEN, and while its createClaim is still pending,
        being sent or waiting for a retry: only an intent that exhausted its
        retries leaves a claim BACEN will not register. A claim BACEN did
        register while its answer was lost is not abandonable either: the
        claimer feed adopts BACEN's id within its next tick, so check GET
        /api/v1/dict/discovery-feeds for a held or blocked claimer feed before
        abandoning. It is refused for a caller with no identifiable principal
        and for a claimer this deployment does not serve, requires a reason, and
        writes audit rows naming who, which claim and why. Idempotent —
        re-sending it for an abandoned claim changes nothing and is still
        audited.
      operationId: abandonUnregisteredClaim
      parameters:
        - description: The claim's own id, as the create call answered it.
          in: path
          name: claimID
          required: true
          schema:
            description: The claim's own id, as the create call answered it.
            type: string
        - description: Required key used to prevent replaying the mutation.
          in: header
          name: X-Idempotency
          required: true
          schema:
            description: Required key used to prevent replaying the mutation.
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AbandonUnregisteredClaimRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AbandonUnregisteredClaimResponse'
          description: OK
        '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
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Conflict
        '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
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Error
      security:
        - BearerAuth: []
components:
  schemas:
    AbandonUnregisteredClaimRequest:
      additionalProperties: false
      properties:
        reason:
          description: >-
            Why this claim is being abandoned. It is recorded in the audit trail
            under the caller's identity. Operator prose only — never a tax id, a
            Pix key, an account or a holder name.
          maxLength: 384
          minLength: 8
          type: string
      required:
        - reason
      type: object
    AbandonUnregisteredClaimResponse:
      additionalProperties: false
      properties:
        alreadyAbandoned:
          description: >-
            True when the claim had already been abandoned. The call then
            changed nothing and emitted nothing, and it is still audited under
            the caller's identity — re-sending the same request is safe.
          type: boolean
        claim:
          $ref: '#/components/schemas/ClaimResponse'
          description: >-
            The claim after the call: CANCELLED with resolution
            NOT_REGISTERED_AT_BACEN.
        warning:
          description: States plainly what the abandonment did.
          type: string
      required:
        - claim
        - warning
      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
    ClaimResponse:
      additionalProperties: false
      properties:
        bacen:
          $ref: '#/components/schemas/BACENEnvelopeResponse'
          description: >-
            BACEN's own operational envelope for its most recent interaction on
            this claim; omitted when no BACEN interaction has ever landed on it.
        bacenClaimId:
          description: >-
            The id BACEN itself assigned to this claim on createClaim
            (ExtendedClaim.Id) — the address every BACEN-facing verb and both
            claim-recovery feeds use internally. Read-only, surfaced so an
            operator can correlate a BACEN support case or a DICT-side rejection
            back to this claim. Omitted until BACEN's createClaim response has
            landed: a locally initiated claim whose initiation outbox handler
            has not yet processed BACEN's reply carries no value here yet.
          examples:
            - 550e8400-e29b-41d4-a716-446655440111
          type: string
        cancelReason:
          description: >-
            Matches BACEN's ExtendedClaim.CancelReason vocabulary plus
            COURT_ORDER: the reason the claim was cancelled, once cancelled. On
            a claim we cancel ourselves (our own cancel verb) this is the reason
            our own operator submitted; on a claim discovered or adopted from
            BACEN's directory it is BACEN's own published value, verbatim.
            COURT_ORDER is the one value BACEN does not define at the pinned
            DICT 2.12.1: it is recorded locally on a court-ordered cancellation,
            and that cancellation reaches BACEN carrying USER_REQUESTED until
            the DICT reaches 2.13, which adds the value to ClaimOperationReason
          enum:
            - USER_REQUESTED
            - ACCOUNT_CLOSURE
            - FRAUD
            - DEFAULT_OPERATION
            - RECONCILIATION
            - RFB_VALIDATION
            - PARTICIPANT_EXCLUSION
            - COURT_ORDER
          type: string
        cancelledBy:
          description: >-
            Matches BACEN's ExtendedClaim.CancelledBy vocabulary: the side that
            cancelled the claim, once cancelled. On a claim we cancel ourselves
            this is the side derived from the authenticated caller; on a claim
            discovered or adopted from BACEN's directory it is BACEN's own
            published value, verbatim
          enum:
            - DONOR
            - CLAIMER
          type: string
        claimType:
          description: 'Claim kind: OWNERSHIP or PORTABILITY'
          examples:
            - OWNERSHIP
          type: string
        claimerAccountNumber:
          description: >-
            Number of the account the claimed key would move to
            (ExtendedClaim.ClaimerAccount.AccountNumber). Answered on every
            claim projection, the list included
          examples:
            - '9988776'
          type: string
        claimerAccountType:
          description: >-
            Type of the account the claimed key would move to
            (ExtendedClaim.ClaimerAccount.AccountType). Answered on every claim
            projection, the list included
          enum:
            - CACC
            - SVGS
            - TRAN
            - SLRY
            - OTHR
          examples:
            - CACC
          type: string
        claimerBranch:
          description: >-
            Branch of the account the claimed key would move to
            (ExtendedClaim.ClaimerAccount.Branch); optional at BACEN, so empty
            when the claimer lodged none. Answered on every claim projection,
            the list included
          examples:
            - '0001'
          type: string
        claimerISPB:
          description: >-
            ISPB (8 digits or uppercase letters) of the participant initiating
            the claim
          examples:
            - '12345678'
          type: string
        claimerName:
          description: >-
            Name of the claiming key owner (ExtendedClaim.Claimer.Name).
            Answered on every claim projection, the list included; not carried
            on a claim streaming fact
          examples:
            - João Silva
          type: string
        claimerOpeningDate:
          description: >-
            Opening date of the account the claimed key would move to
            (ExtendedClaim.ClaimerAccount.OpeningDate, RFC 3339 UTC). Answered
            on every claim projection, the list included
          examples:
            - '2020-01-15T00:00:00Z'
          type: string
        claimerTaxId:
          description: >-
            CPF/CNPJ of the claiming key owner
            (ExtendedClaim.Claimer.TaxIdNumber). Answered on every claim
            projection, the list included; not carried on a claim streaming fact
          examples:
            - '11122233300'
          type: string
        claimerTradeName:
          description: >-
            Trade name of the claiming key owner
            (ExtendedClaim.Claimer.TradeName); legal-entity claimers only, empty
            for a natural person. Answered on every claim projection, the list
            included
          examples:
            - Silva ME
          type: string
        claimerType:
          description: >-
            BACEN's Person discriminator for the claiming key owner
            (ExtendedClaim.Claimer.Type). DERIVED from the tax id's length,
            never stored: 11 characters is the CPF branch, 14 the CNPJ branch —
            the same rule BACEN's own oneOf keys on. Empty when the tax id is
            absent or has no branch. Answered on every claim projection, the
            list included
          enum:
            - NATURAL_PERSON
            - LEGAL_PERSON
          examples:
            - NATURAL_PERSON
          type: string
        completionPeriodEnd:
          description: >-
            BACEN's own completion-window end for a possession claim
            (ExtendedClaim.CompletionPeriodEnd, RFC 3339 UTC); BACEN publishes
            it for OWNERSHIP claims only and omits it for PORTABILITY. Also
            omitted whenever BACEN has not published this claim yet.
          examples:
            - '2025-03-21T14:30:00Z'
          type: string
        confirmReason:
          description: >-
            Matches BACEN's ExtendedClaim.ConfirmReason vocabulary: the reason
            the donor confirmed with, once confirmed — unlike resolution this is
            NOT terminal-gated and is never cleared by a later transition. On a
            claim we confirm ourselves (our own respond verb) this is the reason
            our own operator submitted; on a claim discovered or adopted from
            BACEN's directory it is BACEN's own published value, verbatim
          enum:
            - USER_REQUESTED
            - ACCOUNT_CLOSURE
            - FRAUD
            - DEFAULT_OPERATION
            - RECONCILIATION
            - RFB_VALIDATION
            - PARTICIPANT_EXCLUSION
          type: string
        deadline:
          description: >-
            Donor-response deadline (RFC 3339, UTC). For a claim BACEN's own
            record backs (discovered or adopted), this IS BACEN's
            ExtendedClaim.ResolutionPeriodEnd, same value as resolutionPeriodEnd
            below. For a locally-initiated claim, this is always a local
            seven-day-from-initiation estimate that drives the deadline sweep —
            see resolutionPeriodEnd for BACEN's own authoritative value,
            populated once the initiation outbox handler decodes BACEN's
            createClaim response.
          examples:
            - '2025-03-14T14:30:00Z'
          type: string
        donorISPB:
          description: >-
            ISPB (8 digits or uppercase letters) of the current key owner
            (donor). It is the DICT that resolves the donor, not this rail: a
            claim lodged on a key held at another institution — the canonical
            portability case — carries NO donor until BACEN's createClaim
            response names one (ExtendedClaim.DonorParticipant), so this field
            is omitted while the donor is pending. A donor-side claim discovered
            from BACEN's directory always carries it.
          examples:
            - '87654321'
          type: string
        id:
          description: Server-assigned claim UUID
          examples:
            - 550e8400-e29b-41d4-a716-446655440000
          type: string
        keyType:
          description: 'PIX key type: CPF, CNPJ, EMAIL, PHONE, or EVP'
          examples:
            - PHONE
          type: string
        keyValue:
          description: PIX key value under claim
          examples:
            - '+5511999999999'
          type: string
        lastModified:
          description: >-
            BACEN's own last-transition instant for this claim
            (ExtendedClaim.LastModified, RFC 3339 UTC) — the version
            discriminator BACEN publishes, distinct from requestedAt (when WE
            lodged it) and from resolvedAt (when it ended). Present once BACEN's
            own record for this claim exists; omitted before that.
          examples:
            - '2025-03-07T14:30:00Z'
          type: string
        requestedAt:
          description: >-
            Claim initiation timestamp (RFC 3339, UTC); omitted for a donor-side
            claim projected from BACEN, whose ExtendedClaim carries no creation
            time
          examples:
            - '2025-03-07T14:30:00Z'
          type: string
        resolution:
          description: >-
            Terminal resolution reason (e.g. CANCELLED_BY_CLAIMER,
            CANCELLED_BY_CLAIMER_FRAUD, CANCELLED_BY_DONOR,
            CANCELLED_BY_DONOR_FRAUD, DEADLINE_EXPIRED, AUTO_COMPLETED,
            TRANSFER_COMPLETED, NOT_REGISTERED_AT_BACEN); empty until the claim
            resolves — CONFIRMED is not terminal and never sets this field
          examples:
            - ''
          type: string
        resolutionPeriodEnd:
          description: >-
            BACEN's own resolution-window end for this claim
            (ExtendedClaim.ResolutionPeriodEnd, RFC 3339 UTC); present once
            BACEN's own record for this claim exists — discovered, adopted, or a
            locally-initiated claim whose createClaim response the initiation
            outbox handler has processed — omitted before that
          examples:
            - '2025-03-14T14:30:00Z'
          type: string
        resolvedAt:
          description: >-
            Resolution timestamp (RFC 3339, UTC); omitted while the claim is
            unresolved
          examples:
            - ''
          type: string
        status:
          description: >-
            Claim lifecycle state: OPEN, WAITING_RESOLUTION, CONFIRMED,
            CANCELLED, or COMPLETED
          examples:
            - OPEN
          type: string
      required:
        - id
        - claimType
        - keyValue
        - keyType
        - claimerISPB
        - status
        - deadline
      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
    BACENEnvelopeResponse:
      additionalProperties: false
      properties:
        correlationId:
          description: >-
            BACEN's own correlation identifier for its most recent interaction
            on this record — the wire value, distinct from any request-scoped
            echo.
          examples:
            - a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4
          type: string
        lastModified:
          description: >-
            BACEN's own LastModified for this resource (RFC 3339, UTC) — the
            version this response reflects; present only on the MED resources
            (infraction, refund, fraud marker, funds recovery).
          examples:
            - '2026-06-14T12:00:00Z'
          type: string
        responseTime:
          description: >-
            Instant BACEN answered its most recent interaction on this record,
            RFC 3339 (UTC); omitted when BACEN's response carried no parseable
            instant.
          examples:
            - '2026-06-14T12:00:00Z'
          type: string
      required:
        - correlationId
      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.