Configure Delivery in the Merchant Dashboard
1
Open webhook settings
In the Merchant Dashboard, select API Keys. On the API Keys and Webhooks page, find Webhooks and click Add Webhook.
2
Select the application and event type
Select the intended App ID. For Event Type, select MED PROCESSING for MED case notifications or INFRACTION PROCESSING for infraction notifications. These are dashboard labels; the payload event names are listed in Events.
3
Save the callback endpoint
Enter your receiver’s Callback URL, select
application/json for Content Type, and click Confirm. Check that the subscription appears in the Webhooks list with status Active. If you need both event types, add a subscription for each.An active subscription confirms configuration, not successful delivery. Implement Signature Verification and Delivery and Retries in your receiver.
Subscription Scopes
| Scope | Matching Rule |
|---|---|
| USER | Matches user_id; the subscription does not target an account. |
| ACCOUNT | Matches the exact owner ISPB and account number. |
USER and ACCOUNT deliveries. Each matching subscription receives its own delivery_id. The callback exposes subscription_scope but does not expose the owner identifiers.
Events
event_type | Trigger |
|---|---|
MED_CASE_CREATED | A case is created with a valid owner. |
MED_CASE_STATUS_CHANGED | An existing case moves to a different status. |
INFRACTION_RECEIVED | A new infraction is stored for an owned payer case. |
INFRACTION_STATUS_CHANGED | An existing infraction moves to a different status. |
A status-change event is not created when the status value is unchanged.
Envelope Schema
| Field | Type | Description |
|---|---|---|
delivery_id | string | Stable 64-character lowercase hexadecimal identifier for this subscription delivery. |
event_id | string | Stable identifier of the source event. Treat it as opaque. |
event_type | string | One of the four MED event types. |
event_version | string | Payload contract version; currently 1.0. |
subscription_scope | string | USER or ACCOUNT. |
occurred_at | number | Event time as Unix milliseconds. |
resource_id | string | Case or infraction resource identifier. |
resource_version | number | Version of the resource snapshot. |
data | object | Case or infraction snapshot. |
Resource Types & Statuses
Case Data & Statuses
Case Data & Statuses
Case events contain:
case_idtransaction_idroot_end_to_end_idstatusprevious_status(for a status change)requested_amountblocked_amount_totalreturned_amount_totalcurrencyflow_typecreated_atupdated_atanalysis_deadlinemanual_refund_deadline
CREATED, TRACKED, AWAITING_ANALYSIS, ANALYZED, RETURN_PROCESSING, COMPLETED, CANCELLED, FAILED.flow_type values: UNSPECIFIED, AUTOMATED, MANUAL.Infraction Data & Statuses
Infraction Data & Statuses
Infraction events contain:
case_idinfraction_iddict_infraction_idroot_end_to_end_idstatusprevious_status(for a status change)requested_amountblocked_amountcurrencyanalysis_resultreceived_atsla_deadlineclosed_at
RECEIVED, BLOCKING_PENDING, BLOCKED, ANALYSIS_PENDING, CLOSED_AGREED, CLOSED_DISAGREED, CANCELLED, FAILED.analysis_result values: UNSPECIFIED, AGREED, DISAGREED.All MED amount fields are decimal strings. MED timestamps are JSON numbers containing Unix milliseconds.
previous_status is omitted when it does not apply. Ignore unknown fields so additive payload changes do not break your receiver.Payload Examples
- Case Status-Change Example
- Infraction Status-Change Example
Ordering and Idempotency
- Use
delivery_idas the delivery idempotency key. - The same
event_idsent to different subscriptions has differentdelivery_idvalues. - Deliveries are at least once and are not globally ordered.
- Use
resource_idandresource_versionto reject stale snapshots. - Do not derive business meaning by parsing
event_id.
See Delivery and Retries for acknowledgement and retry behavior.