# JPMC-PDP Documentation from https://developer.payments.jpmorgan.com # Brandflip logic A brandflip refers to the process where an issuing bank changes the card brand for a consumer. For example, the bank switches from Visa, American Express, or Discover to Mastercard. This occurs when a consumer’s account migrates from one payment network to another, such as Visa to Mastercard. When you request an account update for a Visa card and receive a `CLOSED_ACCOUNT` response from Visa, or for a Mastercard card and receive a `CONTACT_CARDHOLDER` response from Mastercard, we apply brandflip logic to maximize the chance of finding a valid account for the consumer. > Brandflip logic applies only to one-time inquiries when you are entitled for Visa, Mastercard, and Discover. > **Applying brandflip logic for previously issued Visa cards** Follow these steps to apply brandflip logic, **Step 1:** We check with Mastercard for a new account and expiry details using the originally presented Visa card. - If Mastercard returns NEW_ACCOUNT_AND_EXPIRY, we respond with the new Mastercard account details. This is a brandflip scenario. - If Mastercard returns NO_MATCH_NON_PARTICIPATING_BIN, we proceed to Step 2. **Step 2:** We check with Discover using the same Visa card details. - If Discover returns NEW_ACCOUNT_AND_EXPIRY, we respond with the new Discover account details. This is a brandflip scenario. - If Discover returns no update, we respond with the original Visa account as CLOSED_ACCOUNT and complete the brandflip process. ## Bypass brand check The Account Updater API supports a bypass brand check feature for merchants entitled for Visa, Mastercard, and Discover. This enhancement allows you to receive real-time responses and avoid asynchronous acknowledgments when running one-time inquiries. **How it works:** When the request includes `bypassBrandCheckIndicator` field set to `true`, we check only with Mastercard after receiving a `CLOSED_ACCOUNT` from Visa. - If Mastercard provides a new account and expiry, we respond with those details. - If not, we respond with the Visa account as CLOSED_ACCOUNT. - No check is performed with Discover, ensuring a real-time response. Similarly, if you request an account update for a Mastercard card and receive a `CONTACT_CARDHOLDER` response from Mastercard, we check only with Visa for updated account details. - If Visa provides a new account and expiry, we respond with those details. - If not, we respond with the Mastercard account as CONTACT_CARDHOLDER. - No check is performed with Discover, ensuring a real-time response When `bypassBrandCheckIndicator` field is set to `false` or is omitted: - We apply the full brandflip logic, checking with Mastercard and then Discover if needed. - If Discover is checked, the response may be asynchronous, and you may receive an expectedRecordUpdateTimestamp for when the update will be available. ## Request account updater for Visa with bypassBrandCheckIndicator set to true Request an account updater for Visa with `bypassBrandCheckIndicator` flag set to `true`. The account is verified against Mastercard. When Mastercard does not provide a new account and expiry, we update `reasonMessage` to `CLOSED_ACCOUNT.` **HTTP method: **`POST` **Endpoint: **`/account-updates` ```json { "accountInformation": { "cardNumber": "4111111111111114", "expiry": { "month": "9", "year": "2032" } }, "bypassBrandCheckIndicator": true } ``` **Response:** ```json { "requestCreateTimestamp": "2026-05-05T18:25:56.512Z", "responseId": "edb56227-7ec3-47e8-8500-00655daca112", "requestId": "41c52182-7825-4026-8beb-c7b2a43ca13b", "response": "SUCCESS", "accountUpdaterResult": { "oldAccountInformation": { "cardNumber": "4111111111111114", "expiry": { "month": 9, "year": 2032 }, "cardTypeName": "VISA", "accountNumberType": "PAN" }, "networkResponse": { "networkResponseCode": "C" }, "reasonMessage": "CLOSED_ACCOUNT", "responseMessage": "Account has been closed" }, "bypassBrandCheckIndicator": true } ``` ## Request account updater for Mastercard with bypassBrandCheckIndicator set to true Request an account updater for Mastercard with bypassBrandCheckIndicator flag set to true. The account is verified against Visa. When Visa does not provide a new account and expiry, we update `reasonMessage` to `CONTACT_CARDHOLDER`. **HTTP method: **`POST` **Endpoint: **`/account-updates` ```json { "accountInformation": { "cardNumber": "5111111111111114", "expiry": { "month": 8, "year": 2026 } }, "bypassBrandCheckIndicator": true } ``` **Response:** ```json { "requestCreateTimestamp": "2026-05-06T14:08:27.789Z", "responseId": "c30c2699-28e5-4cd6-816a-d1ca90586690", "requestId": "6ce91312-5d1c-4a2b-8304-acf8bc450e88", "response": "SUCCESS", "accountUpdaterResult": { "oldAccountInformation": { "cardNumber": "5111111111111114", "expiry": { "month": 8, "year": 2026 }, "cardTypeName": "MASTERCARD", "accountNumberType": "PAN" }, "networkResponse": { "networkResponseCode": "CONTACT" }, "reasonMessage": "CONTACT_CARDHOLDER", "responseMessage": "Contact Cardholder" }, "bypassBrandCheckIndicator": true } ```