This event occurs when a ServicingAction reaches a status you can act on, or when Canopy's servicing team takes it over (is_manual becomes true). It is not sent when an action returns to PROCESSING, or for errors Canopy retries on its own.
If a servicing request has three ServicingActions, you receive a separate SERVICING_STATUS_UPDATED webhook for each action every time its status changes. When the whole request finishes, you also receive one COMPLETE or ERROR webhook.
The webhook's pull_id is the servicing Pull the action runs on. data.original_pull_id is the Pull you requested servicing for.
Webhook Request Format
The webhook is a POST request with a JSON body that will look like the following:
{
"widget_id": "<WIDGET_ID>",
"team_id": "<TEAM_ID>",
"pull_id": "<SERVICING_PULL_ID>",
"pull_type": "SERVICING",
"status": "<PULL_STATUS>", // The servicing Pull's status, which changes as Canopy works; use data.status for the action
"meta_data": {... meta_data of the Pull you requested servicing for ...},
"event_type": "SERVICING_STATUS_UPDATED",
"account_identifier": "<ACCOUNT_IDENTIFIER>",
"is_monitored": false,
"data": {
"servicing_action_id": "<SERVICING_ACTION_ID>",
"original_pull_id": "<PULL_ID>",
"status": "VERIFIED",
"previous_status": "VERIFYING",
"is_manual": false,
"validation_error_type": null,
"document_id": "<DOCUMENT_ID>"
}
}| Data key | Data description |
|---|---|
| servicing_action_id | ID of the ServicingAction, as returned by POST /servicings. |
| original_pull_id | ID of the Pull the servicing request was made for. |
| status | The action's new status. Possible values: PROCESSING, SUBMITTED, VERIFYING, VERIFIED, VERIFIED_WITHOUT_DOCUMENT, VERIFICATION_FAILED, VALIDATION_ERROR, UNCONFIRMED, INTERNAL_ERROR, PROVIDER_ERROR. PROCESSING, INTERNAL_ERROR and PROVIDER_ERROR appear only with is_manual: true, when Canopy's servicing team takes over. See ServicingAction for what each status means. |
| previous_status | The action's status before this change. Equal to status when only is_manual changed. |
| is_manual | true once Canopy's servicing team is completing the action. |
| validation_error_type | Why the change cannot be applied, when status is VALIDATION_ERROR. Otherwise null. |
| document_id | ID of the updated declarations page, when status is VERIFIED. Otherwise null. |
You may use GET /servicings/:servicingActionId to get the full ServicingAction.
Testing in Sandbox
In sandbox, each action's carrier_policy_number picks its outcome:
| carrier_policy_number | Outcome |
|---|---|
SANDBOX-VALIDATION-ERROR | VALIDATION_ERROR |
SANDBOX-VERIFICATION-FAILED | VERIFICATION_FAILED |
SANDBOX-VERIFIED-WITHOUT-DOCUMENT | VERIFIED_WITHOUT_DOCUMENT |
| Any other value | VERIFIED |
Each step takes a few seconds.

