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

# List the registered rails, their declared properties and their state

> The rail contract, made visible: what each rail declares about itself and its state for the caller's tenant. Listing requires an identified operator holding channels:read, because the listing returns registeredBy, activatedBy and suspendedBy, operator identities: the rail's first registrant and its last activator and suspender.



## OpenAPI

````yaml /pt/openapi/v3-current/jd-courier.yaml get /v1/channels
openapi: 3.1.0
info:
  contact:
    email: support@lerian.studio
    name: Lerian Studio Support
  description: >-
    JD Courier lets several core engines share one JD channel and one ISPB on
    the SPB and Pix rails. Operators use this API to register the engines, keep
    the ownership map that decides which engine each message belongs to,
    activate the rails, re-run the routing of retained messages and reconcile
    what the channel carried. Engines use it to resolve and claim ownership and
    to relay a same-bank payment to the core that owns the payee account; their
    SPB sends and reads go through the Courier's mirror of the vendor's SOAP
    surface, and their Pix calls through its JDPI transit, not through this API.
  license:
    name: Lerian Studio General License
  title: JD Courier API
  version: v1.0.0
servers: []
security:
  - BearerAuth: []
tags:
  - description: >-
      The engine registry: the cores that consume the JD channel through the
      Courier, each with its participant set
    name: Engines
  - description: 'The ownership map: which engine owns each key. Every change is audited.'
    name: ownership
  - description: >-
      The rails: what each declares about itself, its activation and state per
      tenant, and its delivery modes
    name: channels
  - description: >-
      The engines' side of the ownership map: resolution for the on-us gate,
      authoritative and never advisory, the claim of the accounts, charger
      documents and Pix Automático recurrences the engine holds, and the
      declaration of a payment leg it holds.
    name: ownership-query
  - description: >-
      A same-bank Pix or TED between two cores: the Courier asks the map who
      owns the payee account, forwards the body byte for byte to that engine's
      address for the rail, and relays its answer. It stores, retries and posts
      nothing; bodies are not modelled.
    name: cross-core
  - description: >-
      The durable message store: redelivery on demand, without asking the vendor
      again
    name: ledger
  - description: >-
      Count reconciliation per rail: E(m) = C(m) + T(m) + R(m), the sequence
      gaps it saw, and the sends whose return leg never arrived
    name: assurance
  - description: >-
      The SPB send journal: every send, written before it leaves, and the sends
      whose outcome is unknown. A by-hand close records an operator's finding
      and never resends.
    name: send-journal
  - description: >-
      Per-(tenant, channel) state an operator acts on: lifting a durable channel
      halt
    name: channel-leases
  - description: >-
      Messages the Courier holds because no engine could receive them. A routing
      or delivery retention leaves by itself once its cause lifts, or when an
      operator asks for its routing decision to be run again.
    name: retained
paths:
  /v1/channels:
    get:
      tags:
        - channels
      summary: List the registered rails, their declared properties and their state
      description: >-
        The rail contract, made visible: what each rail declares about itself
        and its state for the caller's tenant. Listing requires an identified
        operator holding channels:read, because the listing returns
        registeredBy, activatedBy and suspendedBy, operator identities: the
        rail's first registrant and its last activator and suspender.
      operationId: listChannels
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChannelList'
          description: OK
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Forbidden
        '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
