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

# Unblock a frozen DICT poll feed

> Clears a DICT poll feed's durable blocked marker so the next tick runs. A frozen feed discovers nothing and does not thaw on restart, and every walk refuses to start while its marker is set — without this route the only recovery is a hand-written UPDATE on the watermark table of a regulated deployment. When the feed froze on an unusable window watermark (local corruption, not a BACEN anomaly), a replacement instant may be supplied in the same call, because nothing else ever rewrites that value. When the feed instead froze holding a BACEN entry it could not store, clearing the marker moves nothing else: the walk resumes at the same position and freezes again after the same tolerance unless that entry has become storable, and the response says so — on the two refund walks, whose position is BACEN's own opaque cursor, that is the only outcome available today. The funds-recovery notification feed is deliberately NOT unblockable here: its block means notifications are gone from BACEN's seven-day window for good, and lifting it is an attestation taken on the funds-recovery intake route, where the missing ids are supplied. Every call is recorded in the audit trail under the caller's identity, including the old and new watermark values.



## OpenAPI

````yaml /es/openapi/v3-current/spi-dict.yaml post /api/v1/dict/discovery-feeds/{feed}/unblock
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://spi.sandbox.lerian.net
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: reconciliation runs, claim deadline processing,
      and orphaned-key cleanup.
    name: Internal
paths:
  /api/v1/dict/discovery-feeds/{feed}/unblock:
    post:
      tags:
        - Operations
      summary: Unblock a frozen DICT poll feed
      description: >-
        Clears a DICT poll feed's durable blocked marker so the next tick runs.
        A frozen feed discovers nothing and does not thaw on restart, and every
        walk refuses to start while its marker is set — without this route the
        only recovery is a hand-written UPDATE on the watermark table of a
        regulated deployment. When the feed froze on an unusable window
        watermark (local corruption, not a BACEN anomaly), a replacement instant
        may be supplied in the same call, because nothing else ever rewrites
        that value. When the feed instead froze holding a BACEN entry it could
        not store, clearing the marker moves nothing else: the walk resumes at
        the same position and freezes again after the same tolerance unless that
        entry has become storable, and the response says so — on the two refund
        walks, whose position is BACEN's own opaque cursor, that is the only
        outcome available today. The funds-recovery notification feed is
        deliberately NOT unblockable here: its block means notifications are
        gone from BACEN's seven-day window for good, and lifting it is an
        attestation taken on the funds-recovery intake route, where the missing
        ids are supplied. Every call is recorded in the audit trail under the
        caller's identity, including the old and new watermark values.
      operationId: unblockDICTDiscoveryFeed
      parameters:
        - description: Feed name exactly as GET /api/v1/dict/discovery-feeds reports it.
          in: path
          name: feed
          required: true
          schema:
            description: Feed name exactly as GET /api/v1/dict/discovery-feeds reports it.
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnblockDICTDiscoveryFeedRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnblockDICTDiscoveryFeedResponse'
          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
      security:
        - BearerAuth: []
components:
  schemas:
    UnblockDICTDiscoveryFeedRequest:
      additionalProperties: false
      properties:
        allowSkipForward:
          description: >-
            Required to be true when resetModifiedAfter is LATER than the window
            the feed currently holds. Such a reset abandons every record BACEN
            would have served in between, so it must be asked for rather than
            typed by accident. Irrelevant when the persisted watermark cannot be
            parsed at all, which is the corruption this route exists to repair.
          type: boolean
        resetModifiedAfter:
          description: >-
            Optional replacement for the feed's ModifiedAfter window watermark,
            as an RFC 3339 instant in the past. Supply it ONLY when the feed
            froze on an unusable watermark: it moves a regulatory discovery
            window by hand, so anything BACEN would have served between the
            feed's real position and this instant is not walked. Refused for a
            feed whose continuation is BACEN's own opaque cursor rather than a
            timestamp, and refused for a feed that is not actually frozen.
          format: date-time
          type: string
      type: object
    UnblockDICTDiscoveryFeedResponse:
      additionalProperties: false
      properties:
        clearedReason:
          description: >-
            The closed-vocabulary reason the feed had been frozen with; absent
            when it was already running.
          examples:
            - invalid_watermark
          type: string
        feed:
          description: The feed that was unblocked.
          examples:
            - dict_infraction_discovery
          type: string
        previousWindow:
          description: >-
            The window watermark this request replaced, verbatim — including an
            unparseable value, which is the very condition that froze the feed.
            Absent when no reset was requested.
          type: string
        restoredWindow:
          description: >-
            The window watermark now in force. Absent when no reset was
            requested.
          examples:
            - '2026-08-10T00:00:00Z'
          type: string
        resumeWarning:
          description: >-
            Present when clearing the marker does not by itself resolve what
            froze the feed — a hold on a BACEN entry this deployment could not
            store, or, on the fraud-marker inventory sweep, a document whose
            markers the domain refuses or that BACEN will not serve at all. The
            feed resumes at the SAME position it froze on and freezes again
            after the same tolerance unless that condition has changed, and the
            sentence names the exit that actually exists for THIS feed: the
            per-record write-off for a feed held on a record it can name, the
            window correction in this same call for the sweep, whose held
            subject is a document and so is never listed as a record. Absent
            when a window correction moved the position in the same call.
          type: string
        rotationRestarted:
          description: >-
            True when the reset also discarded an open sweep rotation, which
            would otherwise have applied the corrected window to only the tail
            of the cycle in progress.
          type: boolean
        skipWarning:
          description: >-
            Present only on a reset: states that the interval jumped over is not
            walked.
          type: string
        wasBlocked:
          description: >-
            False when the feed was already running — the call is then a no-op
            on the marker, still audited under the caller's identity.
          examples:
            - true
          type: boolean
        watermarkReset:
          description: True when this request replaced the feed's window watermark.
          examples:
            - false
          type: boolean
      required:
        - feed
        - wasBlocked
        - watermarkReset
      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
    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

````