API template library

Chase Pay by Bank mock API and live sandbox

A WireMock simulation of Chase JPMorgan's REST API — covering bank-provider discovery per market, Open Banking payment initiation with hosted payment links and QR codes, acknowledgment, and payouts.

Vendor
Chase JPMorgan
Functionality
Open Banking payments and payouts
Spec version
2.0.8
Endpoints
6
Stubs
14
Protocol
REST
Validation
AI-validated Before publication, an AI agent exercised these endpoints against the real Chase JPMorgan API through WireMock's recording proxy, and the recorded traffic was used to verify each stub's request and response shapes.

Live sandbox · no signup, no API key

Chase Pay by Bank

A running WireMock Cloud instance of this template, callable right now from a terminal, a script, or an AI agent.

Base URL
https://zez4d.wiremockapi.cloud

GET List Providers - Germany (DE)

curl -s -X GET 'https://zez4d.wiremockapi.cloud/providers?market=DE'

GET List Providers - United Kingdom (GB)

curl -s -X GET 'https://zez4d.wiremockapi.cloud/providers?market=GB'

GET List Providers - Sweden (SE)

curl -s -X GET 'https://zez4d.wiremockapi.cloud/providers?market=SE'
Method Path Summary
POST /payments Initiate Payments
GET /payments/{id} Retrieve Payments
POST /payments/{id}/acknowledge Acknowledge Payments
POST /payouts Create Payouts
GET /payouts/{id} Retrieve Payouts
GET /providers List providers for a market

Unauthenticated WireMock Cloud demo sandbox for Chase JPMorgan — not an official Chase JPMorgan sandbox, and it returns simulated example data only.

What's inside the Pay by Bank template

Every route in this UK-and-EU Open Banking surface answers — no dead stubs, no broken templates — and the center of it is a payment store that keeps what you send. A create needs only an Idempotency-Key header; the 202 merges your echoed request body with the server's contribution: a fresh UUID id, status NONE, acknowledged UNKNOWN, and the two hosted-checkout artifacts — a paymentLinkURL on J.P. Morgan's pay-direct page carrying your id as its payment_request_id, and a paymentQRCode URL whose final path segment is that same link base64-encoded. Retrieval returns the stored record with your amounts and creditor details intact, the acknowledge verb durably flips the record to ACKNOWLEDGED, and ids the store never issued draw a designed Resource Not Found body naming the offending path field.

  • Provider discovery — per-market bank rosters for DE, GB, and SE spanning embedded and redirect flows
  • Payment initiation — echo-merging creates with minted UUID ids, hosted payment links, and QR codes
  • Acknowledgment — the one state-mutating verb, persisting ACKNOWLEDGED onto the stored record
  • Payouts — the disbursement mirror, starting at status PENDING with no checkout artifacts
  • Error contract — numbered validation errors and designed not-found bodies with trace and request ids

Frequently asked questions

Its presence is; its semantics aren't. Omit the header and both intakes answer a structured 400, code 10106, naming the missing header and its HEADER location — so the sandbox proves your client sends the key and survives the designed rejection when it doesn't. Resubmitting with the same key, though, mints a brand-new payment rather than replaying the first response. If your retry logic depends on true replay-safety, model same-key-same-response in a private WireMock Cloud copy; here, assert that the key goes out on every create.

Yes — this store keeps bodies, not just ids. Retrieval serves the stored record verbatim, original timestamps included, so assertions on your own amount, creditor block, and endToEndId hold on every later read, and an acknowledged flag flipped once stays flipped. That's the inverse arrangement of the Plaid Payment Initiation template, whose store honors ids but serves canonical bodies — pointing the same test suite at both is a quick way to check your assertions are aimed at the right layer.

Three, one institution each: DE resolves to Sparkasse Hegau-Bodensee — an embedded flow with password credentials, a regex-validated username field, and a German-language pattern error; GB to HSBC Kinetic — a redirect flow for business banking over Faster Payments; SE to Bink, a fictional krona institution with a masked PIN field. Omitting the market parameter draws the designed 400, code 10001; any other market falls through to WireMock's not-matched diagnostic. Telling those two responses apart matters: the first is API behavior your client must handle, the second just means no stub exists.

No — both are fixture data to parse and present, not pages to complete. What's testable is the plumbing around them: that your integration surfaces the link, renders the QR, and that the two agree — decoding the QR URL's final segment yields the payment link exactly. For the flow where a scannable code *is* the payment request — a payee presenting QR codes for others to pay — the Request to Pay via QR template models that product end to end.

Vendor names identify APIs represented by WireMock template sources. This page does not imply vendor endorsement, certification, partnership, or official integration status.