components:
  schemas:
    ChannelList:
      additionalProperties: false
      properties:
        items:
          items:
            $ref: '#/components/schemas/ChannelListItem'
          type: array
      required:
        - items
      type: object
    Detail:
      additionalProperties: true
      properties:
        code:
          description: >-
            Stable, machine-readable domain error code scoped to the emitting
            service (format: <SERVICE>-NNNN).
          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
    ChannelListItem:
      additionalProperties: false
      properties:
        descriptor:
          $ref: '#/components/schemas/ChannelDescriptor'
        state:
          $ref: '#/components/schemas/ChannelState'
      required:
        - descriptor
        - state
      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
    ChannelDescriptor:
      additionalProperties: false
      properties:
        channelId:
          enum:
            - spb
            - pix
          type: string
        consumerTopology:
          enum:
            - SINGLE_WRITER
            - STATELESS
          type: string
        deliveryModes:
          items:
            enum:
              - SINGLE_ENGINE
              - ALL_ENGINES
              - REFUSE
            type: string
          type: array
        durabilityRule:
          enum:
            - PERSIST_BEFORE_DECIDE
            - PERSIST_BEFORE_ACK
          type: string
        financialFamilies:
          items:
            maxLength: 64
            type: string
          type: array
        ingressModel:
          enum:
            - DRAIN_PULL
            - TERMINATED_PUSH
          type: string
        moneyBearingFamilies:
          items:
            maxLength: 64
            type: string
          type: array
        ownershipKinds:
          items:
            type: string
          type: array
        retentionReasons:
          items:
            type: string
          type: array
      required:
        - channelId
        - ingressModel
        - consumerTopology
        - durabilityRule
        - financialFamilies
        - deliveryModes
        - ownershipKinds
        - retentionReasons
      type: object
    ChannelState:
      additionalProperties: false
      properties:
        activation:
          description: >-
            Null when the rail was never activated for the tenant: it carries
            none of its inbound traffic.
          oneOf:
            - $ref: '#/components/schemas/ChannelActivation'
            - type: 'null'
        channelId:
          enum:
            - spb
            - pix
          type: string
        lastReconciliationAt:
          format: date-time
          type:
            - string
            - 'null'
        lease:
          description: >-
            Null on a rail with no single-writer consumer, or before its drain
            first ran.
          oneOf:
            - $ref: '#/components/schemas/ConsumerLease'
            - type: 'null'
        reconciliationRunning:
          type: boolean
      required:
        - channelId
      type: object
    ChannelActivation:
      additionalProperties: false
      properties:
        activatedAt:
          description: When the rail last began carrying inbound traffic.
          format: date-time
          type: string
        activatedBy:
          description: >-
            The operator who last activated or resumed the rail. Absent on an
            activation that predates the rail audit.
          maxLength: 128
          type: string
        channelId:
          enum:
            - spb
            - pix
          type: string
        registeredAt:
          format: date-time
          type: string
        registeredBy:
          description: The operator who first activated the rail for the tenant.
          maxLength: 128
          type: string
        state:
          description: Only an ACTIVE rail carries the tenant's inbound traffic.
          enum:
            - REGISTERED
            - ACTIVE
            - SUSPENDED
          type: string
        suspendReason:
          maxLength: 512
          type: string
        suspendedAt:
          format: date-time
          type: string
        suspendedBy:
          description: >-
            The operator who suspended the rail. Absent when not suspended, or
            suspended before the rail audit.
          maxLength: 128
          type: string
        tenantId:
          description: >-
            The caller's tenant: the validated identity's in multi-tenant, local
            in single-tenant. The identifier an engine's credential path names.
          maxLength: 255
          type: string
      required:
        - tenantId
        - channelId
        - state
        - registeredAt
        - registeredBy
      type: object
    ConsumerLease:
      additionalProperties: false
      properties:
        epoch:
          format: int64
          minimum: 0
          type: integer
        haltReason:
          maxLength: 64
          type:
            - string
            - 'null'
        heartbeatAt:
          description: The holder's last heartbeat.
          format: date-time
          type: string
        held:
          description: >-
            A holder is recorded and its heartbeat is inside the lease TTL
            (SPB_LEASE_TTL_SEC, database clock). False on a stale heartbeat: a
            lease another holder may take over.
          type: boolean
        holderId:
          maxLength: 128
          type:
            - string
            - 'null'
        lastProgressAt:
          description: The drain's last completed read of the vendor queue, empty or not.
          format: date-time
          type:
            - string
            - 'null'
        progressAgeSeconds:
          format: int64
          minimum: 0
          type: integer
        state:
          enum:
            - consuming
            - idle
            - halted_ambiguous
            - awaiting_retry
          type: string
      required:
        - held
        - epoch
        - heartbeatAt
        - state
      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.