# Notification of Enrollment Status Update

When a merchant updates their **enrollment status**, the system sends the updated enrollment data to the configured **webhook endpoint** in **JSON format**.

This webhook allows downstream systems to stay in sync with enrollment progress across supported products (e.g., Ethoca, RDR).

### Payload Field Descriptions

#### Top-Level Fields

| Field                       | Type   | Description                                                       |
| --------------------------- | ------ | ----------------------------------------------------------------- |
| `action`                    | string | Event type. Always `enrollment_request_status_update`             |
| `request_id`                | number | Unique enrollment request identifier                              |
| `request_date`              | string | Original enrollment request creation timestamp                    |
| `merchant_name`             | string | Merchant name                                                     |
| `site_name`                 | string | Merchant site name                                                |
| `products`                  | string | Comma-separated list of enrolled products                         |
| `enrollment_request_status` | string | Overall enrollment status (e.g. `ENROLLED`, `PARTIALLY ENROLLED`) |
| `enrollment_request_items`  | object | Product-specific enrollment details                               |
| `updated_at`                | string | Timestamp of the latest update                                    |

***

#### Enrollment Request Items

The `enrollment_request_items` object is grouped by product name (e.g. `ethoca`, `rdr`). Each product contains an array of enrollment entries.

**Common Fields**

| Field           | Type   | Description                            |
| --------------- | ------ | -------------------------------------- |
| `descriptor`    | string | Descriptor submitted for enrollment    |
| `status`        | string | Current enrollment status for the item |
| `last_activity` | string | Last update timestamp for the item     |

**Ethoca-Specific Fields**

| Field        | Type   | Description                                            |
| ------------ | ------ | ------------------------------------------------------ |
| `match_type` | string | Descriptor matching rule (e.g. `Exact`, `Starts with`) |

**RDR-Specific Fields**

| Field         | Type           | Description            |
| ------------- | -------------- | ---------------------- |
| `mcc`         | string \| null | Merchant Category Code |
| `visa_bin`    | string \| null | Visa BIN               |
| `visa_caid`   | string \| null | Visa CAID              |
| `visa_arn`    | string \| null | Visa ARN               |
| `rdr_ruleset` | string \| null | Applied RDR ruleset    |

***

### Webhook Retry Behavior

If a webhook delivery attempt **fails**, the system will:

* Automatically retry posting the webhook
* Continue retrying until the webhook **expires after 72 hours**
* Stop retries once the expiration window is reached

This ensures reliable delivery even during temporary endpoint outages.\ <br>

### Webhook Payload

Below is an example of the JSON payload sent to the webhook endpoint:

```json
{
  "action": "enrollment_request_status_update",
  "request_id": 2451,
  "request_date": "2026-01-15 10:42:11",
  "merchant_name": "Acme Online Retail Ltd",
  "site_name": "Acme Online Store",
  "products": "ethoca,rdr",
  "enrollment_request_status": "PARTIALLY ENROLLED",
  "enrollment_request_items": {
    "ethoca": [
      {
        "descriptor": "ACME*ONLINE",
        "status": "ENROLLED",
        "last_activity": "2026-01-15 11:05:32",
        "match_type": "Starts with"
      },
      {
        "descriptor": "ACME SUBSCRIPTION",
        "status": "WAITING FOR ACTION",
        "last_activity": "2026-01-16 02:18:09",
        "match_type": "Exact"
      }
    ],
    "rdr": [
      {
        "descriptor": "ACME*ONLINE",
        "status": "ENROLLED",
        "last_activity": "2026-01-15 11:05:32",
        "mcc": "5732",
        "visa_bin": "411111",
        "visa_caid": "ACME12345",
        "visa_arn": "745903821649201234",
        "rdr_ruleset": "STANDARD_ECOMMERCE"
      }
    ]
  },
  "updated_at": "2026-01-16 02:18:09"
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.payshield.ai/txalerts-dispute-alerts/webhooks/notification-of-enrollment-status-update.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
