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

# Declare that an engine is in bypass on this rail

> Records that an engine was reconnected directly to the vendor. Activating the bypass itself is a configuration change in the engine; this operation declares the fact to the Courier so it suspends its guarantees explicitly instead of reporting green while blind. With one engine in bypass, declaring a second on the same (tenant, channel) returns 409 JDC-0301 — the database's partial unique index decides it. Declaring the same engine again keeps the one active row: its declaredAt becomes the earlier of the two (the interval only ever lengthens) and its reason the new one. A backdated declaration overlapping another engine's cleared bypass is accepted, and the Courier logs a WARN naming both engines and the overlap interval. A rail that declares no bypass refuses with 422 JDC-0501. While a bypass is active the Courier's own SPB consumer takes nothing for that (tenant, channel).



## OpenAPI

````yaml /en/openapi/v3-current/jd-courier.yaml put /v1/channels/{channelId}/bypass
openapi: 3.1.0
info:
  description: >-
    The JD Courier API. Operators use it to manage the engines, the ownership
    map, the delivery modes and bypass of each rail, the retained messages, the
    SPB send journal and reconciliation. Engines use it to resolve the owner of
    a key, claim their Pix Automático recurrences and declare their Pix
    Automático payment legs.
  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 state per tenant, and the
      bypass declaration
    name: channels
  - description: >-
      The engines' side of the ownership map: resolution for the on-us gate,
      authoritative and never advisory, the claim of a Pix Automático recurrence
      the engine holds, and the declaration of a payment leg it holds.
    name: ownership-query
  - 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/{channelId}/bypass:
    put:
      tags:
        - channels
      summary: Declare that an engine is in bypass on this rail
      description: >-
        Records that an engine was reconnected directly to the vendor.
        Activating the bypass itself is a configuration change in the engine;
        this operation declares the fact to the Courier so it suspends its
        guarantees explicitly instead of reporting green while blind. With one
        engine in bypass, declaring a second on the same (tenant, channel)
        returns 409 JDC-0301 — the database's partial unique index decides it.
        Declaring the same engine again keeps the one active row: its declaredAt
        becomes the earlier of the two (the interval only ever lengthens) and
        its reason the new one. A backdated declaration overlapping another
        engine's cleared bypass is accepted, and the Courier logs a WARN naming
        both engines and the overlap interval. A rail that declares no bypass
        refuses with 422 JDC-0501. While a bypass is active the Courier's own
        SPB consumer takes nothing for that (tenant, channel).
      operationId: setChannelBypass
      parameters:
        - description: >-
            The rail. Closed vocabulary — a value outside it is a 404, never a
            new rail.
          in: path
          name: channelId
          required: true
          schema:
            description: >-
              The rail. Closed vocabulary — a value outside it is a 404, never a
              new rail.
            enum:
              - spb
              - pix
            type: string
        - description: >-
            Idempotency key; a retry with the same key and body replays the
            first answer.
          in: header
          name: X-Idempotency
          required: true
          schema:
            description: >-
              Idempotency key; a retry with the same key and body replays the
              first answer.
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetBypassRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChannelBypass'
          description: OK
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Bad Request
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unauthorized
        '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
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Conflict
        '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
        '503':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Service Unavailable
components:
  schemas:
    SetBypassRequest:
      additionalProperties: false
      properties:
        declaredAt:
          description: >-
            When the engine began talking to the vendor directly, if before now.
            A bypass activated while the Courier was unreachable is declared
            after the fact; any past instant down to the channel's registration
            for the tenant is accepted and recorded as given; a future one, the
            zero instant, or one before that registration is refused 422.
            Omitted means now. Reconciliation marks every cycle overlapping the
            interval from this instant.
          format: date-time
          type: string
        engineId:
          pattern: ^[a-z0-9-]{1,32}$
          type: string
        reason:
          description: Required — a bypass suspends coexistence guarantees.
          maxLength: 512
          minLength: 1
          type: string
      required:
        - engineId
        - reason
      type: object
    ChannelBypass:
      additionalProperties: false
      properties:
        active:
          type: boolean
        channelId:
          enum:
            - spb
            - pix
          type: string
        declaredAt:
          format: date-time
          type:
            - string
            - 'null'
        declaredBy:
          maxLength: 128
          type:
            - string
            - 'null'
        engineId:
          pattern: ^[a-z0-9-]{1,32}$
          type:
            - string
            - 'null'
        reason:
          maxLength: 512
          type:
            - string
            - 'null'
        suspendedGuarantees:
          description: Guarantees explicitly suspended while the bypass is active.
          items:
            maxLength: 64
            type: string
          type: array
      required:
        - channelId
        - active
      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
    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

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.