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

# End one receivable's funding obligation before its term

> Ends the obligation raised by a cession booked with the risk retained (Res. CMN 4.966 art. 29) for one of its receivables, at the amount agreed with the fund. The operator informs that amount and what the borrower paid to get out; this service prices the obligation at amortised cost, refuses anything above the face of the instalments still owed, and books the difference as financing expense above the obligation or as released desagio below it. Omitting the agreed amount passes the borrower's payoff straight through; informing zero or less is refused, because a fund settling for nothing is a statement and not an absence. The cession itself reaches 'settled' only when this was the last of its receivables still owing the fund.



## OpenAPI

````yaml /pt/openapi/v3-current/lender.yaml post /api/v1/assignment/sets/{setId}/funding-payoff
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/assignment/sets/{setId}/funding-payoff:
    post:
      tags:
        - AssignmentSets
      summary: End one receivable's funding obligation before its term
      description: >-
        Ends the obligation raised by a cession booked with the risk retained
        (Res. CMN 4.966 art. 29) for one of its receivables, at the amount
        agreed with the fund. The operator informs that amount and what the
        borrower paid to get out; this service prices the obligation at
        amortised cost, refuses anything above the face of the instalments still
        owed, and books the difference as financing expense above the obligation
        or as released desagio below it. Omitting the agreed amount passes the
        borrower's payoff straight through; informing zero or less is refused,
        because a fund settling for nothing is a statement and not an absence.
        The cession itself reaches 'settled' only when this was the last of its
        receivables still owing the fund.
      operationId: endAssignmentFundingEarly
      parameters:
        - description: Assignment set identifier.
          in: path
          name: setId
          required: true
          schema:
            description: Assignment set identifier.
            format: uuid
            type: string
        - description: >-
            Canonical idempotency request ID. Required: this request
            extinguishes a liability, 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
              extinguishes a liability, and without a key a retry cannot be told
              apart from a second instruction.
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EndAssignmentFundingEarlyHumaInputBody'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssignmentFundingPayoffHumaBody'
          description: OK
          headers:
            X-Idempotency-Replayed:
              description: >-
                "true" when this response replays a request already executed
                under the same X-Idempotency, so nothing ran a second time and
                no money moved again. Absent on a first execution.
              schema:
                type: string
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: >-
            The at-most-once contract refused the request before any handler
            ran: no X-Idempotency header (IDEMPOTENCY_KEY_REQUIRED), a key under
            a spelling this service does not read
            (IDEMPOTENCY_KEY_HEADER_UNKNOWN), or a request that could not be
            scoped to a tenant (IDEMPOTENCY_TENANT_REQUIRED). The code is in the
            problem document's `code` member.
        '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
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: >-
            Any other status this operation may carry, rendered as a problem
            document — including a refusal produced ahead of the service, such
            as a gateway or ingress answering on its behalf.
components:
  schemas:
    EndAssignmentFundingEarlyHumaInputBody:
      additionalProperties: false
      properties:
        agreedAmount:
          description: >-
            What the fund agreed to take, decimal string. Omit it entirely to
            pass the borrower's payoff through; an informed amount must be above
            zero and never above the face of the instalments still owed.
          type: string
        borrowerPayoff:
          description: >-
            What the borrower actually paid to end his own contract, decimal
            string. Required: it is the default the fund is offered when no
            amount is agreed, and a pass-through of nothing would book the whole
            obligation as a gain.
          type: string
        receivableRef:
          description: >-
            The receivable whose funding obligation ends. The obligation is
            carried per receivable, so one borrower prepaying ends one
            obligation and not the cession's others.
          maxLength: 128
          type: string
      required:
        - receivableRef
        - borrowerPayoff
      type: object
    AssignmentFundingPayoffHumaBody:
      additionalProperties: false
      properties:
        assignmentSetId:
          description: The cession whose obligation was ended.
          type: string
        borrowerPayoff:
          description: >-
            What the borrower paid to get out, decimal string, scale 2, echoed
            as the third reference.
          type: string
        currency:
          description: ISO-4217 code the obligation is denominated in.
          type: string
        expense:
          description: >-
            The agreed amount ABOVE the obligation, decimal string, scale 2.
            Financing cost taken in the period the cession ends in.
          type: string
        face:
          description: >-
            Sum of the instalments still owed, decimal string, scale 2. The
            ceiling the agreed amount may not cross.
          type: string
        fromState:
          description: The cession's state before this payoff.
          type: string
        gain:
          description: >-
            The agreed amount BELOW the obligation, decimal string, scale 2.
            Desagio that stops being appropriable. Exactly one of expense and
            gain is ever positive.
          type: string
        obligation:
          description: >-
            What the liability stood at on this date (Res. CMN 4.966 art. 29
            para 1), decimal string, scale 2. After the payoff it is exactly
            zero.
          type: string
        periodsEnded:
          description: >-
            How many open periods of this receivable's ladder the payoff closed
            at once.
          format: int64
          type: integer
        receivableRef:
          description: The receivable that ended.
          type: string
        settlement:
          description: >-
            What the fund is owed at once, decimal string, scale 2. Credited to
            what this institution owes the fund, never to cash.
          type: string
        toState:
          description: >-
            The cession's state after it. It reaches 'settled' only when this
            was its last open obligation, so a cession of many receivables
            usually stays where it was.
          type: string
      required:
        - assignmentSetId
        - receivableRef
        - currency
        - obligation
        - face
        - borrowerPayoff
        - settlement
        - expense
        - gain
        - periodsEnded
        - fromState
        - toState
      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

````