Developer platform · v2

API reference

View as MarkdownAll docs

Webhooks API

10 operations · all resources

What this covers#

Signed, retried event delivery per project. The signing secret is returned once at creation; deliveries that exhaust their retries are readable as dead letters.

Every example below runs as written once these are exported:

bash
export DVAARIK_API_KEY="dvk_..."        # project API key, server side only
export DVAARIK_TOKEN="<account access token>"   # console session, from POST /console/auth/login
export ENDPOINT_ID="<uuid>"
export PROJECT_ID="<uuid>"

A <value> inside a JSON body is a value you supply. Responses are JSON; every error body is { "detail": … }. Each schema is expanded once per page, where it first appears.

Machine door errors#

Raised by the project-key dependency before any handler on this page runs.

StatusCause
401Missing API key or Invalid API key — the X-Api-Key header is absent, unknown, or revoked.
403API key is not scoped to a project, Project unavailable, or API key is missing the required scope '<scope>'.
429The project's api_rpm ceiling was exceeded. Honour Retry-After; X-RateLimit-* headers are on every response.

Scopes used on this page: webhook:read, webhook:write. Mint a key with only these.

Account door errors#

StatusCause
401No account session was presented, or it is invalid or expired. Refresh once, then re-authenticate.
403The account is suspended or its email is not verified.

Operations — project API key#

Call these from your own server with a project key. Never from a browser or a mobile bundle.

GET /v2/projects/{project_id}/webhooks#

List the project's endpoints. include_disabled=true also returns disabled ones.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopewebhook:read
OperationlistWebhookEndpoints
Success200 WebhookEndpointInfo[]
ParameterInTypeRequiredNotes
project_idpathuuidyes
include_disabledquerybooleanno

WebhookEndpointInfo#

FieldTypeRequiredNotes
created_atdate-timeyes
event_typesstring[]yes
iduuidyes
namestringyes
project_iduuidyes
revisionintegeryes
secret_hintstringyes
statusstringyes
updated_atdate-timeyes
urlstringyes
ErrorWhen
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/v2/projects/$PROJECT_ID/webhooks" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

POST /v2/projects/{project_id}/webhooks#

Register a public HTTPS endpoint. The 201 carries the signing secret once; no route returns it again.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopewebhook:write
OperationcreateWebhookEndpoint
Success201 CreatedWebhookEndpoint
ParameterInTypeRequiredNotes
project_idpathuuidyes

Request body: CreateWebhookEndpointRequest.

CreateWebhookEndpointRequest#

FieldTypeRequiredNotes
event_typesstring[]nomax 50 item(s)
namestringyesmin length 1; max length 120
urlstringyesmin length 8; max length 2048

CreatedWebhookEndpoint#

The 201, and the ONLY response that ever contains the secret.

FieldTypeRequiredNotes
created_atdate-timeyes
event_typesstring[]yes
iduuidyes
namestringyes
project_iduuidyes
revisionintegeryes
secret_hintstringyes
signing_secretstringyes
statusstringyes
updated_atdate-timeyes
urlstringyes
ErrorWhen
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/v2/projects/$PROJECT_ID/webhooks" \
  -H "X-Api-Key: $DVAARIK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "primary",
    "url": "https://example.com/hooks/dvaarik",
    "event_types": [
      "call.completed",
      "call.failed"
    ]
  }'

DELETE /v2/projects/{project_id}/webhooks/{endpoint_id}#

Disable the endpoint, bump its revision and cancel queued deliveries.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopewebhook:write
OperationdisableWebhookEndpoint
Success200 WebhookEndpointInfo
ParameterInTypeRequiredNotes
project_idpathuuidyes
endpoint_idpathuuidyes
ErrorWhen
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X DELETE "https://api.developers.dvaarik.com/v2/projects/$PROJECT_ID/webhooks/$ENDPOINT_ID" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

