> ## Documentation Index
> Fetch the complete documentation index at: https://developers.ingopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Process — BillPay

> Push a disbursement to a tokenized biller account.



## OpenAPI

````yaml specs/ingopay-process-billpay.yaml POST /gateway/process--billpay
openapi: 3.0.3
info:
  title: IngoPay API — Push Method BillPay
  description: >
    Submit a request to push funds to a customer's bill payment account
    (account_type: BP).


    The partner and their customer should be committed to the payment prior to
    making this call. A successful response confirms the payment item has been
    accepted. **Once accepted, a payment cannot be reversed.**


    > **Assume Success:** Clients should assume success for any Process request
    where a response was not received from Ingo Payments, including assumption
    of normal settlement. Any consumer funds associated with the transaction
    should be accounted for aligning with normal successful transaction
    processing.


    > **Log Transaction ID:** Log the Ingo `transaction_id` and
    `participant_unique_id1` for every transaction — Ingo Payment Services will
    request these values for any support interactions.
  version: '11'
  contact:
    name: Ingo Money Developer Support
    url: https://developers.ingomoney.com
servers:
  - url: https://payapi-sandbox.ingo.money
    description: Sandbox
  - url: https://payapi.ingo.money
    description: Production
security:
  - HmacAuth: []
paths:
  /gateway/process--billpay:
    post:
      tags:
        - Push Payments
      summary: Push funds to a bill payment account
      description: >
        Initiates a push disbursement to a customer's bill payment account using
        a token from a prior Verify call. `account_type` must always be `BP` for
        this operation.
      operationId: processBillpay
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProcessBillpayRequest'
            example:
              participant_id: 12345
              timestamp: 1587052232
              version: 11
              amount: 1010.5
              participant_unique_id1: f8f68709-8e5d-4c19-8ca0-2eaffef4ec57
              customer_account_token: a74eacf4-32e8-4081-b69c-565a89dd6cf1
              account_type: BP
              source_of_funds: 4
              participant_unique_id2: 257b5bae-d52f-42e2-8f2c-0700d8d7a7a5
              store_id: STORE-001
              clerk_id: CLK-007
              terminal_id: TERM-042
      responses:
        '200':
          description: Payment accepted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProcessBillpayResponse'
              example:
                status: 100
                client_message: Success
                data:
                  estimated_posting_time: Payment will post 04/22/2026
                  estimated_posting_date: 04/22/2026
                  transaction_id: 2361538
                  request_timestamp: 1587052280
                  customer_account_token: a74eacf4-32e8-4081-b69c-565a89dd6cf1
                  participant_unique_id1: f8f68709-8e5d-4c19-8ca0-2eaffef4ec57
                  participant_unique_id2: 257b5bae-d52f-42e2-8f2c-0700d8d7a7a5
        '400':
          description: Validation error — check request body
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                status: 700
                client_message: Account not currently available for payment
                data:
                  request_timestamp: 1587052280
