Jack Henry Payments

Jack Henry Payments unifies ACH origination, wire/A2A payments, Bill Payments, Remote Deposit Capture (consumer + commercial), card acceptance, and peer-to-peer rails behind a developer portal with sandbox, SDKs, and downloadable tools. Includes the Payments Orchestrator that routes across rails and supports virtual accounts.

Jack Henry Payments is one of 11 APIs that Jack Henry & Associates publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

Tagged areas include Payments, ACH, Wire Transfers, Bill Pay, and Remote Deposit Capture. The published artifact set on APIs.io includes an OpenAPI specification.

OpenAPI Specification

jack-henry-payments-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Jack Henry Payments
  description: |
    Jack Henry Payments developer portal — described as "Everything you
    need to simplify and seamlessly make, take, and manage payments."
    Unifies ACH origination, wire / A2A payments, Bill Payments, Remote
    Deposit Capture (consumer + commercial), card acceptance, and
    peer-to-peer rails behind a single sandbox-equipped developer surface.
    The Payments Orchestrator routes across rails and supports virtual
    accounts.
  version: v1
servers:
  - url: https://api.payments.jackhenry.com
    description: Jack Henry Payments production
  - url: https://api.payments.sandbox.jackhenry.com
    description: Jack Henry Payments sandbox
tags:
  - name: ACH Origination
    description: ACH credit and debit origination.
  - name: Wire Transfers
    description: Domestic A2A wire payments.
  - name: Bill Payments
    description: Consumer and small-business bill pay.
  - name: Remote Deposit Capture
    description: Consumer and commercial RDC.
  - name: Cards
    description: Card acceptance and processing.
  - name: Peer To Peer
    description: P2P transfers via partner networks.
  - name: Payments Orchestrator
    description: Cross-rail routing and virtual accounts.
security:
  - bearerAuth: []
