# Account Push (Beta)
source: https://developer.mastercard.com/open-finance-us/documentation/products/manage/account-push/index.md

Note: Account Push is currently in Beta. Contact your sales representative or account manager to learn more.

The Account Push service enables your application to receive webhook notifications when an event occurs relating to a given user's linked account. This helps to ensure your application has the most up-to-date account information that is available in Mastercard's Open Finance ecosystem.

When a change is detected for the given user's linked account (such as an account status change, connectivity failure, authentication issue, or other changes that affect the account's eligibility to process future payments), Mastercard will send a webhook notification to the callback URL registered for your application.

Account Push sends the following webhook notifications:

|                  Webhook                   |                                                       Description                                                        |
|--------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|
| `account-push.account-status.changed`      | Provides notifications when an account status change has occurred (for example, when an account is closed or not found). |
| `account-push.account-connectivity.failed` | Provides notifications when a connectivity issue is found associated with a given account.                               |

Mastercard automatically updates the data from accounts added by customers during our nightly batch aggregation, which Account Push relies on. This is the default situation for most partners and FIs, but we recommend you check with your Customer Success Manager (CSM) if you are unsure.

If something prevents the expected nightly batch aggregation for a specific account (for example because of a connectivity error on the account), this will be reported as an event by Account Push.

## How It Works {#how-it-works}

The following steps are necessary to use webhooks with Account Push:

