openapi: 3.0.3
info:
  title: IngoPay API — Push Method Card
  description: >
    Submit a request to push funds to a customer's debit or credit card
    (account_type: CA).


    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
paths:
  /gateway/process--card:
    post:
      summary: Push funds to a debit or credit card
      description: >
        Initiates a push disbursement to a customer's debit or credit card using
        a token from a prior Verify call. `account_type` must always be `CA` for
        this operation.
      operationId: processCard
      tags:
        - Push Payments
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProcessCardRequest'
            example:
              participant_id: 12345
              account_type: CA
              amount: 1010.5
              customer_account_token: ca875cce-58c0-46a0-8f14-676190cc7df6
              source_of_funds: 4
              recipient_phone: '1231231234'
              participant_unique_id1: 1f2739ed-3531-4af2-ae36-e6faf7936462
              participant_unique_id2: 90759390-01c7-47e7-8a90-6faa89b18ff6
              sender:
                sender_account: ACC-00123456
                name_personal:
                  first_name: Alex
                  last_name: Rivera
                contact_address:
                  address1: 100 Innovation Way
                  address2: ''
                  city: Anytown
                  state: GA
                  zip: '00000'
                contact_telcom:
                  email: jane.doe@example.com
                  phone_home: '5555550101'
                  phone_mobile: '5555550100'
              ledger:
                api_key: lk_live_abc123xyz
                user_id: usr_00456
                entity_type: program
                entity_id: ent_00789
              timestamp: 1576099257
              version: 11
      responses:
        '200':
          description: Payment accepted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProcessCardResponse'
              example:
                status: 100
                client_message: Success
                data:
                  estimated_posting_time: Payment will post within 5 minutes.
                  estimated_posting_date: 04/21/2026
                  transaction_id: 2361525
                  request_timestamp: 1576099632
                  customer_account_token: ca875cce-58c0-46a0-8f14-676190cc7df6
                  participant_unique_id1: 1f2739ed-3531-4af2-ae36-e6faf7936462
                  participant_unique_id2: 90759390-01c7-47e7-8a90-6faa89b18ff6
                time: '1.1275'
        '400':
          description: Validation error — check request body
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                status: 400
                client_message: Validation Error
                data:
                  request_timestamp: 1576099632
