# JPMC-PDP Documentation from https://developer.payments.jpmorgan.com # Alerts and Decisioning API ```yaml openapi: 3.1.0 info: title: Alerts and Decisioning API version: 1.0.5 contact: name: JPMorgan Chase & Co. API support email: ismd.security.operations@jpmorgan.com url: https://apistore.jpmchase.net/support/contact description: | Programmatically receives and decisions Payment Holds, automating your fraud review and hold resolution workflow to minimize operational delays while adhering to corporate IT standards. servers: - url: https://api.payments.jpmorgan.com/trust-safety/v1 description: PRODUCTION - MTLS - url: https://api-cat.payments.jpmorgan.com/trust-safety/v1 description: CLIENT TESTING - MTLS - url: https://api-mock.payments.jpmorgan.com/trust-safety/v1 description: MOCK tags: - name: Health description: Service Health Checks - name: Payment Holds description: Manage Payment Holds paths: /health: get: summary: Shallow Health Check description: | **Shallow Health Check** Returns the health status of the API service. This endpoint performs a lightweight check to confirm the service is running and able to accept requests. It does not verify downstream dependencies. tags: - Health operationId: getHealth responses: '200': description: Service is healthy content: application/json: schema: $ref: '#/components/schemas/HealthStatus' example: status: UP isReady: true version: 2.1.0 applicationName: Example App statusUpdatedAt: '2025-09-25T12:00:00Z' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' example: title: Invalid Data httpStatus: 400 traceId: 0eca2e1a-74b7-44b7-9e66-4a6ec8336eb9 requestId: d3dd646b-1fd0-4389-b6b4-0c3ab486bvg1 context: - code: '10104' message: Bad Value location: BODY field: type '401': description: Unauthorized - Authentication credentials are missing or invalid. content: application/json: schema: $ref: '#/components/schemas/Error' example: title: Authentication Failure httpStatus: 401 traceId: 0eca2e1a-74b7-44b7-9e66-4a6ec8336eb9 requestId: d3dd646b-1fd0-4389-b6b4-0c3ab486bvg1 context: - code: '14000' message: Client could not be authenticated '403': description: Forbidden. The client does not have the required permissions to access this resource. content: application/json: schema: $ref: '#/components/schemas/Error' example: title: Authorization Failure httpStatus: 403 traceId: 0eca2e1a-74b7-44b7-9e66-4a6ec8336eb9 requestId: d3dd646b-1fd0-4389-b6b4-0c3ab486bvg1 context: - code: '14000' message: Client forbidden from accessing the requested resource '503': description: Service Unavailable content: application/json: schema: $ref: '#/components/schemas/Error' example: title: Service Unavailable httpStatus: 503 context: - code: '12000' message: Service Unavailable /holds: get: summary: Retrieve Payment Holds description: | **Retrieve payment holds** Returns a paginated list of payment holds, optionally filtered by status, substatus, and date range. #### Filtering by `status` vs `substatus` The `status` and `substatus` query parameters are **mutually exclusive** — you may use one or the other, but not both in the same request. If both are provided, the API will return a `400 Bad Request` error. Use **`status`** for broad filtering based on the high-level state of a hold: | Value | Description | |-------|-------------| | `PENDING` | Returns all holds awaiting a decision, regardless of whether they are pending client action or bank review | | `APPROVED` | Returns holds that have been approved | | `REJECTED` | Returns holds that have been rejected. Can use both `APPROVED` and `REJECTED` together to retrieve all decisioned holds. | Use **`substatus`** for more granular filtering when you need to distinguish _who_ needs to act or _how_ a hold was resolved: | Value | Description | |-------|-------------| | `PENDING_ACTION_CLIENT` | Holds awaiting a decision by the client | | `PENDING_ACTION_JPM` | Holds under review by the bank | Can also use substatus to filter for holds decisioned by specific entity (client or JPM) or for a particular reason. If neither parameter is provided, holds across all statuses are returned. tags: - Payment Holds operationId: getPaymentHolds x-parameter-constraints: - type: mutually-exclusive params: - status - substatus parameters: - $ref: '#/components/parameters/Status' - $ref: '#/components/parameters/substatus' - $ref: '#/components/parameters/StartDateTime' - $ref: '#/components/parameters/EndDateTime' - $ref: '#/components/parameters/Sort' - $ref: '#/components/parameters/Offset' - $ref: '#/components/parameters/PageSize' responses: '200': description: Retrieve Payment Holds headers: Cache-Control: schema: type: string default: no-store description: Caching directive for sensitive financial data content: application/json: schema: $ref: '#/components/schemas/PaymentHolds' examples: Pending Client Action: $ref: '#/components/examples/PendingClientDecisionResponse' Pending JPM Review: $ref: '#/components/examples/PendingBankDecisionResponse' Pending Bank Or Client Decision: $ref: '#/components/examples/PendingBankOrClientDecisionResponse' Already Decisioned: $ref: '#/components/examples/AlreadyDecisionedResponse' '400': description: "Bad Request. \n\n**List of error codes and descriptions**\n\n| Error Code | Description |\n| -------------- |------------------------------------------------|\n| 10001 | Mandatory field missing or invalid |\n| 10103 | Bad Format |\n| 10104 | Bad Value |\n| 10108 | Mutually exclusive fields violation |" content: application/json: schema: $ref: '#/components/schemas/Error' examples: Bad Status: $ref: '#/components/examples/BadIdentifier' Filter By Status And Substatus (Not Allowed): $ref: '#/components/examples/FilterByStatusAndSubstatusErrorResponse' '401': $ref: '#/components/responses/401-Unauthorized' '403': $ref: '#/components/responses/403-Forbidden' '429': $ref: '#/components/responses/429-TooManyRequests' '503': $ref: '#/components/responses/503-ServiceUnavailable' /holds/{id}: get: summary: Retrieve details of a payment hold description: '**Retrieve details of a single payment hold by identifier**' tags: - Payment Holds operationId: getPaymentHoldDetails parameters: - name: id in: path description: Unique identifier for the payment hold required: true schema: $ref: '#/components/schemas/Uuid' examples: By Id: value: 06bca14f-1fc0-4cd7-9e0b-8bb7e06334f7 responses: '200': description: Payment Hold Details headers: Cache-Control: schema: type: string default: no-store description: Caching directive for sensitive financial data content: application/json: schema: $ref: '#/components/schemas/PaymentHold' examples: Wire Transfer: $ref: '#/components/examples/RetrieveSingleHoldResponse' ACH Distributed: $ref: '#/components/examples/RetrieveSingleHoldAchDistributedResponse' '400': description: |- Bad Request. **List of error codes and descriptions** | Error Code | Description | | -------------- |------------------------------------------------| | 10103 | Bad Format | | 11004 | Wrong channel for hold | content: application/json: schema: $ref: '#/components/schemas/Error' examples: Bad Identifier: $ref: '#/components/examples/BadIdentifier' Wrong Channel: value: title: Bad Request httpStatus: 400 traceId: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01 requestId: 123e4567-e89b-12d3-a456-426614174000 context: - code: '11004' message: Wrong channel for hold '401': $ref: '#/components/responses/401-Unauthorized' '403': $ref: '#/components/responses/403-Forbidden' '404': $ref: '#/components/responses/404-NotFound' '429': $ref: '#/components/responses/429-TooManyRequests' '503': $ref: '#/components/responses/503-ServiceUnavailable' /holds/{id}/decision: post: summary: Decision Single Payment Hold description: |- **Decision Single Payment Hold** This endpoint allows users to take action on a single payment hold by approving or rejecting it. Users can specify the decision action (APPROVE or REJECT), provide a reason for rejection, and indicate the type of confirmed fraud if applicable. For bulk processing of multiple hold decisions, use the `/holds/decision/bulk` endpoint instead. tags: - Payment Holds operationId: decisionPaymentHold parameters: - name: id in: path description: Unique identifier for the payment hold required: true schema: $ref: '#/components/schemas/Uuid' examples: Approve: value: f1c2b3a4-5d6e-4f70-8a9c-1234abcd5678 Reject: value: 550e8400-e29b-41d4-a716-446655440000 Expired: value: 9b1d3f2a-6c8e-4f5a-9d2b-3e7a1c4b8d90 Already Decisioned: value: 3d6f9a2c-5e47-4b1f-8c3a-0d2e7f9b6a10 requestBody: required: true description: Hold Action content: application/json: schema: $ref: '#/components/schemas/DecisionActionRequest' examples: Approve: $ref: '#/components/examples/HoldDecisionApproveActionRequest' Reject: $ref: '#/components/examples/HoldDecisionRejectActionRequest' Incorrect Field Values: $ref: '#/components/examples/HoldBadValuesRequest' responses: '200': description: Decision response for the payment hold action content: application/json: schema: $ref: '#/components/schemas/DecisionResponse' examples: Approve: $ref: '#/components/examples/HoldDecisionApproveActionResponse' Reject: $ref: '#/components/examples/HoldDecisionRejectActionResponse' '400': description: "Bad Request. \n\n**List of error codes and descriptions**\n\n| Error Code | Description |\n| -------------- |----------------------------------------------------------|\n| 10001 | Mandatory field missing |\n| 10103 | Bad format |\n| 10104 | Bad Value |\n| 11003 | Field only allowed for specific value of other field |" content: application/json: schema: $ref: '#/components/schemas/Error' examples: Bad Identifier: $ref: '#/components/examples/BadIdentifier' '401': $ref: '#/components/responses/401-Unauthorized' '403': $ref: '#/components/responses/403-Forbidden' '404': $ref: '#/components/responses/404-NotFound' '409': description: |- Conflict **List of error codes and descriptions** | Error Code | Description | | -------------- |------------------------------------------------| | 11000 | Hold has expired | | 11001 | Hold already decisioned | | 11004 | Wrong channel for hold | **Hold Already Decisioned (11001):** A payment hold may only be decisioned once. In rare cases, two users may attempt to decision the same hold at nearly the same time. When this occurs, only the first request will succeed — the subsequent request will receive a `409 Conflict` with error code `11001`. While this scenario is uncommon, API consumers must handle this response gracefully. content: application/json: schema: $ref: '#/components/schemas/Error' examples: Expired: $ref: '#/components/examples/HoldExpiredResponse' Already Decisioned: $ref: '#/components/examples/HoldAlreadyDecisionedResponse' Wrong Channel: value: title: Conflict httpStatus: 409 traceId: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01 requestId: 123e4567-e89b-12d3-a456-426614174000 context: - code: '11004' message: Wrong channel for hold Incorrect Field Values: $ref: '#/components/examples/HoldBadValuesResponse' '429': $ref: '#/components/responses/429-TooManyRequests' '503': $ref: '#/components/responses/503-ServiceUnavailable' /holds/decision/bulk: post: summary: Decision Multiple Payment Holds (Bulk) description: |- **Decision Multiple Payment Holds (Bulk)** This endpoint allows users to take action on multiple payment holds simultaneously by approving or rejecting them. The API supports batch processing of multiple hold decisions, enabling efficient processing of large volumes of holds. Each decision in the batch can have its own action (APPROVE or REJECT), rejection reason, and confirmed fraud type. For processing a single hold decision, use the `/holds/{id}/decision` endpoint instead. tags: - Payment Holds operationId: decisionPaymentHoldsBulk requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DecisionBulkRequest' examples: Mixed Results: $ref: '#/components/examples/HoldDecisionManyRequest' responses: '200': description: Bulk response object containing decision responses for each hold content: application/json: schema: $ref: '#/components/schemas/DecisionBulkResponse' examples: Mixed Results: $ref: '#/components/examples/HoldDecisionManyResponse' '400': description: |- Bad Request. **List of error codes and descriptions** | Error Code | Description | | -------------- |------------------------------------------------| | 10001 | Mandatory field missing or invalid | | 10103 | Bad Format | | 10104 | Bad Value | content: application/json: schema: $ref: '#/components/schemas/Error' examples: Bad Identifier: $ref: '#/components/examples/BadIdentifier' '401': $ref: '#/components/responses/401-Unauthorized' '403': $ref: '#/components/responses/403-Forbidden' '409': description: |- Conflict **List of error codes and descriptions** | Error Code | Description | | -------------- |------------------------------------------------| | 11000 | Hold has expired | | 11001 | Hold already decisioned | content: application/json: schema: $ref: '#/components/schemas/Error' examples: Expired: $ref: '#/components/examples/HoldExpiredResponse' Already Decisioned: $ref: '#/components/examples/HoldAlreadyDecisionedResponse' '429': $ref: '#/components/responses/429-TooManyRequests' '503': $ref: '#/components/responses/503-ServiceUnavailable' webhooks: Payment: post: summary: Payment Hold Notification operationId: webHookPaymentHoldNotification description: | Fired when a payment hold event occurs. The `type` field in the CloudEvents envelope determines the specific event: | Event Type | Description | |------------|-------------| | com.jpmorgan.payments.payment.hold.placed.`v1` | A payment has been held for review. The payload contains the complete hold including the payment details. | | com.jpmorgan.payments.payment.hold.ammended.`v1` | A payment hold has been updated (decisioned, distributed, reassigned). The payload includes the updated status/substatus, decision and distribution, if applicable. | | com.jpmorgan.payments.payment.hold.closed.`v1` | A payment hold has been closed. This event occurs when the hold is decisioned by the bank or when the decision is changed after payment distribution to notify JPMC about true fraud. NOTE: This event is only emitted when JPMC changes hold status/substatus and is NOT emitted when you decision a hold via API. | tags: - Notifications x-codegen-request-body-name: body requestBody: description: Payment Hold Notification required: true content: application/cloudevents+json: schema: $ref: '#/components/schemas/Notification' examples: PaymentHeldWireTransfer: description: | com.jpmorgan.payments.payment.hold.placed.v1 notification for a wire transfer. Represents hold creation — contains the complete hold including the payment. No decision yet. summary: Payment Held – Wire Transfer value: specversion: '1.0' id: 7d2a159b-9c3a-4db2-bd03-e64047c32917 time: '2026-02-01T14:15:22Z' type: com.jpmorgan.payments.payment.hold.placed.v1 source: api.payments.jpmorgan.com/trust-safety/v1 dataschema: urn:com.jpmorgan.payments/payment-hold data: id: 06bca14f-1fc0-4cd7-9e0b-8bb7e06334f7 status: PENDING substatus: PENDING_ACTION_CLIENT cutOffAt: '2026-02-06T14:15:22Z' rules: - id: 59be9844-3a70-4fbc-8d58-9637c1b34b18 name: Client ABC Rule for Suspicious Beneficiary effectiveAt: '2019-08-24' payment: requestedExecutionDate: '2026-02-01' paymentIdentifiers: endToEndId: E2E3000113WEBXX value: currency: USD amount: '10.50' transferType: DEBIT paymentType: WIRE debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Nicholas Tesla account: accountNumber: '987654321' accountCurrency: USD postalAddress: type: HOME addressLines: - 10007 S. Lake Drive streetName: 10007 Lake Dr postalCode: '48035' city: Clinton Township countrySubDivision: MI country: US creditor: name: Comrade Musics account: accountNumber: '123456011' accountCurrency: USD postalAddress: country: US PaymentHeldAch: description: | com.jpmorgan.payments.payment.hold.placed.v1 notification for an outgoing ACH payment. Represents hold creation — contains the complete hold including the payment. No decision yet. summary: Payment Held – Outgoing ACH value: specversion: '1.0' id: c3a81f29-47d6-4e8b-a5c1-9f6b2d4e7a03 time: '2026-02-10T09:45:00Z' type: com.jpmorgan.payments.payment.hold.placed.v1 source: api.payments.jpmorgan.com/trust-safety/v1 dataschema: urn:com.jpmorgan.payments/payment-hold data: id: 253f67f3-b640-44cb-aabd-2cc348b52678 status: PENDING substatus: PENDING_ACTION_CLIENT cutOffAt: '2026-02-15T09:45:00Z' rules: - id: a4e7c910-6b3d-4f2a-8c15-d9f0e1b23456 name: ACH Amount Threshold Rule effectiveAt: '2025-06-01' payment: requestedExecutionDate: '2026-02-10' paymentIdentifiers: endToEndId: E2E3000112CCDXX value: currency: USD amount: '5250.00' transferType: CREDIT paymentType: ACH debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Acme Corp account: accountNumber: '12311871' accountCurrency: USD postalAddress: country: US creditor: name: Kelly Thomas account: accountNumber: '87654321' postalAddress: country: US PaymentHeldRtp: description: | com.jpmorgan.payments.payment.hold.placed.v1 notification for a US Real-Time Payment (RTP). Represents hold creation — contains the complete hold including the payment. No decision yet. summary: Payment Held – US RTP value: specversion: '1.0' id: f8d24a61-3b92-4c7e-a0d5-1e9f6c8b7a42 time: '2026-02-12T16:20:00Z' type: com.jpmorgan.payments.payment.hold.placed.v1 source: api.payments.jpmorgan.com/trust-safety/v1 dataschema: urn:com.jpmorgan.payments/payment-hold data: id: d7e3f1a9-4c82-4b6d-9a0e-5f2c8d1b3e70 status: PENDING substatus: PENDING_ACTION_JPM cutOffAt: '2026-02-12T17:20:00Z' reasons: - Unusual RTP amount flagged by fraud screening payment: requestedExecutionDate: '2026-02-12' paymentIdentifiers: endToEndId: E2E3000114RTPXX value: currency: USD amount: '25000.00' transferType: CREDIT paymentType: RTP debtorAgent: financialInstitutionIds: - id: '021000021' idType: USABA debtor: name: Global Imports LLC account: accountNumber: '445566778' accountCurrency: USD postalAddress: city: New York countrySubDivision: NY country: US creditor: name: Oceanic Trading Co account: accountNumber: '112233445' accountCurrency: USD postalAddress: country: US HoldAmendedAch: description: | com.jpmorgan.payments.payment.hold.ammended.v1 notification for an outgoing ACH hold that was approved by the client. summary: Hold Updated – ACH Approved value: specversion: '1.0' id: b2d4e6f8-1a3c-5d7e-9f0b-2c4d6e8a0b12 time: '2026-02-11T11:00:00Z' type: com.jpmorgan.payments.payment.hold.ammended.v1 source: api.payments.jpmorgan.com/trust-safety/v1 dataschema: urn:com.jpmorgan.payments/payment-hold data: id: 253f67f3-b640-44cb-aabd-2cc348b52678 status: APPROVED substatus: APPROVED_CLIENT decision: source: API HoldAmendedWireTransfer: description: | com.jpmorgan.payments.payment.hold.ammended.v1 notification for a wire transfer hold that was rejected as fraud. summary: Hold Updated – Wire Transfer Rejected (Fraud) value: specversion: '1.0' id: a1c9e3d7-82f4-4b6a-9d1e-3f7c8a2b5e90 time: '2026-02-03T09:30:00Z' type: com.jpmorgan.payments.payment.hold.ammended.v1 source: api.payments.jpmorgan.com/trust-safety/v1 dataschema: urn:com.jpmorgan.payments/payment-hold data: id: 06bca14f-1fc0-4cd7-9e0b-8bb7e06334f7 status: REJECTED substatus: REJECTED_FRAUD_JPM decision: source: API rejectReason: FRAUD fraud: type: OTHER additionalInformation: Suspicious wire transfer to unknown beneficiary HoldAmendedRtp: description: | com.jpmorgan.payments.payment.hold.ammended.v1 notification for a US RTP hold that was auto-cancelled due to expiration. summary: Hold Updated – RTP Auto-Cancelled value: specversion: '1.0' id: e9f1a3b5-c7d9-4e2f-b0a4-6d8c1e3f5a72 time: '2026-02-12T17:20:01Z' type: com.jpmorgan.payments.payment.hold.ammended.v1 source: api.payments.jpmorgan.com/trust-safety/v1 dataschema: urn:com.jpmorgan.payments/payment-hold data: id: d7e3f1a9-4c82-4b6d-9a0e-5f2c8d1b3e70 status: REJECTED substatus: REJECTED_AUTO_CANCELLED_JPM decision: source: JPMC_UI rejectReason: TRANSACTION_NO_LONGER_NEEDED HoldClosedByJpmReview: description: | com.jpmorgan.payments.payment.hold.closed.v1 notification when a hold is closed by JPM review. summary: Hold Closed – Closed by JPM Review value: specversion: '1.0' id: b4d82e1f-6a93-4c7b-8e2d-9f1a3c5d7b60 time: '2026-02-05T11:20:00Z' type: com.jpmorgan.payments.payment.hold.closed.v1 source: api.payments.jpmorgan.com/trust-safety/v1 dataschema: urn:com.jpmorgan.payments/payment-hold data: id: 06bca14f-1fc0-4cd7-9e0b-8bb7e06334f7 status: REJECTED substatus: REJECTED_FRAUD_JPM decision: source: API rejectReason: FRAUD fraud: type: BUSINESS_EMAIL_COMPROMISE HoldClosedTrueFraudAfterDistribution: description: | com.jpmorgan.payments.payment.hold.closed.v1 notification when true fraud is reported after payment distribution. summary: Hold Closed – True Fraud Reported After Payment Distribution value: specversion: '1.0' id: e7f19c4a-2d85-4b3e-a6c1-8d4f2e9b7a13 time: '2026-02-08T14:45:00Z' type: com.jpmorgan.payments.payment.hold.closed.v1 source: api.payments.jpmorgan.com/trust-safety/v1 dataschema: urn:com.jpmorgan.payments/payment-hold data: id: 06bca14f-1fc0-4cd7-9e0b-8bb7e06334f7 status: REJECTED substatus: REJECTED_FRAUD_JPM decision: source: API rejectReason: FRAUD fraud: type: BUSINESS_EMAIL_COMPROMISE responses: '204': description: Return a 204 status to indicate that the data was received successfully by client components: schemas: HealthStatus: type: object title: HealthStatus description: Health check response indicating the status of the service and its readiness. properties: status: type: string description: Overall health status of the service. enum: - UP - DOWN example: UP isReady: type: boolean description: Indicates whether the service is ready to accept requests. example: true version: type: string description: The current version of the service. example: 2.1.0 minLength: 1 maxLength: 50 applicationName: type: string description: The name of the application. example: Example App minLength: 1 maxLength: 200 statusUpdatedAt: type: string format: date-time description: The date and time when the health status was last updated. example: '2025-09-25T12:00:00Z' required: - status - isReady StandardCodeContext: title: Standard Code Context description: Standard Code Context for error codes type: object required: - code - message - type properties: type: title: CategoryType type: string description: | Category of the error code such as ISO or a Clearing Code (NACHA, BACS etc) | Category Type | Description | |---------------|-----------------| | **ISO20022** | ISO Codes based on an ISO standard e.g. ISO20022 | | **CLEARING_NACHA** | Clearing codes | | **EXTERNAL** | External code sets | minLength: 2 maxLength: 16 code: type: string description: Short code that identifies the error - publicly cataloged and documented minLength: 2 maxLength: 10 pattern: ^[a-zA-Z0-9]+$ message: type: string description: Human readable textual description of the error minLength: 1 maxLength: 99 AdditionalContext: title: Additional Context type: array description: Additional details about the error based on a standard (e.g. ISO or Clearing codes) items: $ref: '#/components/schemas/StandardCodeContext' minItems: 1 maxItems: 5 ErrorContext: title: ErrorContext x-tags: - common-error-model - common-components type: object required: - message properties: code: type: string description: JPMC Short code that identifies the error - publicly cataloged and documented minLength: 5 maxLength: 5 pattern: ^[0-9]+$ message: type: string description: Human readable textual description of the error minLength: 1 maxLength: 99 location: type: string title: The component of the request impacted, can either be 'body', 'query', 'header', or 'path' description: The location of the error occurred in the request. minLength: 1 maxLength: 99 enum: - BODY - PATH - QUERY - HEADER field: type: string description: The field which caused the error. Where the location of the error occurred is BODY, the field would contain the JSON Path expression minLength: 1 maxLength: 99 pattern: ^[\$0-9a-zA-Z-_.()\[\]{}'"\s@=>= startDateTime. Format - `YYYY-MM-DDThh:mm:ss`+/-time offset to UTC required: false schema: type: string format: date-time example: '2026-01-01T00:00:00+00:00' EndDateTime: name: endDateTime in: query description: End of hold date/time range (inclusive). If only endDateTime provided, returns anything <= endDateTime. Format - `YYYY-MM-DDThh:mm:ss`+/-time offset to UTC required: false schema: type: string format: date-time example: '2026-02-01T00:00:00+00:00' Sort: name: sort in: query description: | Sort order for the collection results. Uses the format field.`direction` where direction is `asc` (ascending) or `desc` (descending). Supported sort fields: `heldAt`, `cutOffAt`, `status`. If not provided, defaults to heldAt.`desc` (most recently held first). required: false schema: type: string minLength: 1 maxLength: 50 default: heldAt.desc Offset: name: offset in: query description: Page offset for pagination (0-based) required: false schema: type: integer format: int32 minimum: 0 maximum: 10000 default: 0 PageSize: name: pageSize in: query description: The number of records per page required: false schema: type: integer format: int32 minimum: 1 maximum: 100 default: 25 examples: PendingClientDecisionResponse: description: Retrieve holds requiring action by client summary: Retrieve holds that require action by client value: items: - id: 06bca14f-1fc0-4cd7-9e0b-8bb7e06334f7 status: PENDING substatus: PENDING_ACTION_CLIENT exceptionType: BANK_RULE heldAt: '2026-02-01T14:15:22Z' cutOffAt: '2026-02-06T14:15:22Z' rules: - id: 59be9844-3a70-4fbc-8d58-9637c1b34b18 name: Client ABC Rule for Suspicious Beneficiary effectiveAt: '2019-08-24' payment: requestedExecutionDate: '2026-02-01' paymentIdentifiers: endToEndId: E2E3000113WEBXX value: currency: USD amount: '10.50' transferType: DEBIT paymentType: WIRE debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Nicholas Tesla account: accountNumber: '987654321' accountCurrency: USD postalAddress: type: HOME addressLines: - 10007 S. Lake Drive streetName: 10007 Lake Dr postalCode: '48035' city: Clinton Township countrySubDivision: MI country: US creditor: name: Comrade Musics account: accountNumber: '123456011' accountCurrency: USD postalAddress: country: US - id: 06bca14f-1fc0-4cd7-9e0b-8bb7e06334f7 status: PENDING substatus: PENDING_ACTION_CLIENT exceptionType: BANK_RULE heldAt: '2026-03-01T14:15:22Z' cutOffAt: '2026-03-15T14:15:22Z' rules: - id: 59be9844-3a70-4fbc-8d58-9637c1b34b18 name: Client ABC Rule for Suspicious Beneficiary effectiveAt: '2019-08-24' payment: requestedExecutionDate: '2026-03-10' paymentIdentifiers: endToEndId: E2E5908713WEBXX value: currency: USD amount: '250000' transferType: DEBIT paymentType: WIRE debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Thomas Edison account: accountNumber: '123456789' accountCurrency: USD postalAddress: type: HOME addressLines: - 10007 W Shore Drive streetName: 10007 Shore Dr postalCode: '20147' city: Union City countrySubDivision: NJ country: US creditor: name: Superior Cleaning LLC account: accountNumber: '556677889' accountCurrency: USD postalAddress: country: US metadata: pagination: page: 1 size: 25 totalCount: 2 totalPages: 1 asOf: '2026-04-01T00:00:00+00:00' PendingBankDecisionResponse: description: Retrieve holds pending bank review summary: Retrieve holds the bank is currently reviewing value: items: - id: 1f8c3a2e-7b54-4d9a-8c3f-12ab34cd56ef status: PENDING substatus: PENDING_ACTION_JPM exceptionType: BANK_RULE heldAt: '2026-02-01T14:15:22Z' cutOffAt: '2026-02-06T14:15:22Z' rules: - id: 59be9844-3a70-4fbc-8d58-9637c1b34b18 name: Client ABC Rule for Suspicious Beneficiary effectiveAt: '2019-08-24' payment: requestedExecutionDate: '2026-02-01' paymentIdentifiers: endToEndId: E2E3000113WEBXX value: currency: USD amount: '10.50' transferType: DEBIT paymentType: WIRE debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Nicholas Tesla account: accountNumber: '987654321' accountCurrency: USD postalAddress: type: HOME addressLines: - 10007 S. Lake Drive streetName: 10007 Lake Dr postalCode: '48035' city: Clinton Township countrySubDivision: MI country: US creditor: name: Comrade Musics account: accountNumber: '123456011' accountCurrency: USD postalAddress: country: US - id: 92ad7c1b-3e6f-4a2d-9b10-0fa1c2d3e4b5 status: PENDING substatus: PENDING_ACTION_JPM exceptionType: BANK_RULE heldAt: '2026-03-01T14:15:22Z' cutOffAt: '2026-03-15T14:15:22Z' rules: - id: 59be9844-3a70-4fbc-8d58-9637c1b34b18 name: Client ABC Rule for Suspicious Beneficiary effectiveAt: '2019-08-24' payment: requestedExecutionDate: '2026-03-10' paymentIdentifiers: endToEndId: E2E5908713WEBXX value: currency: USD amount: '250000' transferType: DEBIT paymentType: WIRE debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Thomas Edison account: accountNumber: '123456789' accountCurrency: USD postalAddress: type: HOME addressLines: - 10007 W Shore Drive streetName: 10007 Shore Dr postalCode: '20147' city: Union City countrySubDivision: NJ country: US creditor: name: Superior Cleaning LLC account: accountNumber: '556677889' accountCurrency: USD postalAddress: country: US metadata: pagination: page: 1 size: 25 totalCount: 2 totalPages: 1 asOf: '2026-04-01T00:00:00+00:00' PendingBankOrClientDecisionResponse: description: Retrieve holds pending bank or client decision summary: Retrieve holds the bank is currently reviewing value: items: - id: 1f8c3a2e-7b54-4d9a-8c3f-12ab34cd56ef status: PENDING substatus: PENDING_ACTION_JPM exceptionType: BANK_RULE heldAt: '2026-02-01T14:15:22Z' cutOffAt: '2026-02-06T14:15:22Z' rules: - id: 59be9844-3a70-4fbc-8d58-9637c1b34b18 name: Client ABC Rule for Suspicious Beneficiary effectiveAt: '2019-08-24' payment: requestedExecutionDate: '2026-02-01' paymentIdentifiers: endToEndId: E2E3000113WEBXX value: currency: USD amount: '10.50' transferType: DEBIT paymentType: WIRE debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Nicholas Tesla account: accountNumber: '987654321' accountCurrency: USD postalAddress: type: HOME addressLines: - 10007 S. Lake Drive streetName: 10007 Lake Dr postalCode: '48035' city: Clinton Township countrySubDivision: MI country: US creditor: name: Comrade Musics account: accountNumber: '123456011' accountCurrency: USD postalAddress: country: US - id: 92ad7c1b-3e6f-4a2d-9b10-0fa1c2d3e4b5 status: PENDING substatus: PENDING_ACTION_JPM exceptionType: BANK_RULE heldAt: '2026-03-01T14:15:22Z' cutOffAt: '2026-03-15T14:15:22Z' rules: - id: 59be9844-3a70-4fbc-8d58-9637c1b34b18 name: Client ABC Rule for Suspicious Beneficiary effectiveAt: '2019-08-24' payment: requestedExecutionDate: '2026-03-10' paymentIdentifiers: endToEndId: E2E5908713WEBXX value: currency: USD amount: '250000' transferType: DEBIT paymentType: WIRE debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Thomas Edison account: accountNumber: '123456789' accountCurrency: USD postalAddress: type: HOME addressLines: - 10007 W Shore Drive streetName: 10007 Shore Dr postalCode: '20147' city: Union City countrySubDivision: NJ country: US creditor: name: Superior Cleaning LLC account: accountNumber: '556677889' accountCurrency: USD postalAddress: country: US - id: 06bca14f-1fc0-4cd7-9e0b-8bb7e06334f7 status: PENDING substatus: PENDING_ACTION_CLIENT exceptionType: BANK_RULE heldAt: '2026-02-01T14:15:22Z' cutOffAt: '2026-02-06T14:15:22Z' rules: - id: 59be9844-3a70-4fbc-8d58-9637c1b34b18 name: Client ABC Rule for Suspicious Beneficiary effectiveAt: '2019-08-24' payment: requestedExecutionDate: '2026-02-01' paymentIdentifiers: endToEndId: E2E3000113WEBXX value: currency: USD amount: '10.50' transferType: DEBIT paymentType: WIRE debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Nicholas Tesla account: accountNumber: '987654321' accountCurrency: USD postalAddress: type: HOME addressLines: - 10007 S. Lake Drive streetName: 10007 Lake Dr postalCode: '48035' city: Clinton Township countrySubDivision: MI country: US creditor: name: Comrade Musics account: accountNumber: '123456011' accountCurrency: USD postalAddress: country: US - id: 06bca14f-1fc0-4cd7-9e0b-8bb7e06334f7 status: PENDING substatus: PENDING_ACTION_CLIENT exceptionType: BANK_RULE heldAt: '2026-03-01T14:15:22Z' cutOffAt: '2026-03-15T14:15:22Z' rules: - id: 59be9844-3a70-4fbc-8d58-9637c1b34b18 name: Client ABC Rule for Suspicious Beneficiary effectiveAt: '2019-08-24' payment: requestedExecutionDate: '2026-03-10' paymentIdentifiers: endToEndId: E2E5908713WEBXX value: currency: USD amount: '250000' transferType: DEBIT paymentType: WIRE debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Thomas Edison account: accountNumber: '123456789' accountCurrency: USD postalAddress: type: HOME addressLines: - 10007 W Shore Drive streetName: 10007 Shore Dr postalCode: '20147' city: Union City countrySubDivision: NJ country: US creditor: name: Superior Cleaning LLC account: accountNumber: '556677889' accountCurrency: USD postalAddress: country: US metadata: pagination: page: 1 size: 25 totalCount: 4 totalPages: 1 asOf: '2026-04-01T00:00:00+00:00' AlreadyDecisionedResponse: description: Retrieve holds pending bank review summary: Retrieve holds the bank is reviewing value: items: - id: c5e1d9a3-2f48-4c7b-a5d2-7e9f01b2c3d4 status: REJECTED substatus: REJECTED_FRAUD_JPM exceptionType: BANK_RULE heldAt: '2026-02-01T14:15:22Z' cutOffAt: '2026-02-06T14:15:22Z' rules: - id: 59be9844-3a70-4fbc-8d58-9637c1b34b18 name: Client ABC Rule for Suspicious Beneficiary effectiveAt: '2019-08-24' payment: requestedExecutionDate: '2026-02-01' paymentIdentifiers: endToEndId: E2E3000113WEBXX value: currency: USD amount: '10.50' transferType: DEBIT paymentType: WIRE debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Nicholas Tesla account: accountNumber: '987654321' accountCurrency: USD postalAddress: type: HOME addressLines: - 10007 S. Lake Drive streetName: 10007 Lake Dr postalCode: '48035' city: Clinton Township countrySubDivision: MI country: US creditor: name: Comrade Musics account: accountNumber: '123456011' accountCurrency: USD postalAddress: country: US decision: source: API rejectReason: FRAUD fraud: type: OTHER additionalInformation: Suspicious wire transfer to unknown beneficiary - id: 0a7f3d9c-8b21-4e5f-b6a9-5c1d2e3f4a70 status: APPROVED substatus: APPROVED_CLIENT exceptionType: BANK_RULE heldAt: '2026-03-01T14:15:22Z' cutOffAt: '2026-03-15T14:15:22Z' rules: - id: 59be9844-3a70-4fbc-8d58-9637c1b34b18 name: Client ABC Rule for Suspicious Beneficiary effectiveAt: '2019-08-24' payment: requestedExecutionDate: '2026-03-10' paymentIdentifiers: endToEndId: E2E5908713WEBXX value: currency: USD amount: '250000' transferType: DEBIT paymentType: WIRE debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Thomas Edison account: accountNumber: '123456789' accountCurrency: USD postalAddress: type: HOME addressLines: - 10007 W Shore Drive streetName: 10007 Shore Dr postalCode: '20147' city: Union City countrySubDivision: NJ country: US creditor: name: Superior Cleaning LLC account: accountNumber: '556677889' accountCurrency: USD postalAddress: country: US metadata: pagination: page: 1 size: 25 totalCount: 2 totalPages: 1 asOf: '2026-04-01T00:00:00+00:00' BadIdentifier: value: title: Bad Request httpStatus: 400 traceId: 0eca2e1a-74b7-44b7-9e66-4a6ec8336eb9 requestId: UK202109202311354152 context: - code: '10103' message: Invalid resource identifier format. field: id location: PATH FilterByStatusAndSubstatusErrorResponse: description: Filter holds by status and substatus summary: Attempt filter holds by statsu and substatus, which is not allowed value: title: Bad Request httpStatus: 400 traceId: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01 requestId: 123e4567-e89b-12d3-a456-426614174000 context: - code: '10108' message: Cannot use 'status' and 'substatus' fields together in the same request. SecurityFailureError: value: title: Forbidden httpStatus: 403 traceId: 5914f136-4544-4b1c-8004-6c2388ba76b4 requestId: UK202109202311354152 context: - code: '14000' message: Invalid client profile ServiceUnavailableError: value: title: Service Unavailable httpStatus: 503 traceId: d3dd646b-1fd0-4389-b6b4-0c3ab486ccc4 requestId: UK202109202311354152 context: - code: '12000' message: Service Unavailable RetrieveSingleHoldResponse: description: Retrieve single hold summary: Retrieve single hold by id value: id: 06bca14f-1fc0-4cd7-9e0b-8bb7e06334f7 status: PENDING substatus: PENDING_ACTION_CLIENT exceptionType: BANK_RULE heldAt: '2026-02-01T14:15:22Z' cutOffAt: '2026-02-06T14:15:22Z' rules: - id: 59be9844-3a70-4fbc-8d58-9637c1b34b18 name: Client ABC Rule for Suspicious Beneficiary effectiveAt: '2019-08-24' payment: requestedExecutionDate: '2026-02-01' paymentIdentifiers: endToEndId: E2E3000113WEBXX value: currency: USD amount: '10.50' transferType: DEBIT paymentType: WIRE debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Nicholas Tesla account: accountNumber: '987654321' accountCurrency: USD postalAddress: type: HOME addressLines: - 10007 S. Lake Drive streetName: 10007 Lake Dr postalCode: '48035' city: Clinton Township countrySubDivision: MI country: US creditor: name: Comrade Musics account: accountNumber: '123456011' accountCurrency: USD postalAddress: country: US RetrieveSingleHoldAchDistributedResponse: description: Retrieve single ACH hold with distribution details summary: Retrieve single ACH hold where payment has been distributed value: id: 7a1f93e4-d826-4c5b-b3a7-9e4d2f6c8b10 status: PENDING substatus: PENDING_ACTION_CLIENT exceptionType: BANK_RULE heldAt: '2026-04-10T08:30:00Z' cutOffAt: '2026-04-15T08:30:00Z' rules: - id: b5c8d2e1-7f3a-4a9b-8c6d-1e0f3a5b7d92 name: ACH Distribution Monitoring Rule effectiveAt: '2025-09-01' payment: requestedExecutionDate: '2026-04-10' paymentIdentifiers: endToEndId: E2E4000215ACHXX value: currency: USD amount: '15750.00' transferType: CREDIT paymentType: ACH debtorAgent: financialInstitutionIds: - id: CHASUS33XXX idType: BIC debtor: name: Summit Industries LLC account: accountNumber: '33445566' accountCurrency: USD postalAddress: country: US creditor: name: Pacific Supplies Inc account: accountNumber: '99887766' postalAddress: country: US distribution: isDistributed: true distributedAt: '2026-04-10T09:15:00Z' NotFound: summary: Not Found value: title: Not Found httpStatus: 404 traceId: 0eca2e1a-74b7-44b7-9e66-4a6ec8336eb9 HoldDecisionApproveActionRequest: description: Approve a single hold summary: Approve a single hold value: action: APPROVE HoldDecisionRejectActionRequest: description: Successfully decision a single hold summary: Successfully decision a single hold value: action: REJECT rejectReason: FRAUD fraud: type: OTHER additionalInformation: Suspicious wire transfer to unknown beneficiary HoldBadValuesRequest: description: Incorrect request values summary: Incorrect request values value: action: REJECT rejectReason: FRAUD fraud: type: SCAM additionalInformation: Shouldn't populate this field unless fraud type is OTHER HoldDecisionApproveActionResponse: description: Successfully decision a single hold summary: Successfully decision a single hold value: holdId: a1000001-aaaa-4aaa-aaaa-000000000001 result: SUCCESS status: APPROVED substatus: APPROVED_CLIENT HoldDecisionRejectActionResponse: description: Successfully decision a single hold summary: Successfully decision a single hold value: holdId: a1000001-bbbb-4aaa-aaaa-000000000001 result: SUCCESS status: REJECTED substatus: REJECTED_FRAUD_CLIENT HoldExpiredResponse: description: Hold expired summary: The hold you're trying to decision has expired and can no longer be actioned. value: title: Conflict httpStatus: 409 traceId: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01 requestId: 123e4567-e89b-12d3-a456-426614174000 context: - code: '11000' message: Hold has expired HoldAlreadyDecisionedResponse: description: Incorrect request values summary: Incorrect request values value: title: Conflict httpStatus: 409 traceId: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01 requestId: 123e4567-e89b-12d3-a456-426614174000 context: - code: '11001' message: Hold already decisioned HoldBadValuesResponse: description: Incomplete or incorrect field values in the request body summary: Incomplete or incorrect field values in the request body value: title: Bad Request httpStatus: 400 traceId: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01 requestId: 123e4567-e89b-12d3-a456-426614174000 context: - code: '11003' message: Cannot populate 'additionalInformation' unless fraud type is 'OTHER' location: BODY field: fraud.additionalInformation HoldDecisionManyRequest: description: Decision many hold summary: Send multiple holds in same request to decision value: items: - holdId: 6c4e9a21-3f72-4b8c-8d3a-2f1e7c9b0d54 action: REJECT rejectReason: DUPLICATE_TRANSACTION - holdId: a1d7f3c9-2b45-4e1a-b6c2-3d9e8f0a7c31 action: APPROVE HoldDecisionManyResponse: description: Decision many hold summary: Send multiple holds in same request to decision value: items: - holdId: 6c4e9a21-3f72-4b8c-8d3a-2f1e7c9b0d54 result: SUCCESS status: REJECTED substatus: REJECTED_DUPLICATE_TXN_CLIENT - holdId: a1d7f3c9-2b45-4e1a-b6c2-3d9e8f0a7c31 result: FAILURE failureReason: code: '11001' message: Hold already decisioned status: PENDING substatus: PENDING_ACTION_CLIENT responses: 401-Unauthorized: description: Unauthorized - Authentication credentials are missing or invalid. content: application/json: schema: $ref: '#/components/schemas/Error' examples: Unauthorized: value: title: Unauthorized httpStatus: 401 traceId: 0eca2e1a-74b7-44b7-9e66-4a6ec8336eb9 context: - code: '14001' message: Authentication credentials are missing or invalid 403-Forbidden: description: Forbidden. The client does not have the required permissions to access this resource. Verify that the correct entitlements and scopes have been granted. content: application/json: schema: $ref: '#/components/schemas/Error' examples: Security Failure Error: $ref: '#/components/examples/SecurityFailureError' 429-TooManyRequests: description: Too Many Requests - Rate limit exceeded. content: application/json: schema: $ref: '#/components/schemas/Error' examples: Too Many Requests: value: title: Too Many Requests httpStatus: 429 traceId: 0eca2e1a-74b7-44b7-9e66-4a6ec8336eb9 context: - code: '10109' message: Rate limit exceeded. Please retry after some time. 503-ServiceUnavailable: description: Service Unavailable content: application/json: schema: $ref: '#/components/schemas/Error' examples: Service Unavailable Error: $ref: '#/components/examples/ServiceUnavailableError' 404-NotFound: description: Not Found content: application/json: schema: $ref: '#/components/schemas/Error' examples: Not Found: $ref: '#/components/examples/NotFound' x-jpmc-securityDefinitions: MutualTLS: type: x509 description: Mutual TLS authentication using client and server certificates. x-jpmc-security: - MutualTLS: [] ```