POST /v2/projects/{project_id}/webhooks/{endpoint_id}/test#

Queue a signed webhook.ping. The 202 means the delivery was recorded, not that it arrived.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopewebhook:write
OperationtestWebhookEndpoint
Success202 WebhookTestResult
ParameterInTypeRequiredNotes
project_idpathuuidyes
endpoint_idpathuuidyes

WebhookTestResult#

What a test ping queued, not what a receiver said. queued is False when an identical ping is already waiting: the dedupe key is the endpoint plus its revision plus the minute, so leaning on the button does not turn into a burst against the developer's own server. The delivery id is returned either way so the caller can find it in the dead letters.

FieldTypeRequiredNotes
delivery_iduuidyes
endpoint_iduuidyes
event_typestringyes
queuedbooleanyes
ErrorWhen
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/v2/projects/$PROJECT_ID/webhooks/$ENDPOINT_ID/test" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

GET /v2/projects/{project_id}/webhooks/dead-letters#

List deliveries that exhausted their retries, with attempt counts and the last error.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopewebhook:read
OperationlistWebhookDeadLetters
Success200 DeadLetterInfo[]
ParameterInTypeRequiredNotes
project_idpathuuidyes
limitqueryintegerno

DeadLetterInfo#

FieldTypeRequiredNotes
attemptsintegeryes
created_atdate-timeyes
endpoint_iduuid or nullno
event_typestring or nullno
iduuidyes
kindstringyes
last_errorstring or nullno
max_attemptsintegeryes
updated_atdate-timeyes
ErrorWhen
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/v2/projects/$PROJECT_ID/webhooks/dead-letters?limit=20" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

Operations — account session#

The same resource through the console door. These are what the web console calls; both doors return the same shapes.

GET /console/v2/projects/{project_id}/webhooks#

List the project's endpoints. include_disabled=true also returns disabled ones.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleListWebhookEndpoints
Success200 WebhookEndpointInfo[]
ParameterInTypeRequiredNotes
project_idpathuuidyes
include_disabledquerybooleanno
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/webhooks" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

POST /console/v2/projects/{project_id}/webhooks#

Register a public HTTPS endpoint. The 201 carries the signing secret once; no route returns it again.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleCreateWebhookEndpoint
Success201 CreatedWebhookEndpoint
ParameterInTypeRequiredNotes
project_idpathuuidyes

Request body: CreateWebhookEndpointRequest.

ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
503Webhook secret storage (the credential keyring) is unavailable.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/webhooks" \
  -H "Authorization: Bearer $DVAARIK_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "primary",
    "url": "https://example.com/hooks/dvaarik",
    "event_types": [
      "call.completed",
      "call.failed"
    ]
  }'

DELETE /console/v2/projects/{project_id}/webhooks/{endpoint_id}#

Disable the endpoint, bump its revision and cancel queued deliveries.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleDisableWebhookEndpoint
Success200 WebhookEndpointInfo
ParameterInTypeRequiredNotes
endpoint_idpathuuidyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X DELETE "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/webhooks/$ENDPOINT_ID" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

POST /console/v2/projects/{project_id}/webhooks/{endpoint_id}/test#

Queue a signed webhook.ping. The 202 means the delivery was recorded, not that it arrived.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleTestWebhookEndpoint
Success202 WebhookTestResult
ParameterInTypeRequiredNotes
endpoint_idpathuuidyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/webhooks/$ENDPOINT_ID/test" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

GET /console/v2/projects/{project_id}/webhooks/dead-letters#

List deliveries that exhausted their retries, with attempt counts and the last error.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleListWebhookDeadLetters
Success200 DeadLetterInfo[]
ParameterInTypeRequiredNotes
project_idpathuuidyes
limitqueryintegerno
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/webhooks/dead-letters?limit=20" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

Try it without a key in the browser

The playground opens a real voice session with your account session, so a project key never reaches a browser. Machine calls belong on your own server.