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

# Appoint the tenant's extraordinary-collection agent

> Points this tenant at the collection agent it instructs, or switches the channel off. It is the act every other behaviour of the channel depends on: with no active agent, borrower collections stay PARKED in `requested` and are only counted. The agent name and account are stamped verbatim on every instruction and the Arquivo de Baixa Extraordinária quotes them back byte-exactly, so the shapes are refused here by name rather than by a database constraint. Re-appointing the same agent is inert; `active: false` parks issuance again WITHOUT deleting the identity an already issued instruction names. Because the identity travels in the SAME call as the on/off switch, a CHANGED name or account is refused with 409 while the current agent still has open instructions: it would abandon them, since the work queue matches the active channel byte-exactly against what each instrument was stamped with. Turn those instructions over first, then the switch goes through. Idempotent via the X-Idempotency header enforced by the platform middleware.



## OpenAPI

````yaml /es/openapi/v3-current/lender.yaml put /api/v1/internal/br/consignado/collection-agent-channel
openapi: 3.1.0
info:
  contact:
    email: contact@lerian.studio
    name: Lerian Studio
    url: https://lerian.studio
  description: >-
    Code-first OpenAPI 3.1 surface for the Lender service. Routes that move
    money are at-most-once per X-Idempotency: when one answers 5xx, the
    X-Idempotency-Fenced response header says whether that key is now refusing
    resends (true) or free to retry (false or absent). See
    docs/contracts/money-route-idempotency.md.
  license:
    name: Lerian Studio General License
  title: Lender API
  version: 1.0.0
servers:
  - url: https://lender.sandbox.lerian.net
security:
  - BearerAuth: []
tags:
  - description: >-
      Caller session projection: validated subject and effective permissions for
      the presented token.
    name: Session
  - description: >-
      Ledger accounting operations: journal entries and accrual postings for
      loan accounts.
    name: Accounting
  - description: >-
      Loan application intake and lifecycle: submission, decisioning, and
      status.
    name: LoanApplications
  - description: >-
      Loan product catalog: definition, versioning, and activation of lending
      products.
    name: LoanProducts
  - description: >-
      Loan account servicing operations: balances, schedules, and account-level
      actions.
    name: Loan Accounts
  - description: >-
      Portfolio dashboard read operations: aggregated portfolio and performance
      views.
    name: Dashboard
  - description: >-
      Jurisdiction registry: supported jurisdiction profiles and their
      capabilities.
    name: Jurisdictions
  - description: >-
      Jurisdiction-specific loan application operations (Brazil origination
      surface).
    name: Loan Applications
  - description: >-
      Tax computation operations for jurisdiction-specific lending (e.g. Brazil
      IOF).
    name: Tax
  - description: >-
      Brazil consignado privado operations: contract lifecycle, exclusion
      repair, and compensating adjustments.
    name: Consignado
  - description: >-
      Credit-instrument document template registry: versioned drafting and
      publication of CCB clausulado.
    name: DocumentTemplates
paths:
  /api/v1/internal/br/consignado/collection-agent-channel:
    put:
      tags:
        - Consignado
      summary: Appoint the tenant's extraordinary-collection agent
      description: >-
        Points this tenant at the collection agent it instructs, or switches the
        channel off. It is the act every other behaviour of the channel depends
        on: with no active agent, borrower collections stay PARKED in
        `requested` and are only counted. The agent name and account are stamped
        verbatim on every instruction and the Arquivo de Baixa Extraordinária
        quotes them back byte-exactly, so the shapes are refused here by name
        rather than by a database constraint. Re-appointing the same agent is
        inert; `active: false` parks issuance again WITHOUT deleting the
        identity an already issued instruction names. Because the identity
        travels in the SAME call as the on/off switch, a CHANGED name or account
        is refused with 409 while the current agent still has open instructions:
        it would abandon them, since the work queue matches the active channel
        byte-exactly against what each instrument was stamped with. Turn those
        instructions over first, then the switch goes through. Idempotent via
        the X-Idempotency header enforced by the platform middleware.
      operationId: appointConsignadoCollectionAgentChannel
      parameters:
        - description: >-
            Canonical idempotency request ID. Required: this request moves
            money, and without a key a retry cannot be told apart from a second
            instruction.
          in: header
          name: X-Idempotency
          required: true
          schema:
            description: >-
              Canonical idempotency request ID. Required: this request moves
              money, and without a key a retry cannot be told apart from a
              second instruction.
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CollectionAgentChannelAppointHumaInputBody'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CollectionAgentChannelHumaBody'
          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
        '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
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Error
components:
  schemas:
    CollectionAgentChannelAppointHumaInputBody:
      additionalProperties: false
      properties:
        active:
          description: >-
            Defaults to true. False turns the channel OFF without deleting the
            agent's identity, returning issuance to the park; an instrument
            already issued still names the agent that received it.
          type: boolean
        agentAccountId:
          description: >-
            The collection agent's own receiving account, held at the agent and
            never an account of the lender's: the agent receives the borrower's
            cash and the lender ingests the settlement file. It becomes the
            payment identity of every settlement of the instructions it stamps,
            so it admits no colon, whitespace or control character — "conta byx
            001" is refused here, where a 422 costs nothing, instead of
            stranding a paid borrower's money later.
          maxLength: 255
          minLength: 1
          pattern: ^[^\s:\x00-\x1f\x7f]+$
          type: string
        agentName:
          description: >-
            The collection agent, lowercase authority shape. It is stamped
            VERBATIM on every instruction and the baixa file quotes it back
            byte-exactly, so mixed case would issue instructions no file could
            answer.
          maxLength: 100
          minLength: 1
          pattern: ^[a-z0-9][a-z0-9._-]{0,99}$
          type: string
      required:
        - agentName
        - agentAccountId
      type: object
    CollectionAgentChannelHumaBody:
      additionalProperties: false
      properties:
        active:
          description: True while the channel instructs; false parks issuance.
          type: boolean
        agentAccountId:
          description: The agent's receiving account.
          type: string
        agentName:
          description: The appointed collection agent.
          type: string
      required:
        - agentName
        - agentAccountId
        - active
      type: object
    Detail:
      additionalProperties: false
      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

````