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

# Delete a PIX key entry

> Removes a PIX key from the DICT directory and hides the plugin's local row. entryId is the key VALUE, URL-encoded; the body carries accountId.

Two ownership gates run before anything is deleted, and both fail closed. The key must appear in the account's own §8.2.06 directory listing, and §8.2.14 must report it held by this ISPB and account number - a key held by anyone else is 403 PIX-0018, and an ownership check that could not complete refuses with the upstream cause rather than claiming the key is not yours. If DICT reports the key does not exist at all, no delete is sent: a stale local row is hidden so the listing stops advertising it, and with no local row either the call is 403 PIX-0018.

Order matters for recovery. DICT is deleted FIRST, then the local row is soft-deleted (deleted_at is set and the status column is left alone, so nothing marks the row as cancelled). A failure between the two steps leaves the key gone upstream while the local row keeps surfacing in GET /v1/entries with its stale status; re-issuing this same DELETE cleans it up, because the absent-upstream branch above then applies. The DICT deletion itself cannot be undone through this API - register the key again with POST /v1/entries.



## OpenAPI

````yaml /en/openapi/v3-current/pix.yaml delete /v1/entries/{entryId}
openapi: 3.1.0
info:
  description: Brazilian PIX Direct (DICT + SPI) plugin API.
  title: plugin-br-pix-jd
  version: 1.0.0
servers: []
security:
  - BearerAuth: []
paths:
  /v1/entries/{entryId}:
    delete:
      tags:
        - Entries
      summary: Delete a PIX key entry
      description: >-
        Removes a PIX key from the DICT directory and hides the plugin's local
        row. entryId is the key VALUE, URL-encoded; the body carries accountId.


        Two ownership gates run before anything is deleted, and both fail
        closed. The key must appear in the account's own §8.2.06 directory
        listing, and §8.2.14 must report it held by this ISPB and account number
        - a key held by anyone else is 403 PIX-0018, and an ownership check that
        could not complete refuses with the upstream cause rather than claiming
        the key is not yours. If DICT reports the key does not exist at all, no
        delete is sent: a stale local row is hidden so the listing stops
        advertising it, and with no local row either the call is 403 PIX-0018.


        Order matters for recovery. DICT is deleted FIRST, then the local row is
        soft-deleted (deleted_at is set and the status column is left alone, so
        nothing marks the row as cancelled). A failure between the two steps
        leaves the key gone upstream while the local row keeps surfacing in GET
        /v1/entries with its stale status; re-issuing this same DELETE cleans it
        up, because the absent-upstream branch above then applies. The DICT
        deletion itself cannot be undone through this API - register the key
        again with POST /v1/entries.
      operationId: deleteEntry
      parameters:
        - description: The PIX key value (URL-encoded).
          in: path
          name: entryId
          required: true
          schema:
            description: The PIX key value (URL-encoded).
            examples:
              - '11122233300'
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeleteEntryBody'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteEntryResponse'
          description: OK
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unprocessable Entity
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Internal Server Error
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Error
components:
  schemas:
    DeleteEntryBody:
      additionalProperties: false
      properties:
        accountId:
          description: The CRM account id of the key owner.
          examples:
            - acc-123
          type: string
      required:
        - accountId
      type: object
    DeleteEntryResponse:
      additionalProperties: false
      properties:
        key:
          description: The PIX key that was deleted.
          examples:
            - '11122233300'
          type: string
      required:
        - key
      type: object
    Detail:
      additionalProperties: false
      properties:
        code:
          description: >-
            Stable, machine-readable domain error code scoped to the emitting
            service (format: <SERVICE>-NNNN).
          examples:
            - ERR-0001
          type: string
        detail:
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
          examples:
            - Property foo is required but is missing.
          type: string
        errors:
          description: Optional list of individual error details
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
            - array
            - 'null'
        instance:
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        status:
          description: HTTP status code
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: >-
            A short, human-readable summary of the problem type. This value
            should not change between occurrences of the error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: A URI reference to human-readable documentation for the error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
        upstream:
          $ref: '#/components/schemas/Upstream'
          description: >-
            RFC 9457 extension member: the error a proxied third-party provider
            reported. Absent unless the emitting service explicitly surfaced
            one.
      type: object
    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

````