JPMorgan Chase Pay By Bank PIS
JPMorgan Chase Pay By Bank PIS from JPMorgan Chase — 12 path(s) described in OpenAPI.
JPMorgan Chase Pay By Bank PIS from JPMorgan Chase — 12 path(s) described in OpenAPI.
# Harvested verbatim from the J.P. Morgan Payments Developer Portal.
# method: searched
# source: https://developer.payments.jpmorgan.com/api/llm-content?path=en%2Fapi%2Ftreasury%2Fpay-by-bank%2Fpis-oas.md
# generated: '2026-07-28'
openapi: 3.0.0
info:
title: Pay By Bank PIS
version: 1.1.4
description: "## Pay By Bank v1 - PIS API\n\n---\n\n> J.P. Morgan as a registered Third Party Provider\
\ (**TPP**) of Open Banking services,\n> offers a seamless integration platform for Pay by Bank such\
\ that:\n> - clients can initiate payments (serving as a Payment Initiation Service Provider, or **PISP**)\
\ \n>"
contact:
name: JPMorgan Chase & Co. API Support
email: imsd.security.operations@jpmorgan.com
url: https://developer.payments.jpmorgan.com/contact/support
servers:
- url: https://apigateway.jpmorgan.com/tsapi/v1
description: PRODUCTION - MTLS
- url: https://api-mock.payments.jpmorgan.com/tsapi/v1
description: MOCK
tags:
- name: PIS
description: Payment Initiation Services
- name: Refunds
description: Refund initiation services.
paths:
/pisp/providers:
post:
summary: Request for Providers
description: "- Clients can request a list of ASPSPs reachable using J.P. Morgan's PISP\nservices\
\ in each country.\n- For the purposes of this API, ASPSPs are referred to as 'Providers.' \n\
- The request for retrieving a particular country's list of supported providers must contain the\
\ correct country code."
tags:
- PIS
operationId: retrievePISProviders
parameters:
- $ref: '#/components/parameters/ContentType'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PispProvidersRequest'
examples:
ExamplePispProvidersRequest:
$ref: '#/components/examples/PispProvidersRequestExample'
required: false
x-examples:
- name: ExamplePispProvidersRequest
description: Example country code
parameters:
body:
countryCode: XF
responses:
'200':
description: Successful
content:
application/json:
schema:
$ref: '#/components/schemas/PispProvidersResponse'
examples:
ExamplePispProvidersResponse:
$ref: '#/components/examples/PispProvidersResponseExample'
'400':
description: "Bad Request\n\n**The following table lists and describes the error codes applicable**\n\
\n| Error Code | Meaning |\n|------------|-----------------------------------------------|\n\
| PISP-001 |Customer does not exist within our system | \n| PISP-003 |Invalid\
\ JSON format |"
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
InvalidJSONFormatExample:
$ref: '#/components/examples/InvalidJSONFormatExample'
'403':
description: 'Forbidden
**The following table lists and describes the error codes applicable**
| Error Code | Meaning |
|------------|---------------------|
| PISP-006 |Unauthorized access |'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
InvalidJSONFormatExample:
$ref: '#/components/examples/UnauthorizedAccessExample'
'500':
description: 'Internal server error
**The following table lists and describes the error codes applicable**
| Error Code | Meaning |
|------------|---------------------------|
| PISP-002 |Internal server error |'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: "Service Unavailable\n\n**The following table lists and describes the error codes\
\ applicable**\n\n| Error Code | Meaning \
\ |\n|------------|------------------------------------------------------------|\n| PISP-004\
\ |System exception | \n| PISP-005 |No customer\
\ exists associated with paymentId: `<paymentID>` |\n| PISP-017 |The JSON request is incorrectly\
\ formed |\n| PISP-017 |Customer is locked \
\ |\n| PISP-017 |We do not support the received provider_mode \
\ |\n| PISP-017 |The return_to URL exceeds 2040 characters. |\n|\
\ PISP-017 |Invalid payment attributes. |\n| PISP-017 \
\ |Certificate not found. |\n| PISP-017 |Action not\
\ supported |\n| PISP-017 |The accessed provider\
\ is inactive at the moment |\n| PISP-017 |The provider is temporary unavailable.\
\ |\n| PISP-017 |Payment already authorized \
\ |\n| PISP-017 |Sending a provider_code that is not present in our system |\n\
| PISP-017 |Failed to create the payment |\n| PISP-017 \
\ |The customer tried to initiate a payment with invalid credentials|\n| PISP-017 |Payment\
\ already finished. |"
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/pisp/payment/request:
post:
summary: Request for Payment Initiation
description: This request initiates a payment on a PSU's behalf.
tags:
- PIS
operationId: createPaymentIntent
parameters:
- $ref: '#/components/parameters/ContentType'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Payment'
examples:
ExampleSEPAPaymentRequest:
$ref: '#/components/examples/SEPAPaymentRequestExample'
ExampleFPSPaymentRequest:
$ref: '#/components/examples/FPSPaymentRequestExample'
ExampleBACSPaymentRequest:
$ref: '#/components/examples/BACSPaymentRequestExample'
ExampleCHAPSPaymentRequest:
$ref: '#/components/examples/CHAPSPaymentRequestExample'
x-examples:
- name: ExampleSEPAPaymentRequest
description: Example Request for an SEPA payment
parameters:
body:
customer_id: 00ef7b8enca1elA1tm6bmyphhgk3
country_code: DE
provider_code: berliner_sparkasse_oauth_client_de
payee_description: MusicCorpDE
template_identifier: SEPA
return_to: https://www.merchant.com/signup/redirectRequestLanding?action=nextAction&skipMoneyballModeRedirect=true&authURL=1695271209906.YsdmtRcveemWqg%252BQFVHNwRJO8B0%3D&flwssn=fb616054-ae67-4767-81a9-fb4d0f9976c0&nftoken=BQAbAAEBECYycrotnMdMPM%2BW6p7%2BWC%2BAoKPmq4VIBpWZVXQlGJnjdG0QZXjPij2O0eICZncDDLrE2n%2FMLxZvSBxYfto72m9nvCUjz0pZlnd%2Fcf1UnJStNNky3qwZbKMAJP2PeosCnbQ8fXIifdfaMcXZKZEKCSaOX1LpCM1Xx0kB6yfmT1FuTV5NlaphUclni%2FYt7BNVqC4tyjPAM9uUkqCPMBZzxgw%2FGeUBV2kXdmfct9EtE5PMGms%3D&redirectStrategy=open-banking
payment_attributes:
end_to_end_id: '20018300321270540'
creditor_name: MusicCorp
creditor_iban: DEXXXXXXXXXXXXXXXXXXXX
debtor_iban: DEXXXXXXXXXXXXXXXXXXXX
description: For goods
amount: '17.99'
currency_code: EUR
mode: Normal
- name: ExampleFPSPaymentRequest
description: Example Request for an FPS payment
parameters:
body:
customer_id: 00ef7b8enca1elA1tm6bmyphhgk3
country_code: DE
provider_code: berliner_sparkasse_oauth_client_de
payee_description: MusicCorpDE
template_identifier: SEPA
return_to: https://www.merchant.com/signup/redirectRequestLanding?action=nextAction&skipMoneyballModeRedirect=true&authURL=1695271209906.YsdmtRcveemWqg%252BQFVHNwRJO8B0%3D&flwssn=fb616054-ae67-4767-81a9-fb4d0f9976c0&nftoken=BQAbAAEBECYycrotnMdMPM%2BW6p7%2BWC%2BAoKPmq4VIBpWZVXQlGJnjdG0QZXjPij2O0eICZncDDLrE2n%2FMLxZvSBxYfto72m9nvCUjz0pZlnd%2Fcf1UnJStNNky3qwZbKMAJP2PeosCnbQ8fXIifdfaMcXZKZEKCSaOX1LpCM1Xx0kB6yfmT1FuTV5NlaphUclni%2FYt7BNVqC4tyjPAM9uUkqCPMBZzxgw%2FGeUBV2kXdmfct9EtE5PMGms%3D&redirectStrategy=open-banking
payment_attributes:
end_to_end_id: '20018300321270540'
creditor_name: MusicCorp
creditor_iban: DEXXXXXXXXXXXXXXXXXXXX
debtor_iban: DEXXXXXXXXXXXXXXXXXXXX
description: For goods
amount: '17.99'
currency_code: EUR
mode: Normal
- name: ExampleBACSPaymentRequest
description: Example Request for a BACS payment
parameters:
body:
customer_id: D310252
country_code: GB
provider_code: barclays_oauth_client_gb
payee_description: barclays PVT 10-25-23
template_identifier: BACS
return_to: https://sites.obtest.com/sites/cib
payment_attributes:
end_to_end_id: PISP_1025_PVT_002
creditor_name: John Smith
creditor_sort_code: XXX242
creditor_account_number: XXXXX035
description: For Goods
amount: '100.00'
currency_code: GBP
- name: ExampleCHAPSPaymentRequest
description: Example Request for a CHAPS payment
parameters:
body:
customer_id: D310252
country_code: GB
provider_code: barclays_oauth_client_gb
payee_description: barclays PVT 10-25-23
template_identifier: CHAPS
return_to: https://sites.obtest.com/sites/cib
payment_attributes:
end_to_end_id: PISP_1025_PVT_002
creditor_name: John Smith
creditor_sort_code: XXX242
creditor_account_number: XXXXX035
description: For Goods
amount: '100.00'
currency_code: GBP
responses:
'200':
description: Successful
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentResponse'
examples:
ExamplePaymentResponse:
$ref: '#/components/examples/PaymentResponseExample'
'400':
description: "Bad Request\n\n**The following table lists and describes the error codes applicable**\n\
\n| Error Code | Meaning |\n|------------|-----------------------------------------------|\n\
| PISP-001 |Customer does not exist within our system | \n| PISP-003 |Invalid\
\ JSON format |"
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
InvalidJSONFormatExample:
$ref: '#/components/examples/InvalidJSONFormatExample'
'403':
description: 'Forbidden
**The following table lists and describes the error codes applicable**
| Error Code | Meaning |
|------------|---------------------|
| PISP-006 |Unauthorized access |'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
InvalidJSONFormatExample:
$ref: '#/components/examples/UnauthorizedAccessExample'
'500':
description: 'Internal server error
**The following table lists and describes the error codes applicable**
| Error Code | Meaning |
|------------|---------------------------|
| PISP-002 |Internal server error |'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: "Service Unavailable\n\n**The following table lists and describes the error codes\
\ applicable**\n\n| Error Code | Meaning \
\ |\n|------------|------------------------------------------------------------|\n| PISP-004\
\ |System exception | \n| PISP-005 |No customer\
\ exists associated with paymentId: `<paymentID>` |\n| PISP-017 |The JSON request is incorrectly\
\ formed |\n| PISP-017 |Customer is locked \
\ |\n| PISP-017 |We do not support the received provider_mode \
\ |\n| PISP-017 |The return_to URL exceeds 2040 characters. |\n|\
\ PISP-017 |Invalid payment attributes. |\n| PISP-017 \
\ |Certificate not found. |\n| PISP-017 |Action not\
\ supported |\n| PISP-017 |The accessed provider\
\ is inactive at the moment |\n| PISP-017 |The provider is temporary unavailable.\
\ |\n| PISP-017 |Payment already authorized \
\ |\n| PISP-017 |Sending a provider_code that is not present in our system |\n\
| PISP-017 |Failed to create the payment |\n| PISP-017 \
\ |The customer tried to initiate a payment with invalid credentials|\n| PISP-017 |Payment\
\ already finished. |"
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/pisp/payment/authorize:
post:
summary: Request for Payment Authorization
description: "This request is used to authorize a payment. \n\n**NOTE: The request payload MUST\
\ be digitally signed and encrypted using the Signing Certificate**"
operationId: createPaymentAuthorization
tags:
- PIS
parameters:
- $ref: '#/components/parameters/ContentType'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentAuthorizationRequest'
examples:
ExamplePaymentAuthorizeRequest:
$ref: '#/components/examples/PaymentAuthorizationRequestExample'
x-examples:
- name: ExamplePaymentAuthorizeRequest
description: Example Request for payment Authorization
parameters:
body:
paymentId: '1105291498426995690'
authToken: a8a96b6fa3932885be4a46162fd7a0c1579e65a0803e4946a67dae5279dc0c13&end_to_end_id=00000002
responses:
'200':
description: Successful
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentAuthStatusResponse'
examples:
ExamplePaymentAuthorizationresponse:
$ref: '#/components/examples/PaymentAuthStatusResponseExample'
'400':
description: "Bad Request\n\n**The following table lists and describes the error codes applicable**\n\
\n| Error Code | Meaning |\n|------------|-----------------------------------------------|\n\
| PISP-001 |Customer does not exist within our system | \n| PISP-003 |Invalid\
\ JSON format |"
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
InvalidJSONFormatExample:
$ref: '#/components/examples/InvalidJSONFormatExample'
'403':
description: 'Forbidden
**The following table lists and describes the error codes applicable**
| Error Code | Meaning |
|------------|---------------------|
| PISP-006 |Unauthorized access |'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
InvalidJSONFormatExample:
$ref: '#/components/examples/UnauthorizedAccessExample'
'500':
description: 'Internal server error
**The following table lists and describes the error codes applicable**
| Error Code | Meaning |
|------------|---------------------------|
| PISP-002 |Internal server error |'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: "Service Unavailable\n\n**The following table lists and describes the error codes\
\ applicable**\n\n| Error Code | Meaning \
\ |\n|------------|------------------------------------------------------------|\n| PISP-004\
\ |System exception | \n| PISP-005 |No customer\
\ exists associated with paymentId: `<paymentID>` |\n| PISP-017 |The JSON request is incorrectly\
\ formed |\n| PISP-017 |Customer is locked \
\ |\n| PISP-017 |We do not support the received provider_mode \
\ |\n| PISP-017 |The return_to URL exceeds 2040 characters. |\n|\
\ PISP-017 |Invalid payment attributes. |\n| PISP-017 \
\ |Certificate not found. |\n| PISP-017 |Action not\
\ supported |\n| PISP-017 |The accessed provider\
\ is inactive at the moment |\n| PISP-017 |The provider is temporary unavailable.\
\ |\n| PISP-017 |Payment already authorized \
\ |\n| PISP-017 |Sending a provider_code that is not present in our system |\n\
| PISP-017 |Failed to create the payment |\n| PISP-017 \
\ |The customer tried to initiate a payment with invalid credentials|\n| PISP-017 |Payment\
\ already finished. |"
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/pisp/payment/status:
post:
summary: Request for Payment Status
description: 'This request retrieves the current status of a previously initiated
payment.'
operationId: retrievePaymentStatus
tags:
- PIS
parameters:
- $ref: '#/components/parameters/ContentType'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentStatusRequest'
examples:
ExamplePaymentStatusRequest:
$ref: '#/components/examples/PaymentStatusRequestExample'
x-examples:
- name: ExamplePaymentStatusRequest
description: Example Payment Status Request
parameters:
body:
customer_id: '1105291496237568999'
payment_id: '1104531176632095201'
responses:
'200':
description: Successful
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentAuthStatusResponse'
examples:
ExamplesPaymentStatusResponse:
$ref: '#/components/examples/PaymentAuthStatusResponseExample'
'400':
description: "Bad Request\n\n**The following table lists and describes the error codes applicable**\n\
\n| Error Code | Meaning |\n|------------|-----------------------------------------------|\n\
| PISP-001 |Customer does not exist within our system | \n| PISP-003 |Invalid\
\ JSON format |"
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
InvalidJSONFormatExample:
$ref: '#/components/examples/InvalidJSONFormatExample'
'403':
description: 'Forbidden
**The following table lists and describes the error codes applicable**
| Error Code | Meaning |
|------------|---------------------|
| PISP-006 |Unauthorized access |'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
InvalidJSONFormatExample:
$ref: '#/components/examples/UnauthorizedAccessExample'
'500':
description: 'Internal server error
**The following table lists and describes the error codes applicable**
| Error Code | Meaning |
|------------|---------------------------|
| PISP-002 |Internal server error |'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: "Service Unavailable\n\n**The following table lists and describes the error codes\
\ applicable**\n\n| Error Code | Meaning \
\ |\n|------------|------------------------------------------------------------|\n| PISP-004\
\ |System exception | \n| PISP-005 |No customer\
\ exists associated with paymentId: `<paymentID>` |\n| PISP-017 |The JSON request is incorrectly\
\ formed |\n| PISP-017 |Customer is locked \
\ |\n| PISP-017 |We do not support the received provider_mode \
\ |\n| PISP-017 |The return_to URL exceeds 2040 characters. |\n|\
\ PISP-017 |Invalid payment attributes. |\n| PISP-017 \
\ |Certificate not found. |\n| PISP-017 |Action not\
\ supported |\n| PISP-017 |The accessed provider\
\ is inactive at the moment |\n| PISP-017 |The provider is temporary unavailable.\
\ |\n| PISP-017 |Payment already authorized \
\ |\n| PISP-017 |Sending a provider_code that is not present in our system |\n\
| PISP-017 |Failed to create the payment |\n| PISP-017 \
\ |The customer tried to initiate a payment with invalid credentials|\n| PISP-017 |Payment\
\ already finished. |"
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/pisp/payments/refunds:
post:
summary: Request for Payment refunds
description: This request initiates a refund on the payments made before
operationId: createRefunds
tags:
- Refunds
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RefundsRequest'
required: true
x-examples:
- name: PSD2 Payment Refunds
description: Refund request payload
parameters:
body:
paymentIdentifiers:
endToEndId: '123123123'
paymentId: '1401642'
amount:
amount: 100
currency: GBP
reason: REQUESTED_BY_CUSTOMER
mode: INSTANT
responses:
'202':
description: Refund has been accepted for processing
content:
application/json:
schema:
$ref: '#/components/schemas/RefundsResponse'
'400':
description: "Bad Request.\n\n**List of Error codes and Rule definitions. errorDescription is\n\
dynamically generated hence not shown here.\nRefer the table below**\n| Error Code | Meaning\
\ |\n|-------------|------------------------------------------------------|\n\
| 10001 | Mandatory field is missing or invalid |\n| 10002 | Minimum\
\ length validation failure |\n| 10003 | Maximum length validation\
\ failure |\n| 10006 | Amount validation failure ~ value less than\
\ minimum | \n| 10007 | Amount validation failure ~ value is not a number | \n| \
\ 10008 | Validation failure ~ unexpected value provided | \n| 10009 | Invalid\
\ Id provided | \n| 12000 | System Error \
\ | \n| 13000 | Uncategorized Error \
\ | \n\n**Standard API Gateway Error codes and descriptions** \n\n| Error Code\
\ | Meaning |\n|--------------|------------------------------|\n| GCA-030\
\ | API Processing Error |"
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorsInit'
'403':
description: 'Forbidden.
| Error Code | Meaning |
|--------------|--------------------------------------------|
| GCA-001 | Client is not eligible for the API Service |
| GCA-003 | Client is not eligible for the API Service |'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'503':
description: 'Service Unavailable.
| Error Code | Meaning |
|--------------|-------------------|
| GCA-099 | System Unavailable |'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
/pisp/payments/refunds/{refundId}:
get:
summary: Retrieve refund status
description: This request retrieves the refund status and details based on the given refund Id
tags:
- Refunds
operationId: getRefunds
parameters:
- $ref: '#/components/parameters/RefundId'
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/RefundsResponse'
'400':
description: "Bad Request.\n\n**List of Error codes and Rule definitions. errorDescription is\n\
dynamically generated hence not shown here**\n| Error Code | Meaning \
\ |\n|-------------|------------------------------------------------------|\n\
| 10001 | Mandatory field is missing or invalid |\n| 10002 | Minimum\
\ length validation failure |\n| 10003 | Maximum length validation\
\ failure |\n| 10006 | Amount validation failure ~ value less than\
\ minimum | \n| 10007 | Amount validation failure ~ value is not a number | \n| \
\ 10008 | Validation failure ~ unexpected value provided | \n| 10009 | Invalid\
\ Id provided | \n| 12000 | System Error \
\ | \n| 13000 | Uncategorized Error \
\ | \n\n**Standard API Gateway Error codes and descriptions** \n\n| Error Code\
\ | Meaning |\n|--------------|------------------------------|\n| GCA-030\
\ | API Processing Error |"
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorsInit'
'403':
description: 'Forbidden.
| Error Code | Meaning |
|--------------|--------------------------------------------|
| GCA-001 | Client is not eligible for the API Service |
| GCA-003 | Client is not eligible for the API Service |'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'503':
description: 'Service Unavailable.
| Error Code | Meaning |
|--------------|-------------------|
| GCA-099 | System Unavailable |'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
/aisp/providers:
post:
deprecated: true
summary: Request for Providers
description: '<!-- theme: warning-->
> Deprecated
>
> Sunset: 30 May 2026
- This request retrieves a list of ASPSPs reachable using J.P. Morgan''s AISP services in each
country.
- For the purposes of this API, ASPSPs are referred to as Providers.
- The request for retrieving a particular country''s list of supported Providers must contain
the correct country code'
tags:
- AIS
operationId: retrieveAISProviders
parameters:
- $ref: '#/components/parameters/ContentType'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProvidersRequest'
required: false
x-examples:
- name: ExampleProvidersRequest
description: Example request to retrieve providers
parameters:
body:
countryCode: XF
responses:
'200':
description: Successful
content:
application/json:
schema:
$ref: '#/components/schemas/ProvidersResponse'
examples:
ExamplesProvidersResponse:
$ref: '#/components/examples/ProvidersResponseExample'
'400':
description: 'Bad Request.
**The following table lists and describes the error codes applicable**
| Error Code | Meaning |
|------------|------------------------------------------------------------------------------------------------------|
| AISP-001 |Values are missing for properties: `<properties>` |
| AISP-002 |Invalid consent scopes: `<invalid_scopes>` |
| AISP-003 |Invalid JSON format
# --- truncated at 32 KB (139 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/jp-morgan-chase/refs/heads/main/openapi/jp-morgan-chase-pay-by-bank-pis-openapi.yml