Lead Bank Instant Payments API

The Instant Payments API from Lead Bank — 7 operation(s) for instant payments.

OpenAPI Specification

lead-bank-instant-payments-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Lead Bank Account Number Instant Payments API
  description: Lead Bank's APIs
  version: v1.0
servers:
- url: https://api.sandbox.lead.bank
- url: https://api.lead.bank
security:
- bearerAuth: []
tags:
- name: Instant Payments
paths:
  /v1/instant_payments:
    post:
      tags:
      - Instant Payments
      operationId: create-an-instant-payment
      summary: Create an instant payment
      description: Initiates an outgoing instant payment.
      parameters:
      - name: Idempotency-Key
        in: header
        description: Idempotency key
        required: true
        schema:
          type: string
          maxLength: 255
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - account_number_id
              - amount
              - currency_code
              - creditor_agent
              - creditor
              properties:
                account_number_id:
                  $ref: '#/components/schemas/AccountNumberID'
                  description: The ID of the Lead Bank Account Number object.
                amount:
                  $ref: '#/components/schemas/InstantPaymentAmount'
                  description: The amount of the instant payment in cents.
                currency_code:
                  $ref: '#/components/schemas/CurrencyCode'
                  description: A three-letter currency code as defined in ISO 4217. Only USD is supported.
                description:
                  type: string
                  maxLength: 140
                  description: Free-form information on the reason for the payment.
                  example: Payment for invoice 12345
                creditor_agent:
                  $ref: '#/components/schemas/InstantPaymentAgent'
                  description: The details of the financial institution where the creditor (payee) holds their account.
                creditor:
                  $ref: '#/components/schemas/InstantPaymentParty'
                  description: The details of the creditor (payee) receiving the funds.
      responses:
        '200':
          description: The new instant payment object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstantPayment'
        '400':
          description: Your request parameters did not validate.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '403':
          description: You do not have permission to access this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '422':
          description: We couldn't process your request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '500':
          description: Server error. Please try your request again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
    get:
      tags:
      - Instant Payments
      operationId: list-all-instant-payments
      summary: List all instant payments
      description: List instant payments with optional filtering.
      parameters:
      - name: account_id
        description: Returns instant payments associated with this `account_id`.
        in: query
        schema:
          type: string
          pattern: ^account_\w+$
      - name: account_number_id
        description: Returns instant payments associated with this `account_number_id`.
        in: query
        schema:
          type: string
          pattern: ^account_number_\w+$
      - name: direction
        description: Returns instant payments with the given direction.
        in: query
        schema:
          $ref: '#/components/schemas/Direction'
      - name: status
        description: Returns instant payments with the given status.
        in: query
        schema:
          $ref: '#/components/schemas/InstantPaymentStatus'
      - name: counterparty_status
        description: Returns instant payments with the given counterparty status.
        in: query
        schema:
          $ref: '#/components/schemas/InstantPaymentCounterpartyStatus'
      - name: return_request_status
        description: Returns instant payments that have a return request with the given status.
        in: query
        schema:
          $ref: '#/components/schemas/InstantPaymentReturnRequestStatus'
      - name: created_at
        description: A set of filters on the list using the object's field `created_at`.
        in: query
        style: deepObject
        explode: true
        schema:
          type: object
          properties:
            after:
              type: string
              format: date-time
              description: Returns objects where the `created_at` timestamp is after the entered timestamp.
            on_or_after:
              type: string
              format: date-time
              description: Returns objects where the `created_at` timestamp is the same as or after the entered timestamp.
            before:
              type: string
              format: date-time
              description: Returns objects where the `created_at` timestamp is before the entered timestamp.
            on_or_before:
              type: string
              format: date-time
              description: Returns objects where the `created_at` timestamp is the same as or before the entered timestamp.
      - name: limit
        description: Maximum number of objects to be returned.
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 10
      - name: starting_after
        description: A cursor for use in pagination; this is an ID that defines your place in the list.
        in: query
        schema:
          type: string
          pattern: ^instant_payment_\w+$
      - name: ending_before
        description: A cursor for use in pagination; this is an ID that defines your place in the list.
        in: query
        schema:
          type: string
          pattern: ^instant_payment_\w+$
      responses:
        '200':
          description: A list of instant payment objects.
          content:
            application/json:
              schema:
                type: object
                required:
                - objects
                - has_more
                properties:
                  objects:
                    type: array
                    items:
                      $ref: '#/components/schemas/InstantPayment'
                  has_more:
                    type: boolean
                    description: Indicates whether more results are available.
        '403':
          description: You do not have permission to access instant payments.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '422':
          description: Your request parameters did not validate.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '500':
          description: Server error. Please try your request again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
  /v1/instant_payments/{instant_payment_id}:
    get:
      tags:
      - Instant Payments
      operationId: retrieve-an-instant-payment
      summary: Retrieve an instant payment
      description: Retrieve the details of an instant payment.
      parameters:
      - name: instant_payment_id
        description: ID of the instant payment object you want to retrieve.
        example: instant_payment_xyz001
        in: path
        required: true
        schema:
          type: string
          pattern: ^instant_payment_\w+$
      responses:
        '200':
          description: An instant payment object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstantPayment'
        '403':
          description: You do not have permission to access this instant payment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '404':
          description: Instant payment not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '500':
          description: Server error. Please try your request again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
  /v1/instant_payments/{instant_payment_id}/return:
    post:
      tags:
      - Instant Payments
      operationId: return-an-instant-payment
      summary: Return an instant payment
      description: 'Initiates an outgoing instant payment return. If there is an outstanding return request, invoking this endpoint is

        also understood as accepting the active return request.'
      parameters:
      - name: Idempotency-Key
        in: header
        description: Idempotency key
        required: true
        schema:
          type: string
          maxLength: 255
      - name: instant_payment_id
        description: ID of the instant payment object you want to return.
        example: instant_payment_xyz001
        in: path
        required: true
        schema:
          type: string
          pattern: ^instant_payment_\w+$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - reason
              properties:
                reason:
                  $ref: '#/components/schemas/OutgoingInstantPaymentReturnReason'
                  description: The reason for the return.
                additional_information:
                  type: string
                  maxLength: 140
                  description: Accompanying free text explanation for the reason. Required if reason is "narrative" or "wrong_amount".
      responses:
        '200':
          description: The new outgoing return instant payment object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstantPayment'
        '400':
          description: Your request parameters did not validate.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '403':
          description: You do not have permission to access instant payments.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '404':
          description: Instant payment not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '422':
          description: We couldn't process your request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '500':
          description: Server error. Please try your request again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
  /v1/instant_payments/{instant_payment_id}/cancel:
    post:
      tags:
      - Instant Payments
      operationId: cancel-an-instant-payment
      summary: Cancel an instant payment
      description: 'Attempt to cancel an outgoing instant payment that is currently in "created" or "under_review"

        status.'
      parameters:
      - name: instant_payment_id
        description: ID of the instant payment object you want to cancel.
        example: instant_payment_xyz001
        in: path
        required: true
        schema:
          type: string
          pattern: ^instant_payment_\w+$
      responses:
        '200':
          description: Updated canceled instant payment object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstantPayment'
        '400':
          description: Operation cannot be done on this object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '404':
          description: Instant payment not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '422':
          description: The instant payment has already been submitted and cannot be canceled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '500':
          description: Server error. Please try your request again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
  /v1/instant_payments/{instant_payment_id}/request_return:
    post:
      tags:
      - Instant Payments
      operationId: request-return-for-instant-payment
      summary: Request return for an instant payment
      description: 'Send a return request to the counterparty for a previously posted outgoing instant payment.

        Returns the updated instant payment object with a new entry in the return_requests array.'
      parameters:
      - name: Idempotency-Key
        in: header
        description: Idempotency key
        required: true
        schema:
          type: string
          maxLength: 255
      - name: instant_payment_id
        description: ID of the instant payment object you want to request a return for.
        example: instant_payment_xyz001
        in: path
        required: true
        schema:
          type: string
          pattern: ^instant_payment_\w+$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - reason
              properties:
                reason:
                  $ref: '#/components/schemas/OutgoingInstantPaymentReturnRequestReason'
                  description: The reason for the return request.
                additional_information:
                  type: string
                  maxLength: 140
                  description: 'Accompanying free text explanation for the reason. Required if reason is

                    "narrative", "wrong_amount", or "service_not_rendered".'
      responses:
        '200':
          description: The updated instant payment object with a new return request in the return_requests array.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstantPayment'
        '400':
          description: Your request parameters did not validate.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '403':
          description: You do not have permission to access instant payments.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '404':
          description: Instant payment not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '409':
          description: There is an active return request already associated with this payment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '422':
          description: We couldn't process your request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '500':
          description: Server error. Please try your request again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
  /v1/instant_payments/{instant_payment_id}/reject_return_request:
    post:
      tags:
      - Instant Payments
      operationId: reject-return-request-for-instant-payment
      summary: Reject return request for an instant payment
      description: 'Reject the active return request associated with an incoming instant payment.

        Returns the updated instant payment object with the status of the active return request set to "rejected".'
      parameters:
      - name: instant_payment_id
        description: ID of the instant payment object whose return request you want to reject.
        example: instant_payment_xyz001
        in: path
        required: true
        schema:
          type: string
          pattern: ^instant_payment_\w+$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - reason
              properties:
                reason:
                  $ref: '#/components/schemas/OutgoingInstantPaymentReturnRequestRejectionReason'
                  description: The reason for rejecting the return request.
                additional_information:
                  type: string
                  maxLength: 140
                  description: Accompanying free text explanation for the reason. Required if reason is "narrative".
      responses:
        '200':
          description: The updated instant payment object with the return request status set to "rejected".
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstantPayment'
        '400':
          description: Your request parameters did not validate.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '403':
          description: You do not have permission to access instant payments.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '404':
          description: Instant payment not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '422':
          description: We couldn't process your request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '500':
          description: Server error. Please try your request again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
  /v1/instant_payments/check_availability:
    post:
      tags:
      - Instant Payments
      operationId: check-instant-payment-availability
      summary: Check instant payment availability
      description: Check if a given routing number is eligible to receive an instant payment.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - routing_number
              properties:
                routing_number:
                  type: string
                  description: The routing number of the financial institution where the creditor (payee) holds their account.
                  minLength: 9
                  maxLength: 9
                  pattern: ^[0-9]+$
                  example: '111000111'
      responses:
        '200':
          description: Availability check result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstantPaymentAvailability'
        '400':
          description: Your request parameters did not validate.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '422':
          description: The routing number is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '500':
          description: Server error. Please try your request again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
