Skip to main content
Checks

Submit a decision for a check exception

In this tutorial, you’ll learn how to submit a decision for a check exception by using the check fraud protection API.

  • Submit a PAY decision
  • Submit a RETURN decision with a return reason
  • Retry a request by using an idempotency key

Before you begin

To submit a check exception decision, you need:

  • A registered and fully onboarded Developer Account on the J.P. Morgan Payments Developer Portal.
  • An active project that provides you with the credentials used to make a request.
  • An exception id for the exception you want to decision.

Submit a decision

Send a POST request to /checks/exceptions/{id}/decision to submit a decision for an exception identified by id.

Decision rules

  • Use returnReason only when decision.type is RETURN.
  • When decision.type is PAY, returnReason is not required.
  • When decision.type is RETURN, select returnReason from the Positive Pay reason table.

Idempotency rules

This operation supports idempotency by using the Idempotency-Key header.

  • Duplicate requests with the same idempotency key within 15 minutes return the cached response.
  • Only successful responses (2xx) are cached.
  • After the 15-minute idempotency window expires, submitting a decision for an already processed exception returns a 409 Conflict response.

Submit a RETURN decision

Send a POST request to the /checks/exceptions/{id}/decision endpoint to submit a RETURN decision with a return reason.

Request

{
  "revision": {
    "checkNumber": "123457",
    "checkAmount": {
      "amount": "150.25",
      "currency": "USD"
    }
  },
  "decision": {
    "type": "RETURN",
    "returnReason": "RTN_REFER_TO_MAKER"
  }
}

Response

{
  "id": "EXC_001",
  "debtor": {
    "accountNumber": "123456789012",
    "countryCode": "US"
  },
  "checkNumber": "123456",
  "checkSequenceNumber": "987654321",
  "checkAmount": {
    "amount": "150.25",
    "currency": "USD"
  },
  "revision": {
    "checkNumber": "123457",
    "checkAmount": {
      "amount": "150.25",
      "currency": "USD"
    }
  },
  "exceptionType": "REVERSE_POSITIVE_PAY",
  "status": "DECISIONED",
  "statusUpdatedAt": "2026-02-12T18:25:43Z",
  "statusUpdateBy": "SYSTEM",
  "exceptionProcessDate": "2026-02-12",
  "checkPaidDate": "2026-02-12",
  "exceptionCutofftime": "2026-02-12T20:00:00Z",
  "defaultDecision": {
    "type": "PAY"
  },
  "clientDecision": {
    "type": "PAY"
  }
}
  • For more information about required and optional parameters, see Parameters.
  • For information about status responses and error codes supported by the checks API, see Error codes.
  • For more information about check fraud protection resources, see Resources.