components:
  schemas:
    ProcessCardRequest:
      type: object
      required:
        - participant_id
        - account_type
        - amount
        - customer_account_token
        - source_of_funds
        - participant_unique_id1
        - timestamp
        - version
      properties:
        participant_id:
          type: integer
          description: Unique participant identifier assigned by Ingo.
          example: 12345
        account_type:
          type: string
          enum:
            - CA
          minLength: 1
          description: |
            Always `CA` for card-based (debit or credit) disbursements.
          example: CA
        amount:
          type: number
          format: float
          minimum: 0.01
          description: Amount of the transaction.
          example: 1010.5
        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. When provided, raw
            account fields (`account`, `expiration_date`,
            `recipient_first_name`, `recipient_last_name`, `recipient_address1`,
            `recipient_city`, `recipient_state`, `recipient_zip`) must be
            omitted.
          example: ca875cce-58c0-46a0-8f14-676190cc7df6
        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
        recipient_phone:
          type: string
          maxLength: 10
          description: 10-digit recipient phone number.
          example: '1231231234'
        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: 1f2739ed-3531-4af2-ae36-e6faf7936462
        participant_unique_id2:
          type: string
          maxLength: 255
          nullable: true
          description: >
            Optional second participant assigned transaction ID. Does not appear
            on daily reconciliation reports.
          example: 90759390-01c7-47e7-8a90-6faa89b18ff6
        sender:
          $ref: '#/components/schemas/Sender'
        ledger:
          $ref: '#/components/schemas/Ledger'
        timestamp:
          type: integer
          format: int64
          description: Unix timestamp of the request.
          example: 1576099257
        version:
          type: integer
          description: API version of the request. Current version is 11.
          example: 11
        store_id:
          type: string
          maxLength: 255
          description: >-
            Client-assigned store ID. Required if participant is configured for
            retail card-present.
          example: STORE-001
        terminal_id:
          type: string
          maxLength: 255
          description: >-
            Client-assigned terminal ID. Required if participant is configured
            for retail card-present.
          example: TERM-001
        clerk_id:
          type: string
          maxLength: 255
          description: >-
            Client-assigned clerk ID. Required if participant is configured for
            retail card-present.
          example: CLERK-001
    Sender:
      type: object
      description: >
        Data about the transaction sender. Required for clients using sender
        data.
      required:
        - sender_account
        - name_personal
        - contact_address
        - contact_telcom
      properties:
        sender_account:
          type: string
          minLength: 1
          maxLength: 100
          description: Sender account identifier.
          example: ACC-00123456
        name_personal:
          type: object
          required:
            - first_name
            - last_name
          properties:
            first_name:
              type: string
              minLength: 1
              maxLength: 150
              description: Sender first name.
              example: Jane
            last_name:
              type: string
              minLength: 1
              maxLength: 150
              description: Sender last name.
              example: Doe
        contact_address:
          type: object
          required:
            - address1
            - city
            - state
            - zip
          properties:
            address1:
              type: string
              minLength: 1
              maxLength: 150
              description: Street address line 1.
              example: 123 Main St
            address2:
              type: string
              maxLength: 150
              nullable: true
              description: Optional street address line 2 (e.g. Apt, Suite).
              example: Apt 4B
            city:
              type: string
              minLength: 1
              maxLength: 150
              description: City.
              example: Atlanta
            state:
              type: string
              minLength: 2
              maxLength: 2
              pattern: >-
                ^(?:A[LKSZRAEP]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$
              description: State (standard US postal abbreviation).
              example: GA
            zip:
              type: string
              maxLength: 10
              pattern: ^[0-9]{5}(?:-[0-9]{4})?$
              description: |
                5-digit zip or zip+4 in xxxxx-xxxx format.
              example: '30313'
        contact_telcom:
          type: object
          required:
            - email
          properties:
            email:
              type: string
              minLength: 1
              maxLength: 150
              description: Sender email address.
              example: jane.doe@example.com
            phone_home:
              type: string
              maxLength: 10
              nullable: true
              description: Home phone number.
              example: '4045550100'
            phone_mobile:
              type: string
              maxLength: 10
              nullable: true
              description: Mobile phone number.
              example: '4045550101'
    Ledger:
      type: object
      description: >
        Required for clients configured for ledger service. Exclude entirely if
        not applicable to your integration.
      required:
        - api_key
        - user_id
        - entity_type
        - entity_id
      properties:
        api_key:
          type: string
          minLength: 1
          maxLength: 100
          description: API key associated with the ledger program.
          example: lk_live_abc123xyz
        user_id:
          type: string
          minLength: 1
          maxLength: 100
          description: User ID associated with the ledger program.
          example: usr_00456
        entity_type:
          type: string
          minLength: 1
          maxLength: 50
          description: >
            Entity type for the ledger. Accepted values: `program`, `business`,
            `user`.
          enum:
            - program
            - business
            - user
          example: program
        entity_id:
          type: string
          maxLength: 100
          nullable: true
          description: Entity ID associated with the ledger.
          example: ent_00789
    ProcessCardResponse:
      type: object
      properties:
        status:
          type: integer
          description: >
            Numeric code describing the status of the API request. 100 =
            Success, 102 = Success - Pending Issuer Response, 130 = Success -
            OFAC Suspended.
          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 of the payment.
              example: Payment will post within 5 minutes.
            estimated_posting_date:
              type: string
              description: |
                Provided on success. Estimated posting date of the payment.
              example: 04/21/2026
            transaction_id:
              type: integer
              description: >
                Always provided on success and in certain failure conditions.
                Unique transaction identifier generated with each successful
                request. Log this value — Ingo Payment Services will request it
                for support interactions.
              example: 2361525
            request_timestamp:
              type: integer
              format: int64
              description: Unix timestamp of the request.
              example: 1576099632
            customer_account_token:
              type: string
              description: Echo of value from request. Provided on success.
              example: ca875cce-58c0-46a0-8f14-676190cc7df6
            participant_unique_id1:
              type: string
              description: >
                Always provided on success and in certain failure conditions.
                Echo of value provided on request.
              example: 1f2739ed-3531-4af2-ae36-e6faf7936462
            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: 90759390-01c7-47e7-8a90-6faa89b18ff6
        time:
          type: string
          description: Time in seconds to complete the request.
          example: '1.1275'
    ErrorResponse:
      type: object
      properties:
        status:
          type: integer
          example: 710
        client_message:
          type: string
          example: Issuer Declined - Customer should contact card issuer
        data:
          type: object
          properties:
            request_timestamp:
              type: integer
              format: int64
              example: 1576099632
  securitySchemes:
    HmacAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        HMAC-SHA512 signed Authorization header. See the Authentication page for
        the complete signing guide.
security:
  - HmacAuth: []
