/api/v1/webhooks. See Authentication for how to generate an API token.
How webhooks work
When a subscribed event occurs in VISO TRUST (for example, an assessment completes), VISO TRUST sends an HTTP POST request to the URL you registered. The request body is a JSON payload describing the event. Your endpoint receives the payload and can use it to trigger downstream actions, such as creating records, sending alerts, or syncing data.Managing webhooks
You create and manage webhooks through the API. Every endpoint requires a token from an Admin or Program Manager account.
Your endpoint should accept HTTP POST requests, return a
2xx response to acknowledge receipt, and be publicly reachable from VISO TRUST’s servers.
Registering a webhook
POST /api/v1/webhooks takes a JSON body with these fields:
PUT /api/v1/webhooks replaces the whole configuration, so send every field you want to keep (including eventTypes) alongside the id.
Deleting a webhook is safe to retry. DELETE /api/v1/webhooks/{webhookId} returns 200 when the webhook is removed and 404 when the ID is unknown or the webhook was already deleted. For example:
Event types
Subscribe a webhook to one or more of the following trigger types. Events are grouped into assessment and relationship categories.Assessment events
Relationship events
Payload structure
Every webhook delivery uses the same flat JSON payload. Themessage field carries the event name; relationshipId and assessmentId reference the affected records (assessmentId may be omitted for relationship-only events).
GET /api/v1/relationships/{relationshipId}).
Trigger types vs. delivered event names
For most triggers themessage value matches the trigger type you subscribed to. Two do not. Subscribe by the trigger type, but match on the delivered value:
For the same reason, the
eventTypes array returned by GET /api/v1/webhooks lists the underlying event names rather than the trigger types you posted. A webhook subscribed to ASSESSMENT_CANCELLED reads back as four entries: ASSESSMENT_CANCELLED, ASSESSMENT_CANCELLED_BY_VENDOR, ASSESSMENT_CANCELLED_BY_CLIENT, and ASSESSMENT_CANCELLED_BY_ADMIN. That one trigger covers every cancellation path except auditor and automatic cancellation, which have their own triggers. Deliveries for all four still arrive with message set to ASSESSMENT_CANCELLED.
Delivery behavior
VISO TRUST sends deliveries asynchronously as an HTTP POST withContent-Type: application/json. Your endpoint should respond quickly with a 2xx status.
Webhook payloads are not currently signed. Because there is no signature header to verify, protect your endpoint another way. Use a long, unguessable URL, restrict inbound traffic to VISO TRUST, and treat the payload IDs as references to be confirmed against the API rather than as trusted data.
Failure handling
VISO TRUST tracks consecutive delivery failures per webhook. A failure is any non-2xx HTTP response or a connection error. A successful delivery, or saving the webhook (PUT /api/v1/webhooks), resets the failure count to zero and clears any warning state.
Behavior at the third consecutive failure depends on the webhook type:
VISO TRUST does not replay missed events. Once a failing webhook recovers, it only receives events that fire after recovery.
Monitoring delivery health
GET /api/v1/webhooks and GET /api/v1/webhooks/{webhookId} return two fields you can poll to detect failing deliveries:
Example response:
Example: edit the AI summary when it’s generated
Subscribe toASSESSMENT_GENERATED_SUMMARY_CREATED to rewrite the AI assessment summary automatically. For example, you can pass it through your own template or language model. The summary endpoints require a token from an Admin account.
1
Read the summary
When the webhook fires, fetch the summary with the
assessmentId from the payload. Pass format=markdown to get plain Markdown instead of HTML.version identifies this revision of the summary. edited is true when someone has changed the generated summary.2
Write the edited summary
Send the edited text to The response returns the updated summary in the format you sent, with a new
PUT /api/v1/assessments/{id}/summary. Include the version you read so VISO TRUST rejects the edit if the summary changed in the meantime.version.
The edit works the same as editing the summary in the app. VISO TRUST keeps the generated summary, shows your edit in its place, and records it in the summary’s edit history. Regenerating the summary discards the edit. This happens automatically when a new assessment completes.
VISO TRUST returns
400 Bad Request in these cases:
- The assessment is not completed.
- The assessment has no AI-generated summary.
- The summary is empty after VISO TRUST removes unsupported markup.
data: URIs.