Create a new webhook
curl --request POST \
--url https://dev-public-api.openphone.dev/webhooks \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--header 'Quo-Api-Version: <quo-api-version>' \
--data '
{
"events": [
"call.answered",
"call.completed",
"message.received",
"contact.updated"
],
"url": "https://example.com/webhook",
"resourceIds": [
"PNabc123"
],
"status": "enabled",
"label": "my webhook"
}
'{
"data": {
"id": "123",
"orgId": "OR1223abc",
"label": "my webhook label",
"status": "enabled",
"url": "https://example.com/",
"createdAt": "2022-01-01T00:00:00Z",
"updatedAt": "2022-01-01T00:00:00Z",
"events": [
"call.answered",
"call.completed",
"message.received",
"contact.updated"
],
"resourceIds": [
"PNabc123"
],
"key": "whsec_exampleSecret",
"apiVersion": "2026-03-30"
}
}{
"message": "/url: Expected required property, /url: Expected string",
"docs": "https://quo.com/docs",
"title": "Bad Request",
"errors": [
{
"path": "/url",
"message": "Expected required property",
"schema": {
"type": "String"
}
},
{
"path": "/url",
"message": "Expected string",
"schema": {
"type": "String"
}
}
]
}{
"message": "You are unauthorized to access the webhook",
"docs": "https://quo.com/docs",
"title": "Unauthorized"
}{
"message": "You are forbidden to access the webhook",
"docs": "https://quo.com/docs",
"title": "Forbidden"
}{
"message": "An unknown error occurred",
"docs": "https://quo.com/docs",
"title": "Unknown Error"
}Webhooks
Create a new webhook
Creates a versioned webhook through the unified endpoint when using the API version header.
POST
/
webhooks
Create a new webhook
curl --request POST \
--url https://dev-public-api.openphone.dev/webhooks \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--header 'Quo-Api-Version: <quo-api-version>' \
--data '
{
"events": [
"call.answered",
"call.completed",
"message.received",
"contact.updated"
],
"url": "https://example.com/webhook",
"resourceIds": [
"PNabc123"
],
"status": "enabled",
"label": "my webhook"
}
'{
"data": {
"id": "123",
"orgId": "OR1223abc",
"label": "my webhook label",
"status": "enabled",
"url": "https://example.com/",
"createdAt": "2022-01-01T00:00:00Z",
"updatedAt": "2022-01-01T00:00:00Z",
"events": [
"call.answered",
"call.completed",
"message.received",
"contact.updated"
],
"resourceIds": [
"PNabc123"
],
"key": "whsec_exampleSecret",
"apiVersion": "2026-03-30"
}
}{
"message": "/url: Expected required property, /url: Expected string",
"docs": "https://quo.com/docs",
"title": "Bad Request",
"errors": [
{
"path": "/url",
"message": "Expected required property",
"schema": {
"type": "String"
}
},
{
"path": "/url",
"message": "Expected string",
"schema": {
"type": "String"
}
}
]
}{
"message": "You are unauthorized to access the webhook",
"docs": "https://quo.com/docs",
"title": "Unauthorized"
}{
"message": "You are forbidden to access the webhook",
"docs": "https://quo.com/docs",
"title": "Forbidden"
}{
"message": "An unknown error occurred",
"docs": "https://quo.com/docs",
"title": "Unknown Error"
}Authorizations
Headers
API version header. Supported values: 2026-03-30
Available options:
2026-03-30 Body
application/json
Events to subscribe to. Activity events (call., message.) and org-wide events (contact.*) can be mixed freely.
Minimum array length:
1Event type
Available options:
message.received, message.delivered, message.failed, message.undelivered, call.ringing, call.answered, call.completed, call.missed, call.forwarded, call.menu.selected, call.recording.completed, call.transcript.completed, call.summary.completed, call.voicemail.completed, contact.updated, contact.deleted, integration.created, integration.updated, integration.deleted, task.assigned, task.created, task.completed, task.updated, task.deleted, task.unassigned, task.reopened, task.duedate.removed, task.duedate.updated, task.overdue, task.linked, task.unlinked Example:
[
"call.answered",
"call.completed",
"message.received",
"contact.updated"
]
The endpoint that receives events from the webhook.
Example:
"https://example.com/webhook"
Phone number IDs to filter activity events, or ["*"] for all. Omitting this field defaults to ["*"]. Contact events are always org-wide regardless of this setting.
Minimum array length:
1Pattern:
^PN(.*)$Example:
["PNabc123"]
The status of the webhook.
Available options:
enabled, disabled Example:
"enabled"
The webhook's label.
Example:
"my webhook"
Response
Created
Show child attributes
Show child attributes
Was this page helpful?