components:
  schemas:
    ProcessBillpayRequest:
      type: object
      required:
        - participant_id
        - timestamp
        - version
        - amount
        - participant_unique_id1
        - customer_account_token
        - account_type
        - source_of_funds
      properties:
        participant_id:
          type: integer
          description: Unique participant identifier assigned by Ingo.
          example: 12345
        timestamp:
          type: integer
          format: int64
          description: Unix timestamp of the request.
          example: 1587052232
        version:
          type: integer
          description: API version of the request. Current version is 11.
          example: 11
        amount:
          type: number
          format: float
          minimum: 0.01
          description: Amount of the transaction.
          example: 1010.5
        participant_unique_id1:
          type: string
          minLength: 1
          maxLength: 255
          description: >
            Participant assigned transaction ID for the process request. Value
            must be unique and may not contain NPI data. Used for idempotency —
            a duplicate value returns an idempotent response without initiating
            a new push request. Appears on daily reconciliation reports.
          example: f8f68709-8e5d-4c19-8ca0-2eaffef4ec57
        customer_account_token:
          type: string
          minLength: 1
          maxLength: 255
          description: >
            Token representing the account number and customer data as provided
            in the response from a previous Verify API call.
          example: a74eacf4-32e8-4081-b69c-565a89dd6cf1
        account_type:
          type: string
          enum:
            - BP
          minLength: 1
          description: Always `BP` for bill payment disbursements.
          example: BP
        source_of_funds:
          type: integer
          enum:
            - 1
            - 2
            - 3
            - 4
          description: >
            Funding source indicator: 1 = Cash, 2 = Check, 3 = Combo of Cash &
            Check, 4 = Corp Disbursement.
          example: 4
        participant_unique_id2:
          type: string
          maxLength: 255
          nullable: true
          description: >
            Optional second participant assigned transaction ID. Does not appear
            on daily reconciliation reports.
          example: 257b5bae-d52f-42e2-8f2c-0700d8d7a7a5
        store_id:
          type: string
          maxLength: 255
          nullable: true
          description: |
            Client assigned store ID. Required for Retail client participants.
          example: STORE-001
        clerk_id:
          type: string
          maxLength: 255
          nullable: true
          description: |
            Client assigned clerk ID. Required for Retail client participants.
          example: CLK-007
        terminal_id:
          type: string
          maxLength: 255
          nullable: true
          description: >
            Client assigned terminal ID. Required for Retail client
            participants.
          example: TERM-042
        recipient_phone:
          type: integer
          maxLength: 10
          description: 10-digit recipient phone number. Digits only.
          example: 5555550100
        ledger:
          type: object
          description: >-
            Ledger information. Required for clients with ledger program
            configuration.
          required:
            - api_key
            - user_id
            - entity_type
            - entity_id
          properties:
            api_key:
              type: string
              maxLength: 100
              description: API key associated with the ledger program.
              example: LEDGER-API-KEY
            user_id:
              type: string
              maxLength: 100
              description: User ID associated with the ledger program.
              example: USER-001
            entity_type:
              type: string
              maxLength: 50
              description: 'Entity type for the ledger. Valid values: business, user.'
              enum:
                - business
                - user
              example: user
            entity_id:
              type: string
              maxLength: 100
              description: Entity ID associated with the ledger.
              example: ENTITY-001
    ProcessBillpayResponse:
      type: object
      properties:
        status:
          type: integer
          description: >
            Numeric code describing the status of the API request. 100 =
            Success.
          example: 100
        client_message:
          type: string
          description: Text description associated with the status code.
          example: Success
        data:
          type: object
          properties:
            estimated_posting_time:
              type: string
              description: Provided on success. Estimated posting time narrative.
              example: Payment will post 04/22/2026
            estimated_posting_date:
              type: string
              description: Provided on success. Estimated posting date.
              example: 04/22/2026
            transaction_id:
              type: integer
              nullable: true
              description: >
                Always provided on success and in certain failure conditions.
                Unique transaction identifier. Log this value — Ingo Payment
                Services will request it for support interactions.
              example: 2361538
            request_timestamp:
              type: integer
              format: int64
              description: Unix timestamp of the request.
              example: 1587052280
            customer_account_token:
              type: string
              description: Echo of value from request. Provided on success.
              example: a74eacf4-32e8-4081-b69c-565a89dd6cf1
            participant_unique_id1:
              type: string
              description: >
                Always provided on success and in certain failure conditions.
                Echo of value provided on request.
              example: f8f68709-8e5d-4c19-8ca0-2eaffef4ec57
            participant_unique_id2:
              type: string
              nullable: true
              description: >
                Provided on success and in certain failure conditions if sent on
                original request. Echo of value provided on request.
              example: 257b5bae-d52f-42e2-8f2c-0700d8d7a7a5
    ErrorResponse:
      type: object
      properties:
        status:
          type: integer
          example: 700
        client_message:
          type: string
          example: Account not currently available for payment
        data:
          type: object
          properties:
            request_timestamp:
              type: integer
              format: int64
              example: 1587052280
  securitySchemes:
    HmacAuth:
      type: http
      scheme: hmac-sha512
      description: >-
        HMAC-SHA512 signed Authorization header. See the Authentication page for
        the complete signing guide.

````