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

# Lookup PIX key

> Looks up a PIX key by JSON body value. This deployment's own key registry is read FIRST — a retained BACEN answer can never outrank a local row (DICT 8.4 §1.1) — and only a key with no local row falls through to the retained BACEN answer and then to BACEN DICT. Returns ownerTaxId full and unmasked per BACEN API-DICT. A BACEN refusal such as EntryBlocked (judicial block) is relayed with its own token and HTTP status. A BACEN DICT answer this deployment cannot accept — a problem body whose signature does not verify, an entry whose account participant is not an ISPB, an entry whose key type and value do not form a valid key, or an entry naming a different key than requested — answers 502 with code SPI-1013 and none of that answer's data.



## OpenAPI

````yaml /pt/openapi/v3-current/spi-dict.yaml post /api/v1/dict/keys/lookup
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: >-
      DICT 8.4 section 13.2.3 query monitoring: read the query indicators, block
      or release an end user after a founded suspicion, and read the DICT
      request-limiting token buckets.
    name: Query Monitoring
  - 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/keys/lookup:
    post:
      tags:
        - Keys
      summary: Lookup PIX key
      description: >-
        Looks up a PIX key by JSON body value. This deployment's own key
        registry is read FIRST — a retained BACEN answer can never outrank a
        local row (DICT 8.4 §1.1) — and only a key with no local row falls
        through to the retained BACEN answer and then to BACEN DICT. Returns
        ownerTaxId full and unmasked per BACEN API-DICT. A BACEN refusal such as
        EntryBlocked (judicial block) is relayed with its own token and HTTP
        status. A BACEN DICT answer this deployment cannot accept — a problem
        body whose signature does not verify, an entry whose account participant
        is not an ISPB, an entry whose key type and value do not form a valid
        key, or an entry naming a different key than requested — answers 502
        with code SPI-1013 and none of that answer's data.
      operationId: lookupKey
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LookupKeyRequest'
              description: >-
                PIX key value to resolve — against this deployment's own key
                registry first, then a retained BACEN answer, then BACEN DICT
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PIXKeyLookupResponse'
                description: >-
                  Resolved PIX key details, including ownerTaxId full and
                  unmasked per BACEN API-DICT
          description: OK
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Bad Request
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Not Found
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unprocessable Entity
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Too Many Requests
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Internal Server Error
        '502':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Bad Gateway
        '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:
    LookupKeyRequest:
      additionalProperties: false
      properties:
        endToEndId:
          description: >-
            EndToEndId the pacs.008 this query feeds will carry
            (E{ISPB}{YYYYMMDD}{HHMM}{uniqueID}, 32 characters). Shaped exactly
            as the pacs.008 XSD types EndToEndIdType — the participant segment
            admits [0-9A-Z] and the unique tail is case-sensitive and may be
            lower-case — so this surface never refuses an id the wire it feeds
            accepts. Required: it is BACEN's own rate-limiting key for the
            query, and the id under which the ficha this query spends is
            credited back once the payment order is sent.
          examples:
            - E1234567820260220123456789012350
          pattern: ^E[0-9A-Z]{8}[0-9]{12}[a-zA-Z0-9]{11}$
          type: string
        includeStatistics:
          description: >-
            Opt into BACEN antifraud statistics blocks
            (ownerStatistics/keyStatistics) inline on the answer. Default false
            — trades one fewer round-trip on the payment path for a heavier
            response; has no effect when the key resolves from this deployment's
            own records, and forces a fresh directory query for a key that does
            not.
          examples:
            - false
          type: boolean
        keyValue:
          description: >-
            PIX key value to look up, in its canonical format for the key type.
            At most 77 characters, the ceiling BACEN publishes on a DICT key.
          examples:
            - '12345678901'
          maxLength: 77
          minLength: 1
          type: string
        payerId:
          description: >-
            CPF (11 digits) or CNPJ (14 alphanumeric characters, any case:
            upper-cased on receipt) of the end user originating this query — the
            payer of the payment order it feeds. Required: BACEN bills the query
            to this user's own request-limiting bucket, and every query by the
            same end user must carry the same identifier.
          examples:
            - '12345678901'
          pattern: ^([0-9]{11}|[A-Za-z0-9]{12}[0-9]{2})$
          type: string
        requestingParticipant:
          description: >-
            Who is asking, when it is not this deployment: an indirect
            participant's own ISPB (DICT 8.4 R079). Must be a participant this
            deployment is authorized to query for — its own direct, or an active
            indirect it sponsors; any other value is rejected, because BACEN
            bills the query and its antiscan debit to whoever this names. Omit
            and this deployment's own ISPB is sent.
          examples:
            - '12345678'
          pattern: ^[A-Za-z0-9]{8}$
          type: string
      required:
        - keyValue
        - payerId
        - endToEndId
      type: object
    PIXKeyLookupResponse:
      additionalProperties: false
      properties:
        accountNumber:
          description: Account number (1..20 digits), omitted for a tuple-less key.
          examples:
            - '9988776'
          type: string
        accountType:
          description: >-
            BACEN account type (CACC, SVGS, TRAN, SLRY, OTHR), omitted for a
            tuple-less key.
          enum:
            - CACC
            - SVGS
            - TRAN
            - SLRY
            - OTHR
          examples:
            - CACC
          type: string
        bacen:
          $ref: '#/components/schemas/BACENEnvelopeResponse'
          description: >-
            BACEN's own operational envelope for its most recent interaction on
            this key. A foreign key resolved live off BACEN carries the envelope
            of that very call. Omitted only when no BACEN interaction has ever
            landed on this key.
        branch:
          description: Account branch (1..4 digits), omitted when unset.
          examples:
            - '0001'
          type: string
        createdAt:
          description: >-
            Key creation timestamp, RFC 3339 (UTC) — OUR row's local timestamp,
            not BACEN's; see creationDate for BACEN's own binding-creation
            instant.
          examples:
            - '2025-03-07T14:30:00Z'
          type: string
        creationDate:
          description: >-
            BACEN's own creation instant for this key/account/owner binding:
            decoded from this lookup's answer for a foreign key, or stamped from
            createEntry's answer for a key this deployment registered. Omitted
            when BACEN never published one.
          examples:
            - '2020-01-15T00:00:00Z'
          format: date-time
          type: string
        id:
          description: Unique PIX key identifier (UUID) assigned by the service.
          examples:
            - 550e8400-e29b-41d4-a716-446655440000
          type: string
        keyOwnershipDate:
          description: >-
            Instant from which the owner has held uninterrupted possession of
            this key per BACEN; may differ from creationDate after a
            portability. Same availability as creationDate.
          examples:
            - '2020-01-15T00:00:00Z'
          format: date-time
          type: string
        keyStatistics:
          $ref: '#/components/schemas/StatisticsBlocksResponse'
          description: >-
            Key-scoped BACEN antifraud statistics (verbatim), present only when
            the request opted in via includeStatistics and the lookup resolved
            live off BACEN DICT.
        keyType:
          description: 'PIX key type: CPF, CNPJ, EMAIL, PHONE, or EVP (random key).'
          examples:
            - CPF
          type: string
        keyValue:
          description: PIX key value in its canonical format for the key type.
          examples:
            - '12345678901'
          type: string
        openClaimCreationDate:
          description: >-
            When the key's current open ownership/portability claim started, per
            BACEN; omitted when no claim is open at answer time or the lookup
            did not resolve live off BACEN DICT.
          examples:
            - '2026-08-01T00:00:00Z'
          format: date-time
          type: string
        openingDate:
          description: Account opening date, RFC 3339, omitted for a tuple-less key.
          examples:
            - '2020-01-15T00:00:00Z'
          format: date-time
          type: string
        ownerName:
          description: Full legal name of the key owner.
          examples:
            - João Silva
          type: string
        ownerStatistics:
          $ref: '#/components/schemas/StatisticsBlocksResponse'
          description: >-
            Owner-scoped BACEN antifraud statistics (verbatim), present only
            when the request opted in via includeStatistics and the lookup
            resolved live off BACEN DICT.
        ownerTaxId:
          description: >-
            Owner tax identifier: 11 digits for a CPF, 14 alphanumeric
            characters for a CNPJ (IN RFB 2.229/2024); returned full and
            unmasked per BACEN API-DICT.
          examples:
            - '12345678901'
          type: string
        ownerTradeName:
          description: Owner trade name (legal-entity owners), omitted when unset.
          examples:
            - Silva ME
          type: string
        ownerType:
          description: >-
            BACEN's own Person discriminator for the owner, as the DICT
            published it — never the value a registration declared. Same
            availability as creationDate.
          enum:
            - NATURAL_PERSON
            - LEGAL_PERSON
          examples:
            - NATURAL_PERSON
          type: string
        participantISPB:
          description: >-
            Owning participant ISPB, the BACEN institution identifier (8 digits
            or uppercase letters).
          examples:
            - '12345678'
          type: string
        status:
          description: 'Key lifecycle status: ACTIVE or PENDING_CLAIM.'
          examples:
            - ACTIVE
          type: string
        updatedAt:
          description: Timestamp of the last update to the key, RFC 3339 (UTC).
          examples:
            - '2025-03-07T14:30:00Z'
          type: string
      required:
        - id
        - keyType
        - keyValue
        - ownerName
        - ownerTaxId
        - participantISPB
        - status
        - createdAt
        - updatedAt
      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
    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
    StatisticsBlocksResponse:
      additionalProperties: false
      properties:
        entries:
          $ref: '#/components/schemas/StatisticsBlocksResponseEntriesStruct'
          description: Entry statistics
        fraudMarkers:
          $ref: '#/components/schemas/StatisticsBlocksResponseFraudMarkersStruct'
          description: Fraud-marker statistics
        infractionReports:
          $ref: '#/components/schemas/StatisticsBlocksResponseInfractionReportsStruct'
          description: Infraction-report statistics
        spi:
          $ref: '#/components/schemas/StatisticsBlocksResponseSpiStruct'
          description: SPI settlement statistics
      required:
        - spi
        - fraudMarkers
        - infractionReports
        - entries
      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
    StatisticsBlocksResponseEntriesStruct:
      additionalProperties: false
      properties:
        distinctAccounts:
          $ref: '#/components/schemas/StatWindowResponse'
          description: >-
            Key-scope: distinct accounts (windowed; omitted in owner block). A
            pointer so omitempty drops it for owner-scope (a plain struct would
            still serialize {})
        registeredAccounts:
          description: 'Owner-scope: registered accounts (scalar; omitted in key block)'
          examples:
            - '0'
          type: string
        watermark:
          description: Entries block watermark (RFC 3339)
          examples:
            - '2023-01-01T10:00:00.000Z'
          type: string
      required:
        - watermark
      type: object
    StatisticsBlocksResponseFraudMarkersStruct:
      additionalProperties: false
      properties:
        applicationFrauds:
          $ref: '#/components/schemas/StatWindowResponse'
        distinctFraudReporters:
          $ref: '#/components/schemas/StatWindowResponse'
        muleAccounts:
          $ref: '#/components/schemas/StatWindowResponse'
        otherFrauds:
          $ref: '#/components/schemas/StatWindowResponse'
        scammerAccounts:
          $ref: '#/components/schemas/StatWindowResponse'
        totalFraudTransactionAmount:
          $ref: '#/components/schemas/StatWindowResponse'
          description: Total fraud transaction amount (BACEN wire value, verbatim)
        unknownFrauds:
          $ref: '#/components/schemas/StatWindowResponse'
        watermark:
          description: FraudMarkers block watermark (RFC 3339)
          examples:
            - '2023-01-01T10:00:00.000Z'
          type: string
      required:
        - watermark
        - applicationFrauds
        - muleAccounts
        - scammerAccounts
        - otherFrauds
        - unknownFrauds
        - totalFraudTransactionAmount
        - distinctFraudReporters
      type: object
    StatisticsBlocksResponseInfractionReportsStruct:
      additionalProperties: false
      properties:
        openReports:
          description: Open infraction reports (scalar, not windowed)
          examples:
            - '0'
          type: string
        openReportsDistinctReporters:
          description: Distinct reporters of open reports (scalar, not windowed)
          examples:
            - '0'
          type: string
        rejectedReports:
          $ref: '#/components/schemas/StatWindowResponse'
        watermark:
          description: InfractionReports block watermark (RFC 3339)
          examples:
            - '2023-01-01T10:00:00.000Z'
          type: string
      required:
        - watermark
        - openReports
        - openReportsDistinctReporters
        - rejectedReports
      type: object
    StatisticsBlocksResponseSpiStruct:
      additionalProperties: false
      properties:
        settlements:
          $ref: '#/components/schemas/StatWindowResponse'
          description: SPI settlement counters
        watermark:
          description: SPI block watermark (RFC 3339)
          examples:
            - '2023-01-01T10:00:00.000Z'
          type: string
      required:
        - watermark
        - settlements
      type: object
    StatWindowResponse:
      additionalProperties: false
      properties:
        d90:
          description: Last 89 days including today (BACEN wire value, verbatim)
          examples:
            - '0'
          type: string
        m12:
          description: >-
            Last 12 calendar months excluding current month (BACEN wire value,
            verbatim)
          examples:
            - '0'
          type: string
        m60:
          description: >-
            Last 60 calendar months excluding current month (BACEN wire value,
            verbatim)
          examples:
            - '0'
          type: string
      required:
        - d90
        - m12
        - m60
      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.