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 }