components:
  schemas:
    AccountNumberID:
      type: string
      description: The ID of the Lead Bank Account Number object.
      example: account_number_xyz123
      pattern: ^account_number_\w+$
    IncomingInstantPaymentReturnRequestReason:
      type: string
      description: 'The reason for the return request.

        * `creditor_account_number_invalid` - Invalid creditor account number

        * `wrong_amount` - Wrong amount

        * `customer_requested` - Requested by customer

        * `duplication` - Duplicate payment

        * `fraud_suspected` - Fraud suspected

        * `narrative` - Narrative reason, additional_information required

        * `service_not_rendered` - Service not rendered

        * `technical_problem` - Technical problem

        * `undue_payment` - Unduly paid

        * `per_agent_request` - Requested by agent

        * `other` - Other'
      example: duplicate
      enum:
      - creditor_account_number_invalid
      - wrong_amount
      - customer_requested
      - duplication
      - fraud_suspected
      - narrative
      - service_not_rendered
      - technical_problem
      - undue_payment
      - per_agent_request
      - other
    InstantPaymentReturnRequestResolution:
      type: object
      description: The resolution details of the return request.
      required:
      - resolved_at
      - resolved_by
      properties:
        resolved_at:
          type: string
          format: date-time
          description: The ISO 8601 format timestamp that represents when the resolution occurred.
          example: '2022-06-27T11:22:33Z'
        resolved_by:
          type: string
          description: The party that resolved the return request.
          enum:
          - client
          - lead
          - network
          - counterparty
          example: counterparty
        rejection_reason:
          $ref: '#/components/schemas/IncomingInstantPaymentReturnRequestRejectionReason'
          description: If the return request was rejected, the reason for the rejection.
        rejection_details:
          type: string
          description: If the return request was rejected, details of the rejection reason including the 4-character ISO code when possible.
    OutgoingInstantPaymentReturnRequestRejectionReason:
      type: string
      description: 'The reason for rejecting an incoming return request.

        * `account_closed` - Account closed

        * `non_sufficient_funds` - Insufficient funds

        * `customer_requested` - Customer decision

        * `legal_decision` - Legal decision

        * `customer_no_response` - No answer from customer

        * `returned_previously` - Already returned

        * `narrative` - Narrative reason, additional_information required'
      example: customer_requested
      enum:
      - account_closed
      - non_sufficient_funds
      - customer_requested
      - legal_decision
      - customer_no_response
      - returned_previously
      - narrative
    InstantPaymentReturnRequestStatus:
      type: string
      description: 'The current status of the return request object.

        For incoming return requests: response_needed, accepted, rejected.

        For outgoing return requests: pending, accepted, rejected.'
      example: pending
      enum:
      - pending
      - response_needed
      - accepted
      - rejected
    APIError:
      type: object
      properties:
        code:
          type: string
          description: The error code.
        title:
          type: string
          description: The error title.
        detail:
          type: string
          description: A detailed error description.
        status:
          type: string
          description: The HTTP status code.
        invalid_parameters:
          type: array
          description: Invalid request parameters with reasons, if applicable.
          items:
            $ref: '#/components/schemas/InvalidParameterDetail'
        instance:
          type: string
          description: The object causing this specific occurrence of the error, if applicable.
    InstantPaymentRejectionReason:
      type: string
      description: 'The reason for the rejection.

        * `account_closed` - Closed creditor account

        * `creditor_account_number_invalid` - Invalid creditor account number

        * `account_blocked` - Blocked account

        * `wrong_amount` - Wrong amount

        * `creditor_name_mismatch` - Inconsistent end customer

        * `creditor_address_incorrect` - Missing or incorrect creditor address

        * `creditor_identification_invalid` - Invalid creditor identification

        * `duplication` - Duplicate

        * `regulatory_reason` - Regulatory

        * `narrative` - Narrative

        * `account_number_incorrect` - Account number incorrect or not active

        * `non_sufficient_funds` - Non-sufficient funds

        * `aggregate_limit_exceeded` - Aggregate limit exceeded

        * `participant_not_on_network` - Participant is not on an instant payment network

        * `routing_number_format_incorrect` - Routing number format is incorrect

        * `participant_signed_off` - Participant signed off

        * `restricted_by_account_number_controls` - Restricted by account number controls

        * `other` - Other'
      example: non_sufficient_funds
      enum:
      - account_closed
      - creditor_account_number_invalid
      - account_blocked
      - wrong_amount
      - creditor_name_mismatch
      - creditor_address_incorrect
      - creditor_identification_invalid
      - duplication
      - regulatory_reason
      - narrative
      - account_number_incorrect
      - non_sufficient_funds
      - aggregate_limit_exceeded
      - participant_not_on_network
      - routing_number_format_incorrect
      - participant_signed_off
      - restricted_by_account_number_controls
      - other
    InstantPayment:
      type: object
      required:
      - id
      - account_id
      - account_number_id
      - created_at
      - updated_at
      - direction
      - status
      - amount
      - currency_code
      - related_objects
      - return_requests
      - creditor
      - creditor_agent
      - debtor
      - debtor_agent
      - payment_identifiers
      properties:
        id:
          type: string
          description: The unique identifier of the instant payment object.
          example: instant_payment_xyz123
          pattern: ^instant_payment_\w+$
        account_id:
          $ref: '#/components/schemas/AccountID'
        account_number_id:
          $ref: '#/components/schemas/AccountNumberID'
        direction:
          $ref: '#/components/schemas/Direction'
        status:
          $ref: '#/components/schemas/InstantPaymentStatus'
        counterparty_status:
          $ref: '#/components/schemas/InstantPaymentCounterpartyStatus'
        amount:
          $ref: '#/components/schemas/InstantPaymentAmount'
        currency_code:
          $ref: '#/components/schemas/CurrencyCode'
        description:
          type: string
          description: Free-form information on the reason for the payment.
          example: Payment for invoice 12345
        debtor:
          $ref: '#/components/schemas/InstantPaymentParty'
          description: The details of the debtor (payer) sending the funds.
        debtor_agent:
          $ref: '#/components/schemas/InstantPaymentAgent'
          description: The details of the financial institution where the debtor (payer) holds their account.
        creditor_agent:
          $ref: '#/components/schemas/InstantPaymentAgent'
          description: The details of the financial institution where the creditor (payee) holds their account.
        creditor:
          $ref: '#/components/schemas/InstantPaymentParty'
          description: The details of the creditor (payee) receiving the funds.
        payment_identifiers:
          $ref: '#/components/schemas/InstantPaymentIdentifiers'
        return:
          $ref: '#/components/schemas/InstantPaymentReturnDetails'
        rejection:
          $ref: '#/components/schemas/InstantPaymentRejection'
        related_objects:
          $ref: '#/components/schemas/InstantPaymentRelatedObjects'
        return_requests:
          type: array
          description: The return requests that reference this instant payment.
          items:
            $ref: '#/components/schemas/InstantPaymentReturnRequest'
        created_at:
          type: string
          format: date-time
          description: The ISO 8601 format timestamp that represents when the instant payment object was created.
          example: '2022-06-27T11:22:33Z'
        updated_at:
          type: string
          format: date-time
          description: The ISO 8601 format timestamp that represents when the instant payment object was last updated.
          example: '2022-06-27T11:22:40Z'
    InstantPaymentParty:
      type: object
      description: Details of a party in an instant payment.
      required:
      - name
      - account_number
      properties:
        name:
          type: string
          description: The party's name.
          minLength: 3
          maxLength: 35
          example: Alex Smith
        account_number:
          type: string
          description: The party's account number.
          minLength: 1
          maxLength: 17
          example: '1234567890'
    IncomingInstantPaymentReturnRequestRejectionReason:
      type: string
      description: 'The reason for a rejected return request.

        * `account_closed` - Account closed

        * `non_sufficient_funds` - Insufficient funds

        * `customer_requested` - Customer decision

        * `legal_decision` - Legal decision

        * `customer_no_response` - No answer from customer

        * `returned_previously` - Already returned

        * `narrative` - Narrative reason, additional_information required

        * `per_agent_request` - Agent decision

        * `other` - Other'
      example: customer_no_response
      enum:
      - account_closed
      - non_sufficient_funds
      - customer_requested
      - legal_decision
      - customer_no_response
      - returned_previously
      - narrative
      - per_agent_request
      - other
    InstantPaymentRelatedObjects:
      type: object
      description: This instant payment's related instant payments or other objects.
      properties:
        original_payment_id:
          type: string
          description: If this instant payment is a return, the ID of the original payment this return is in reference to.
          pattern: ^instant_payment_\w+$
          example: instant_payment_xyz123
        return_payment_ids:
          type: array
          description: If this instant payment was subsequently returned, the IDs of the payment returns.
          items:
            type: string
            pattern: ^instant_payment_\w+$
            example: instant_payment_xyz456
    InstantPaymentRejection:
      type: object
      description: If this instant payment was rejected, this object contains details on the rejection.
      required:
      - rejected_by
      - reason
      properties:
        rejected_by:
          type: string
          description: The party that rejected the instant payment.
          enum:
          - lead
          - network
          - counterparty
          example: lead
        reason:
          $ref: '#/components/schemas/InstantPaymentRejectionReason'
        details:
          type: string
          description: Details of the reason for the rejection including the 4-character ISO code when possible.
    OutgoingInstantPaymentReturnReason:
      type: string
      description: 'The reason for initiating an return.

        * `honor_return_request` - Honoring a return request

        * `wrong_amount` - Wrong amount

        * `duplication` - Duplicate payment

        * `initiating_party_unrecognized` - Unknown sender

        * `fraud_

# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lead-bank/refs/heads/main/openapi/lead-bank-instant-payments-api-openapi.yml