1. Review the prerequisites and usage information section of the [Open Banking Webhook Management System (OBWMS)](https://developer.mastercard.com/open-finance-us/documentation/webhooks/obwms/index.md#usage-and-prerequisites) documentation.

2. Set up an inbound URL which Mastercard can send webhook events to.

   Tip: For testing purposes, you can use tools like webhook.site or beeceptor.com that receive webhooks and post the content for you to review (note that this is not an official endorsement of any of these services). In production, you **must** use your own secure webhook service.

   <br />

3. Subscribe to receive webhooks.
   To do this you will need to contact your Technical Account Manager and request that Account Push webhooks be sent to your inbound URL.
   **This is currently a manual process and you will need to work with your Technical Account Manager to ensure we can successfully send events to your listener. Do not attempt to use OBWMS endpoints to subscribe to Account Push events as this will not work.**

<!-- -->

4. Make sure you are able to [verify the message signature](https://developer.mastercard.com/open-finance-us/documentation/webhooks/obwms/index.md#message-verification) to ensure the webhook is valid and being sent by Mastercard. This requires you to download the **Mastercard signature verification key** for your project from the project dashboard on the Mastercard Developers site, as described in the [API Basics](https://developer.mastercard.com/open-finance-us/documentation/onboarding/index.md#obwms-authentication) documentation. **Do not attempt to use OBWMS endpoints to create test events for Account Push as this will not work.**

## Account Push Webhooks {#account-push-webhooks}

Each Account Push webhook notification contains a detailed payload which includes a number of standard fields, which all events generated by the Mastercard Open Banking Webhook System (OBWMS) will include, and a `data` object which encapsulates an `event` object. This contains the details of the event, including the event name (type), `microEventName` and `actionCode`, as well as the relevant `account` data.
Tip: See also the [webhook headers](https://developer.mastercard.com/open-finance-us/documentation/webhooks/obwms/index.md#webhook-structure-message-headers) descriptions in the main OBWMS documentation.

Example webhook event message payloads are shown below.

### **account-push.account-connectivity.failed** {#__account-pushaccount-connectivityfailed__}

```json
{
  "id": "67d19701-f48f-4612-9c80-aebb31b814df",
  "time": "2025-12-15T12:11:32.253Z",
  "type": "account-push.account-connectivity.failed",
  "source": "@mastercard/open-banking-webhook-messaging-system",
  "specversion": "1.0",
  "datacontenttype": "application/json",
  "data": {
    "event": {
      "name": "account-push.account-connectivity.failed",
      "microEventName": "account.invalid",
      "actionCode": "user.connect.fix, partner.delete.account, user.switch.or.add.account",
      "account": {
        "id": "10001095520",
        "customerId": "10000276192",
        "institutionId": "170681",
        "type": "cd",
        "aggregationStatusCode": "946",
        "institutionLoginId": "10000404441",
        "aggregationAttemptDate": 1765800692,
        "aggregationSuccessDate": 1765800692,
        "institutionSupportsTokenizedAccountNumber": true
      }
    }
  },
  "subscriberid": "2445584967175"
}
```

### **account-push.account-status.changed** {#__account-pushaccount-statuschanged__}

```json
{
  "id": "52dcb4b2-aadf-40b7-97fc-97cff4ce42e4",
  "time": "2026-02-06T16:58:49.023Z",
  "type": "account-push.account-status.changed",
  "source": "@mastercard/open-banking-webhook-messaging-system",
  "specversion": "1.0",
  "datacontenttype": "application/json",
  "data": {
    "event": {
      "name": "account-push.account-status.changed",
      "microEventName": "account.migration.oauth.issue",
      "actionCode": "user.connect.fix",
      "account": {
        "id": "9011749275",
        "customerId": "9010779962",
        "institutionId": "177780",
        "type": "checking",
        "aggregationStatusCode": "945",
        "institutionLoginId": "9006049401",
        "aggregationSuccessDate": 1770396351,
        "aggregationAttemptDate": 1770396351,
        "institutionSupportsTokenizedAccountNumber": false
      }
    }
  },
  "subscriberid": "2445584967175"
}
```

## Understanding the message data {#understanding-the-message-data}

The standard fields which are included in all event messages are as follows:

The webhook structure is based on the CloudEvents 1.0 specification. When receiving a webhook, you can expect these standard fields to be provided at the beginning of each webhook message:

|    Event field    |              Data Type               |                                                                                                              Description                                                                                                               |
|-------------------|--------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `id`              | String                               | Identifies the event. This will be unique for each distinct event. If an event with the same ID is received you can assume it is a duplicate (for example, an event could potentially be re-sent because of a network issue). Required |
| `time`            | Timestamp (ISO 8601/RFC 3339 String) | Timestamp of when the occurrence happened. Optional                                                                                                                                                                                    |
| `type`            | String                               | This attribute contains a value describing the type of event (the event name). For Account Push, this will be either `account-push.account-status.changed` or `account-push.account-connectivity.failed`. Required                     |
| `source`          | String (URIReference)                | This will be the Mastercard OBWMS. Required                                                                                                                                                                                            |
| `specversion`     | String                               | The CloudEvents specification version which the message complies with. Required                                                                                                                                                        |
| `datacontenttype` | String (media type)                  | Media type for the event payload. Optional                                                                                                                                                                                             |
| `subscriberid`    | String                               | The ID of the partner subscribing to the event (in other words, your partner ID). Required                                                                                                                                             |

These are standard across all event messages from the webhook management system---for the purposes of Account Push, the event `id`, `time`, and `type` values are of most interest.

The rest of the message, containing information specific to Account Push events, is contained within the `data` and `event` objects which follow the standard fields.

The following table highlights the key `event` payload elements for troubleshooting and fixing accounts that are ineligible for processing payments:

|   Event field    | Data Type |                                                                                                                                                                                          Description                                                                                                                                                                                           |
|------------------|-----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `name`           | String    | Webhook event name (for example: `account-push.account-status.changed`, `account-push.account-connectivity.failed`). **Note:** This replicates the `type` value included in the standard fields, and will be removed in a future version. For this reason we recommend that you use the value found in the top level `type` field to interpret which event message is being received. Optional |
| `microEventName` | String    | The values given here are intended to give more detail on the cause of the connectivity problem or change in account status . See the [micro event names table](https://developer.mastercard.com/open-finance-us/documentation/products/manage/account-push/index.md#micro-event-names) below for the meaning of each possible value. Required                                                 |
| `actionCode`     | String    | These values can be used to decide what action you or the end user should undertake to fix any underlying problem with the account. See the [action codes table](https://developer.mastercard.com/open-finance-us/documentation/products/manage/account-push/index.md#action-codes) below for the meaning of each possible value. Required                                                     |

### Micro event names {#micro-event-names}

The `microEventName` values are as follows:

|            Micro event name value             |                                                                                                                                                                                                                                      Description                                                                                                                                                                                                                                       |
|-----------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `account.concurrent.login`                    | There are too many concurrent connections to the financial institution for the end user.                                                                                                                                                                                                                                                                                                                                                                                               |
| `account.invalid`                             | Account is invalid because the token has been accepted but no record has been returned from the institution for the request. This may be due to account closure.                                                                                                                                                                                                                                                                                                                       |
| `account.migration.oauth.issue`               | Occurs when an account is migrated from legacy to OAuth connection but requires customer to provide their consent again.                                                                                                                                                                                                                                                                                                                                                               |
| `account.mismatched`                          | Occurs when there's a mismatch between the user's account information provided to your application and the information held at the financial institution.                                                                                                                                                                                                                                                                                                                              |
| `account.not.found`                           | Occurs when one of the following happens: * The account can be inactive, temporarily frozen or closed at the financial institution so we can no longer pull data. * Additional information required from the end user during an add account event. * Existing connection to a financial institution is down.                                                                                                                                                                           |
| `account.status.closed`                       | Active bank account cannot be found at the financial institution.                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `account.token.issue`                         | Token associated with the end user account has expired or is invalid.                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `account.unusable`                            | Account data cannot be retrieved, and the account is non-recoverable.                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `credential.invalid`                          | Occurs when the end user credentials are invalid.                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `financial-institution.action.required`       | User action required at financial institution. This typically means that there is an unexpected notice for the customer at the website such as when the customer has to accept new terms, participate in a program like e-statements, or change their security information like password or security questions.                                                                                                                                                                        |
| `financial-institution.authentication.failed` | Inadequate response to security questions from the end user.                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `financial-institution.connection.broken`     | Occurs due to any of the following causes: * Inadequate response to security questions from the end user. * Existing connection to a financial institution is down. * The end user session has either expired or timed out.                                                                                                                                                                                                                                                            |
| `financial-institution.connection.issue`      | Occurs due to any of the following causes: * A new connection to a financial institution is being created. * Existing connection to a financial institution is down.                                                                                                                                                                                                                                                                                                                   |
| `financial-institution.unsupported`           | Connection to a financial institution is not supported. Common causes include: * Institution does not support aggregation. * Institution does not support some open banking products. * A specific end user is not authorized due to security reasons.                                                                                                                                                                                                                                 |
| `language.invalid`                            | The end user has a language preference other than English. This could potentially cause issues with the integration for this specific institution.                                                                                                                                                                                                                                                                                                                                     |
| `user.consent.not.provided`                   | Occurs due to any of the following causes: * Bank updates its website or server. These changes can disrupt the connection between your app and the bank, requiring reconsent to restore the original connection. * Information provided by the end user during authentication is either incomplete or insufficient to link an account and access data. * Incorrect response to security questions, for example, incorrect security code or an expired security code due to time lapse. |
| `user.enrollment.required`                    | Occurs due to any of the following causes: * User action required at financial institution, such as enrolling in e-statements or paperless statements. * End user has not signed up for or activated a specific service or product with their financial institution that your application is trying to access.                                                                                                                                                                         |
| `user.not.authorized`                         | Occurs when the end user is not authorized to access their accounts due to security reasons such as insufficient permissions or the need for additional verification of the user.                                                                                                                                                                                                                                                                                                      |
| `user.update-information.required`            | Financial institution requesting updated contact information.                                                                                                                                                                                                                                                                                                                                                                                                                          |

### Action codes {#action-codes}

The `actionCode` values are as follows:

|                                   Action code value                                   |                                                                                                                                                                                                                                         Recommended action                                                                                                                                                                                                                                         |
|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `partner.delete.account` `user.switch.or.add.account`                                 | First, delete the account on behalf of the end user because it is irretrievable. Then, prompt the end user to link a different bank account. **Note:** To delete an account, use the [Delete Access to Customer Account by ID](https://developer.mastercard.com/open-finance-us/documentation/api-reference/index.md#DeleteCustomerAccount) call. This action will remove access to a single account only.                                                                                         |
| `partner.delete.account` `user.switch.or.add.different.financial-institution.account` | First, delete the account on behalf of the end user because it is irretrievable. Then, prompt the end user to link a different bank account from a different financial institution. **Note:** To delete an account, use the [Delete Access to Customer Account by ID](https://developer.mastercard.com/open-finance-us/documentation/api-reference/index.md#DeleteCustomerAccount) call. This action will remove access to a single account only.                                                  |
| `user.action.financial-institution`                                                   | First, prompt the end user to login to the financial institution and complete any required actions (update contact information, accept e-statements, accept new terms and conditions, and so on.)                                                                                                                                                                                                                                                                                                  |
| `user.action.financial-institution.user.connect.fix`                                  | First, prompt the end user to login to the financial institution and complete any required actions (update contact information, accept e-statements, accept new terms and conditions and so on.). Then, prompt the end user to re-authenticate via Connect Fix.                                                                                                                                                                                                                                    |
| `user.connect.fix`                                                                    | Prompt the end user to re-authenticate via Connect Fix.                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `user.connect.fix` `user.switch.or.add.account`                                       | First, prompt the end user to re-authenticate via Connect Fix. If the account cannot be fixed, prompt the end user to link a different bank account.                                                                                                                                                                                                                                                                                                                                               |
| `user.connect.fix` `partner.delete.account` `user.switch.or.add.account`              | First, prompt the end user to re-authenticate via Connect Fix. If the account cannot be fixed, delete the account on behalf of the end user because it is irretrievable. Then, prompt the end user to link a different bank account. **Note:** To delete an account, use the [Delete Access to Customer Account by ID](https://developer.mastercard.com/open-finance-us/documentation/api-reference/index.md#DeleteCustomerAccount) call. This action will remove access to a single account only. |
| `user.logout.financial-institution`                                                   | Prompt the end user to log out from their account at the financial institution application or website.                                                                                                                                                                                                                                                                                                                                                                                             |
| `user.switch.or.add.account`                                                          | Prompt the end user to link a different bank account.                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `user.switch.or.add.different.financial-institution.account`                          | Prompt the end user to link a different bank account from a different financial institution.                                                                                                                                                                                                                                                                                                                                                                                                       |

### The account data object {#the-account-data-object}

The `account` data object returned is a shorter form of the data returned by the Get Customer Account endpoints.

|               `account` field               |   Data Type   |                                                                                                                                                                                              Description                                                                                                                                                                                               |
|---------------------------------------------|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `id`                                        | String        | The account ID. Required                                                                                                                                                                                                                                                                                                                                                                               |
| `customerId`                                | String        | The customer ID. Required                                                                                                                                                                                                                                                                                                                                                                              |
| `institutionId`                             | String        | The institution ID. Required                                                                                                                                                                                                                                                                                                                                                                           |
| `institutionLoginId`                        | String        | The unique ID which was generated when the customer linked their account using Mastercard Data Connect. Required                                                                                                                                                                                                                                                                                       |
| `institutionSupportsTokenizedAccountNumber` | Boolean       | Indicates whether the institution supports [Tokenized Account Numbers](https://developer.mastercard.com/open-finance-us/documentation/products/pay/verification-money-transfer/index.md#tokenized-account-numbers-tan). `TRUE` if TANs are supported. **Note:** This element is the only field that is not part of the Get Customer Account endpoints. It is unique to Account Push webhooks. Required |
| `type`                                      | String        | The account type (for example, "checking", "savings", "investment", and so forth). Required                                                                                                                                                                                                                                                                                                            |
| `aggregationStatusCode`                     | String        | The status of the most recent aggregation attempt. See [Aggregation Status Codes](https://developer.mastercard.com/open-finance-us/documentation/products/manage/aggregation-status-codes/index.md). Required                                                                                                                                                                                          |
| `aggregationAttemptDate`                    | Number (Long) | The date-time (Unix epoch value in seconds) of the last attempt at data aggregation for this account (whether successful or not). Required                                                                                                                                                                                                                                                             |
| `aggregationSuccessDate`                    | Number (Long) | The date-time (Unix epoch value in seconds) of the last *successful* attempt at data aggregation for this account. Required                                                                                                                                                                                                                                                                            |

See also [Understanding Account Data](https://developer.mastercard.com/open-finance-us/documentation/products/manage/account-aggregation/understanding-account-data/index.md#understanding-key-account-identifiers).
