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

# Get a subscription's delivery health

> Rolls one subscription's delivery record into a single non-secret view: outcome counts over the hub's window and over the last 24 hours, dead-lettered and poison-event counts, the auto-disable verdict, the success rate and the consumer lag.

It answers the question none of the other subscription reads can: whether the events this tenant subscribed to are ACTUALLY ARRIVING. Listing a subscription proves it is registered and enabled; only this shows whether the endpoint behind it has been accepting deliveries.

'auto_disabled' and 'success_rate' are NULLABLE and null is not the zero value of either. A null 'auto_disabled' means the hub holds no endpoint-health row yet, which is not the same fact as false ("checked, and healthy"). A null 'success_rate' means no delivery attempt has reached a terminal outcome yet, which is not the same fact as 0.0 ("every attempt failed"). A client that reads either null as its zero value reports a healthy endpoint as broken, or a broken one as fine.

'disabled_reason', 'last_success_at' and 'last_failure_at' are null when there is nothing to report, and the key is always present.

'status' and 'verification_state' are FREE strings carried through from the hub, not a closed vocabulary this gateway pins. The hub may add a value, and a client should render an unrecognized one by its identifier rather than refuse the response.

This is a FORWARD, not a local read: the gateway owns no subscription storage. The hub answers an unknown subscription and another tenant's subscription with the SAME 404, publishing no existence oracle, and that 404 reaches the caller unchanged. This gateway does not reinterpret it, because splitting it into "no such subscription" and "not yours" would state something the hub deliberately refused to state.

The tenant is derived from the validated identity and is never read from the request.



## OpenAPI

````yaml /en/openapi/v3-current/consignado.yaml get /v1/subscriptions/{id}/health
openapi: 3.1.0
info:
  contact:
    email: contact@lerian.studio
    name: Lerian Studio
    url: https://lerian.studio
  description: >-
    OpenAPI 3.1 surface for Lerian Consignado — Dataprev. The API covers tenant
    credentials and rail configuration, worker margin, loan auctions and bids,
    contract registration and lifecycle, disbursement confirmation, portability,
    refinancing, renegotiation, FGTS guarantees, reconciliation, funds,
    assignments, usage, throughput, and event subscriptions. Secret material is
    written to the tenant secret store and is never returned by any operation.
  license:
    name: Lerian Studio General License
  title: Lerian Consignado API
  version: v1.0.0
servers:
  - url: https://br-consignado-gw.sandbox.lerian.net
security:
  - BearerAuth: []
tags:
  - description: >-
      Per-tenant Dataprev credential custody and public rail configuration
      (upload, status, rotation, revoke, requester code, and worker portal base
      URL)
    name: Credentials
  - description: >-
      Tenant-scoped consignado gateway usage: priced billable-unit aggregation
      per competência
    name: Consignado Usage
  - description: >-
      Per-tenant streaming-hub subscription control-plane (list, create, get,
      rotate, revoke, and test delivery)
    name: Subscriptions
  - description: >-
      Dataprev payroll-rail surface: FGTS balance and authorization reads, the
      FGTS guarantee execution, contract suspension, reactivation and term
      changes, the rail's own contract documents, and the on-demand reads of
      leilão solicitações, escriturações, repasses and employment terminations
    name: Consignado Rail
  - description: >-
      Synchronous rail command surface: the operations a bancarizador without
      the lender drives over HTTP. Each shares its command implementation with
      the equivalent lender event trigger.
    name: Consignado Rail Commands
  - description: >-
      Gateway-owned disbursement confirmation: a client bank recording money it
      has ALREADY paid to a worker. It crosses no government boundary and
      proxies no Dataprev operation.
    name: Consignado Disbursement
  - description: >-
      Per-tenant self-service outbound Dataprev rail throughput: read and set
      this tenant's own requests-per-second, including a deliberate pause at
      zero
    name: Consignado Throughput
