# Self-Service Request Submitted

Delivered when an end-user finishes the self-service flow (filled the form + completed identification if required) and the request is ready for a decision.
**Only fires for configs with `verification_mode: webhook`.** In `manual` mode the request is approved/rejected from the portal UI; in `automatic` mode it is auto-approved server-side and no submitted webhook is sent.
After receiving this event, fetch the request via `GET /b2b/v1/self-service/requests/{requestId}` to inspect captured claims and the admin-claims schema, then POST your decision to `/b2b/v1/self-service/requests/{requestId}/decision`.

Endpoint: POST self_service.request.submitted
Version: 1.2.0

## Header parameters:

  - `X-Webhook-Event` (string, required)
    Event type (same as `event` field in body).

  - `X-Webhook-Signature` (string, required)
    HMAC-SHA256 hex digest of the raw request body. Verifying is **recommended** — see the [Webhooks guide](../guides/webhooks.md#verifying-signatures).

  - `X-Webhook-Timestamp` (string, required)
    Unix timestamp of the event.

  - `X-Webhook-Signature-Previous` (string)
    Present during the 24-hour secret rotation grace period — signature with the previous secret.

## Request fields (application/json):

  - `event` (string, required)
    Event type identifier (same value as the `X-Webhook-Event` header).

  - `tenant_id` (string, required)
    Your organization ID.
    Example: 550e8400-e29b-41d4-a716-446655440000

  - `timestamp` (string, required)
    When the event occurred (RFC 3339 UTC).
    Example: 2026-05-16T10:00:00Z

  - `data` (object, required)

  - `data.request_id` (string, required)
    ID of the self-service request. Fetch the full snapshot (status, captured claims, extra fields, identification result, offer id, admin-claims schema) via `GET /b2b/v1/self-service/requests/{requestId}`.
    Example: 8a3b1f2e-9c4d-4e5a-b1c2-d3e4f5a6b7c8

