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.

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 }