> **Source:** https://knowledge.leegality.com/document-execution/api/webhook-reviewer-approved > **Site:** Leegality Knowledge Base — https://knowledge.leegality.com > **About:** Leegality is a document execution platform covering eSigning, stamps, NeSL, workflows, and REST API integration. > **Navigation:** Every article on this site has a plain-text version at `.txt` (this format). To get an index of all articles with their `.txt` links, read: https://knowledge.leegality.com/llms.txt > **AI Guide:** For instructions on how to navigate this knowledge base as an AI agent, read: https://knowledge.leegality.com/ai-readable.txt --- # WEBHOOK /your-webhook-endpoint/v4/reviewer-approved — Reviewer Approved Fires when a reviewer approves the document. Delivered to `successWebhook`. **Authentication:** `X-Auth-Token` header required on every request. ## Request URL ``` WEBHOOK https://app1.leegality.com/api/your-webhook-endpoint/v4/reviewer-approved ``` **Environments:** - Production: `https://app1.leegality.com/api/your-webhook-endpoint/v4/reviewer-approved` - Sandbox: `https://sandbox.leegality.com/api/your-webhook-endpoint/v4/reviewer-approved` --- ## Request Body **Content-Type:** `application/json` The Webhook 4.0 envelope for the **Reviewer Approved** event, delivered on the success route when a reviewer approves the document. Every top-level key is always present; a value that does not apply to this event is sent as JSON null (the `mac` key is absent entirely when no account salt is configured). Branch your handling on `eventType`, which is always `REVIEWER_APPROVAL` here. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `webhookType` | string | No | The delivery route the event was sent on. Always `SUCCESS` for this event. `SUCCESS` events are delivered to your `successWebhook` endpoint. Allowed: `SUCCESS`. | `SUCCESS` | | `eventType` | string | No | What happened. Always `REVIEWER_APPROVAL` for this event, which fires when a reviewer approves the document. Branch your handling on this field. Allowed: `REVIEWER_APPROVAL`. | `REVIEWER_APPROVAL` | | `rejectionReason` | string | No | No rejection occurs on approval. Not applicable for the Reviewer Approved event. | `null` | | `combinationUuid` | string | No | The UUID of the combination this event belongs to, as supplied on the pack-create request. Webhook 4.0 carries no separate combination object — use this identifier to correlate the event with the combination you configured. | `c1d2e3f4-5678-4abc-9def-012345678903` | | `workflowRunContextId` | string | No | The pack-run identifier returned when the pack was created. It is shared by every event fired for that pack, so you can group all events belonging to a single pack run. | `wrc_abc123` | | `timestamp` | string | No | The time the event occurred, formatted as `dd-MM-yyyy HH:mm:ss`. The string carries no timezone marker. | `30-06-2026 18:55:02` | | `pack` | object | No | The pack the event belongs to. See **pack** below. | — | | `document` | object | No | The document the event is about. A separate event is fired for each document–combination mapping the invitee acted on. See **document** below. | — | | `invitationGroup` | object | No | The signer or reviewer group the invitee belongs to. See **invitationGroup** below. | — | | `invitee` | object | No | The invitee who acted or was affected. See **invitee** below. | — | | `messages` | array\ | No | No error messages on approval. Not applicable for the Reviewer Approved event. See **messages** below. | `` | | `mac` | string | No | Hex-encoded HMAC-SHA1 of `document.documentId`, keyed by your account salt. This key is absent entirely (not null) when no salt is configured. | `a3f5b9c8d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7` | #### pack The pack the event belongs to. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `packId` | string | No | The pack identifier. Use it with the Check pack details endpoint to retrieve the current pack, documents and audit trail. | `pack_abc123xyz` | | `packStatus` | string | No | Live pack state at the time the event was built. This is persisted state, not the event outcome — a failure event can carry a terminal pack state such as `EXPIRED`. **Possible values:** - `SENT` - `EXPIRED` - `COMPLETED` Allowed: `SENT`, `EXPIRED`, `COMPLETED`. | `SENT` | | `packReferenceNo` | string | No | Leegality's pack IRN, the platform-generated reference for the pack. | `PIRN-2026-001234` | | `urn` | string | No | The client-supplied reference for the pack. Reconcile events against your own systems on this field. | `CLIENT-URN-001` | #### document The document the event is about. A separate event is fired for each document–combination mapping the invitee acted on. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | No | The document UUID assigned at pack create. | `d1e2f3a4-5678-4abc-9def-012345678902` | | `documentId` | string | No | The document handle used by the document-fetch endpoints. `mac`, when present, is computed over this value. | `01HN8Z2K7M9P4Q5R6S7T8U9V0` | | `documentStatus` | string | No | Live document state. This is persisted state, not the event outcome. `PACK_PENDING_COMPLETION` means this document is fully executed but the pack is waiting on other documents; a failed or rejected document remains `SENT`. **Possible values:** - `SENT` - `PACK_PENDING_COMPLETION` - `COMPLETED` Allowed: `SENT`, `PACK_PENDING_COMPLETION`, `COMPLETED`. | `SENT` | | `irn` | string | No | The document IRN. | `IRN-2026-001234` | | `action` | string | No | The completing action recorded on the document. Always `APPROVED` for the Reviewer Approved event. Allowed: `APPROVED`. | `APPROVED` | | `signatureType` | string | No | Reviewers do not sign. Not applicable for the Reviewer Approved event. | `null` | #### invitationGroup The signer or reviewer group the invitee belongs to. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | No | The group UUID. | `b2c3d4e5-6789-4abc-8def-123456789012` | | `groupName` | string | No | The group's display name. | `Reviewers` | | `groupStatus` | string | No | Live group state. This is persisted state, not the event outcome — a failure event can carry `groupStatus: COMPLETED` (for example, when a threshold group has already met its minimum). **Possible values:** - `INACTIVE` - `ACTIVE` - `COMPLETED` Allowed: `INACTIVE`, `ACTIVE`, `COMPLETED`. | `COMPLETED` | | `type` | string | No | The group role. For this event the invitee is a reviewer, so this is typically `REVIEWER` or `GROUP_REVIEWER` (`GROUP_*` indicates a threshold group). **Possible values:** - `SIGNER` - `REVIEWER` - `GROUP_SIGNER` - `GROUP_REVIEWER` Allowed: `SIGNER`, `REVIEWER`, `GROUP_SIGNER`, `GROUP_REVIEWER`. | `REVIEWER` | #### invitee The invitee who acted or was affected. | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `uuid` | string | No | The invitee UUID. | `c3d4e5f6-7890-4abc-8def-234567890123` | | `inviteeName` | string | No | The invitee's name. | `Anita Verma` | | `inviteeEmail` | string | No | The invitee's email address. | `anita@example.com` | | `inviteeMobile` | string | No | The invitee's 10-digit mobile number, without country code. | `9820000003` | | `invitationStatus` | string | No | Live invitation state. Always `REVIEWER_APPROVED` for the Reviewer Approved event. Allowed: `REVIEWER_APPROVED`. | `REVIEWER_APPROVED` | #### messages | Field | Type | Required | Description | Example | |-------|------|----------|-------------|---------| | `errorCode` | string | No | An error code. | — | | `errorMessage` | string | No | Human-readable message text. | — | ### Sample Request ```json { "webhookType": "SUCCESS", "eventType": "REVIEWER_APPROVAL", "rejectionReason": null, "combinationUuid": "c1d2e3f4-5678-4abc-9def-012345678903", "workflowRunContextId": "wrc_abc123", "timestamp": "30-06-2026 18:55:02", "pack": { "packId": "pack_abc123xyz", "packStatus": "SENT", "packReferenceNo": "PIRN-2026-001234", "urn": "CLIENT-URN-001" }, "document": { "uuid": "d1e2f3a4-5678-4abc-9def-012345678902", "documentId": "01HN8Z2K7M9P4Q5R6S7T8U9V0", "documentStatus": "SENT", "irn": "IRN-2026-001234", "action": "APPROVED", "signatureType": null }, "invitationGroup": { "uuid": "b2c3d4e5-6789-4abc-8def-123456789012", "groupName": "Reviewers", "groupStatus": "COMPLETED", "type": "REVIEWER" }, "invitee": { "uuid": "c3d4e5f6-7890-4abc-8def-234567890123", "inviteeName": "Anita Verma", "inviteeEmail": "anita@example.com", "inviteeMobile": "9820000003", "invitationStatus": "REVIEWER_APPROVED" }, "messages": [], "mac": "a3f5b9c8d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7" } ``` --- ## Responses ### 2XX — Return any 2XX status code (200, 201, or 202) to acknowledge receipt. No specific response body is required. Any 2XX status code is accepted.