paths:
  /payments/v1/ach/credits:
    post:
      summary: Originate ACH Credit
      operationId: originateAchCredit
      tags: [ACH Origination]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/AchCreditRequest' }
      responses:
        '201':
          description: ACH credit accepted.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/AchTransaction' }
  /payments/v1/ach/debits:
    post:
      summary: Originate ACH Debit
      operationId: originateAchDebit
      tags: [ACH Origination]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/AchDebitRequest' }
      responses:
        '201':
          description: ACH debit accepted.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/AchTransaction' }
  /payments/v1/wires:
    post:
      summary: Send Wire
      operationId: sendWire
      tags: [Wire Transfers]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/WireRequest' }
      responses:
        '201':
          description: Wire submitted.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Wire' }
  /payments/v1/bill-pay/payments:
    post:
      summary: Submit Bill Payment
      operationId: submitBillPayment
      tags: [Bill Payments]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/BillPaymentRequest' }
      responses:
        '201':
          description: Bill payment scheduled.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/BillPayment' }
  /payments/v1/rdc/deposits:
    post:
      summary: Submit Remote Deposit
      operationId: submitRemoteDeposit
      tags: [Remote Deposit Capture]
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required: [accountNumber, amount, frontImage, backImage]
              properties:
                accountNumber: { type: string }
                amount: { type: number, format: double }
                frontImage: { type: string, format: binary }
                backImage: { type: string, format: binary }
      responses:
        '201':
          description: RDC deposit accepted.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/RdcDeposit' }
  /payments/v1/cards/authorizations:
    post:
      summary: Authorize Card Payment
      operationId: authorizeCard
      tags: [Cards]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/CardAuthRequest' }
      responses:
        '201':
          description: Card authorization result.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/CardAuthResult' }
  /payments/v1/p2p/transfers:
    post:
      summary: Send Peer To Peer Transfer
      operationId: sendP2P
      tags: [Peer To Peer]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/P2PRequest' }
      responses:
        '201':
          description: P2P transfer submitted.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/P2PTransfer' }
  /payments/v1/orchestrator/payments:
    post:
      summary: Route Payment Through Orchestrator
      operationId: routePayment
      tags: [Payments Orchestrator]
      description: |
        Submit a single payment intent; the Orchestrator selects the
        appropriate rail (ACH, Wire, Card, RTP) based on cost, speed,
        and policy.
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/OrchestratorRequest' }
      responses:
        '201':
          description: Payment routed.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/OrchestratorResult' }
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
  schemas:
    AchCreditRequest:
      type: object
      required: [originatorAccountId, beneficiaryRoutingNumber, beneficiaryAccountNumber, amount, secCode]
      properties:
        originatorAccountId: { type: string }
        beneficiaryRoutingNumber: { type: string, pattern: '^[0-9]{9}$' }
        beneficiaryAccountNumber: { type: string }
        beneficiaryName: { type: string }
        amount: { type: number, format: double }
        secCode:
          type: string
          enum: [PPD, CCD, WEB, TEL]
        effectiveDate: { type: string, format: date }
        memo: { type: string }
    AchDebitRequest:
      allOf:
        - $ref: '#/components/schemas/AchCreditRequest'
    AchTransaction:
      type: object
      properties:
        id: { type: string, format: uuid }
        status:
          type: string
          enum: [Submitted, Processing, Settled, Returned, Failed]
        traceNumber: { type: string }
        effectiveDate: { type: string, format: date }
        amount: { type: number, format: double }
    WireRequest:
      type: object
      required: [originatorAccountId, beneficiaryName, beneficiaryAccountNumber, beneficiaryRoutingNumber, amount]
      properties:
        originatorAccountId: { type: string }
        beneficiaryName: { type: string }
        beneficiaryAccountNumber: { type: string }
        beneficiaryRoutingNumber: { type: string, pattern: '^[0-9]{9}$' }
        amount: { type: number, format: double }
        currency: { type: string, default: USD }
        memo: { type: string }
    Wire:
      type: object
      properties:
        id: { type: string, format: uuid }
        status:
          type: string
          enum: [Pending, Processing, Sent, Failed, Cancelled]
        imadOmad: { type: string, description: Federal Reserve IMAD/OMAD reference }
        amount: { type: number }
        sentAt: { type: string, format: date-time, nullable: true }
    BillPaymentRequest:
      type: object
      required: [payerAccountId, payeeId, amount, dueDate]
      properties:
        payerAccountId: { type: string }
        payeeId: { type: string }
        amount: { type: number, format: double }
        dueDate: { type: string, format: date }
        memo: { type: string }
    BillPayment:
      type: object
      properties:
        id: { type: string, format: uuid }
        deliveryMethod:
          type: string
          enum: [Electronic, Check]
        estimatedDeliveryDate: { type: string, format: date }
        status:
          type: string
          enum: [Scheduled, Processing, Delivered, Failed, Cancelled]
    RdcDeposit:
      type: object
      properties:
        id: { type: string, format: uuid }
        status:
          type: string
          enum: [Pending, Accepted, Rejected, Held]
        availableDate: { type: string, format: date }
        amount: { type: number, format: double }
    CardAuthRequest:
      type: object
      required: [cardToken, amount, merchantId]
      properties:
        cardToken: { type: string }
        amount: { type: number, format: double }
        currency: { type: string, default: USD }
        merchantId: { type: string }
        cvvProvided: { type: boolean }
    CardAuthResult:
      type: object
      properties:
        id: { type: string, format: uuid }
        approved: { type: boolean }
        responseCode: { type: string }
        authCode: { type: string }
        networkReference: { type: string }
    P2PRequest:
      type: object
      required: [senderAccountId, recipientToken, amount]
      properties:
        senderAccountId: { type: string }
        recipientToken: { type: string, description: Email or phone number }
        amount: { type: number, format: double }
        network:
          type: string
          enum: [Zelle, RTP]
        memo: { type: string }
    P2PTransfer:
      type: object
      properties:
        id: { type: string, format: uuid }
        status:
          type: string
          enum: [Pending, Sent, Delivered, Failed]
        network: { type: string }
    OrchestratorRequest:
      type: object
      required: [originatorAccountId, beneficiary, amount]
      properties:
        originatorAccountId: { type: string }
        beneficiary:
          type: object
          properties:
            name: { type: string }
            accountNumber: { type: string }
            routingNumber: { type: string }
            email: { type: string }
            phone: { type: string }
        amount: { type: number, format: double }
        currency: { type: string, default: USD }
        speed:
          type: string
          enum: [SameDay, NextDay, Standard, Instant]
        memo: { type: string }
        policyHints:
          type: object
          additionalProperties: true
    OrchestratorResult:
      type: object
      properties:
        id: { type: string, format: uuid }
        chosenRail:
          type: string
          enum: [ACH, Wire, Card, RTP, Zelle]
        status:
          type: string
          enum: [Routed, Pending, Failed]
        downstreamId: { type: string }