paths:
  /v1/subscriptions/{id}/health:
    get:
      tags:
        - Subscriptions
      summary: Get a subscription's delivery health
      description: >-
        Rolls one subscription's delivery record into a single non-secret view:
        outcome counts over the hub's window and over the last 24 hours,
        dead-lettered and poison-event counts, the auto-disable verdict, the
        success rate and the consumer lag.


        It answers the question none of the other subscription reads can:
        whether the events this tenant subscribed to are ACTUALLY ARRIVING.
        Listing a subscription proves it is registered and enabled; only this
        shows whether the endpoint behind it has been accepting deliveries.


        'auto_disabled' and 'success_rate' are NULLABLE and null is not the zero
        value of either. A null 'auto_disabled' means the hub holds no
        endpoint-health row yet, which is not the same fact as false ("checked,
        and healthy"). A null 'success_rate' means no delivery attempt has
        reached a terminal outcome yet, which is not the same fact as 0.0
        ("every attempt failed"). A client that reads either null as its zero
        value reports a healthy endpoint as broken, or a broken one as fine.


        'disabled_reason', 'last_success_at' and 'last_failure_at' are null when
        there is nothing to report, and the key is always present.


        'status' and 'verification_state' are FREE strings carried through from
        the hub, not a closed vocabulary this gateway pins. The hub may add a
        value, and a client should render an unrecognized one by its identifier
        rather than refuse the response.


        This is a FORWARD, not a local read: the gateway owns no subscription
        storage. The hub answers an unknown subscription and another tenant's
        subscription with the SAME 404, publishing no existence oracle, and that
        404 reaches the caller unchanged. This gateway does not reinterpret it,
        because splitting it into "no such subscription" and "not yours" would
        state something the hub deliberately refused to state.


        The tenant is derived from the validated identity and is never read from
        the request.
      operationId: getSubscriptionHealth
      parameters:
        - description: Bearer token, relayed to the streaming-hub as server-to-server auth.
          in: header
          name: Authorization
          schema:
            description: >-
              Bearer token, relayed to the streaming-hub as server-to-server
              auth.
            examples:
              - >-
                Bearer
                eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJvcHMifQ.signature
            type: string
        - description: Subscription id.
          in: path
          name: id
          required: true
          schema:
            description: Subscription id.
            examples:
              - 0192f1a0-0000-7000-8000-0000000000ff
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionHealth'
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Error
      security:
        - BearerAuth: []
components:
  schemas:
    SubscriptionHealth:
      additionalProperties: false
      properties:
        auto_disabled:
          description: >-
            Endpoint-health auto-disable verdict: null when the hub has no
            health row yet, false when healthy, true when tripped. Null is never
            false.
          examples:
            - false
          type:
            - boolean
            - 'null'
        consumer_lag_ms:
          description: Process consumer lag behind the high watermark, in milliseconds.
          examples:
            - 120
          format: int64
          type: integer
        dead_lettered:
          description: Count of dead-lettered delivery attempts in the window.
          examples:
            - 2
          format: int64
          type: integer
        delivery_outcomes:
          additionalProperties:
            format: int64
            type: integer
          description: >-
            Delivery-attempt outcome counts over the hub's configured window,
            keyed by outcome.
          examples:
            - delivered: 128
              failed: 2
          type: object
        disabled_reason:
          description: >-
            Fixed, secret-free auto-disable verdict token; null when the
            subscription was not auto-disabled.
          examples:
            - consecutive_failures
          type:
            - string
            - 'null'
        dropped_tenant:
          description: Whether any events were dropped or quarantined for this tenant.
          examples:
            - false
          type: boolean
        enabled:
          description: Whether delivery is enabled (manual operator toggle).
          examples:
            - true
          type: boolean
        last_failure_at:
          description: >-
            Instant of the last failed delivery; null when there has never been
            one.
          examples:
            - '2026-01-15T09:29:00Z'
          format: date-time
          type:
            - string
            - 'null'
        last_success_at:
          description: >-
            Instant of the last successful delivery; null when there has never
            been one.
          examples:
            - '2026-01-15T09:30:00Z'
          format: date-time
          type:
            - string
            - 'null'
        poison_events:
          description: Count of quarantined poison events for this tenant.
          examples:
            - 0
          format: int64
          type: integer
        recent_outcomes:
          additionalProperties:
            format: int64
            type: integer
          description: Last-24h delivery-outcome breakdown, keyed by outcome.
          examples:
            - delivered: 40
              failed: 1
          type: object
        status:
          description: >-
            Rolled-up operator status (Healthy, Degraded, Down). A free string,
            not a closed vocabulary.
          examples:
            - Healthy
          type: string
        subscription_id:
          description: The subscription this health view is for.
          examples:
            - 0192f1a0-0000-7000-8000-0000000000ff
          type: string
        success_rate:
          description: >-
            Share of terminal delivery attempts that succeeded, in [0.0, 1.0];
            null when no terminal attempt has happened yet. Null is never zero.
          examples:
            - 0.98
          format: double
          type:
            - number
            - 'null'
        verification_state:
          description: >-
            Position in the destination verification state machine
            (pending_verification, active, degraded, disabled). A free string,
            not a closed vocabulary.
          examples:
            - active
          type: string
      required:
        - subscription_id
        - enabled
        - verification_state
        - status
        - delivery_outcomes
        - dead_lettered
        - poison_events
        - dropped_tenant
        - consumer_lag_ms
        - auto_disabled
        - success_rate
        - recent_outcomes
        - disabled_reason
        - last_success_at
        - last_failure_at
      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

````