Webhooks
Endpoints that receive notifications of an organization's events
The webhook object
Attributes
iduuidUnique identifier
grant_iduuid | nullIdentifier of the OAuth grant that created the webhook. Revoking the grant, or its access to the organization, disables the webhook
created_attimestamp with time zoneCreation timestamp
updated_attimestamp with time zoneLast modification timestamp
descriptiontextDescription of the webhook, if any
disabled_attimestamp with time zone | nullWhen the webhook was disabled, because its endpoint kept failing or the OAuth grant that created it lost access. A disabled webhook gets no notifications; set this to null to enable it again
endpointtextURL notifications are sent to
eventsArray<WebhookEvent>Events to which the webhook is subscribed
signing_secretread-onlytextSecret used to sign each notification sent to the webhook. Verify notifications with the Standard Webhooks headers (webhook-id, webhook-timestamp, webhook-signature: HMAC-SHA256 with this secret as key). The X-Signature header (MD5) is deprecated and will be removed in the future
sourcetextWhere the webhook was registered: the admin, the API or an external tool such as Zapier
Related resources
Embed related resources in the response with the select parameter, for example select=*,organizations(*). See selecting data. Resources related through more than one column need the column as a hint, like table!column(*).
webhook_notifications(*)arrayThe webhook notifications referencing this webhook through webhook_notifications.webhook_id.
{
"id": "00000000-0000-0000-0000-000000000000",
"grant_id": "00000000-0000-0000-0000-000000000000",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-01-01T12:00:00+00:00",
"updated_at": "2026-01-01T12:00:00+00:00",
"description": "",
"disabled_at": null,
"endpoint": "",
"events": [
"candidates.created",
"members.updated"
],
"signing_secret": "",
"source": ""
}curl "https://api.cv-transformer.com/v1/webhooks?limit=10&select=*,organizations(*),webhook_notifications(*)" \
-H "Authorization: Bearer YOUR_API_KEY"List webhooks
Requireswebhooks:read
Filters
idFilter<uuid>Unique identifier
grant_idFilter<uuid | null>Identifier of the OAuth grant that created the webhook. Revoking the grant, or its access to the organization, disables the webhook
created_atFilter<timestamp with time zone>Creation timestamp
updated_atFilter<timestamp with time zone>Last modification timestamp
descriptionFilter<text>Description of the webhook, if any
disabled_atFilter<timestamp with time zone | null>When the webhook was disabled, because its endpoint kept failing or the OAuth grant that created it lost access. A disabled webhook gets no notifications; set this to null to enable it again
endpointFilter<text>URL notifications are sent to
eventsFilter<Array<WebhookEvent>>Events to which the webhook is subscribed
signing_secretFilter<text>Secret used to sign each notification sent to the webhook. Verify notifications with the Standard Webhooks headers (webhook-id, webhook-timestamp, webhook-signature: HMAC-SHA256 with this secret as key). The X-Signature header (MD5) is deprecated and will be removed in the future
sourceFilter<text>Where the webhook was registered: the admin, the API or an external tool such as Zapier
Responses
200A list of webhooks with the selected columns. The Content-Range header holds the range returned and the total count, like 0-9/42.
206Partial Content
400The request is malformed, for example an unknown column or an invalid filter.
401The API key is missing or invalid.
403The API key doesn't have the scope this request needs.
429The API key made more requests per minute than its rate limit allows. Retry after the number of seconds in the Retry-After header.
message, details and hint, and for database errors a code. See errors.curl "https://api.cv-transformer.com/v1/webhooks?limit=10&select=*" \
-H "Authorization: Bearer YOUR_API_KEY"[
{
"id": "00000000-0000-0000-0000-000000000000",
"grant_id": "00000000-0000-0000-0000-000000000000",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-01-01T12:00:00+00:00",
"updated_at": "2026-01-01T12:00:00+00:00",
"description": "",
"disabled_at": null,
"endpoint": "",
"events": [
"candidates.created",
"members.updated"
],
"signing_secret": "",
"source": ""
}
]Create webhooks
Requireswebhooks:write
Body
Partial<Webhook> | Array<Partial<Webhook>>The attributes are listed under the webhook object. Read-only attributes are set by CV-Transformer and can't be written.
Responses
201Created. With the header Prefer: return=representation, the body holds the created webhooks with the selected columns.
400The request is malformed, for example an unknown column, an invalid filter or an invalid body.
401The API key is missing or invalid.
403The API key doesn't have the scope this request needs, or no permission for this change, for example when writing rows of another organization.
409The change conflicts with existing data, for example a duplicate key or a reference to a row that does not exist.
429The API key made more requests per minute than its rate limit allows. Retry after the number of seconds in the Retry-After header.
message, details and hint, and for database errors a code. See errors.curl "https://api.cv-transformer.com/v1/webhooks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"organization_id": "00000000-0000-0000-0000-000000000000",
"description": "",
"endpoint": "",
"events": ["candidates.created", "members.updated"],
"source": ""
}'(no content)Delete webhooks
Requireswebhooks:write
Filters
Without filters, this request deletes all webhooks the API key has access to. Always filter on at least one column, like id=eq.{id}.
idFilter<uuid>Unique identifier
grant_idFilter<uuid | null>Identifier of the OAuth grant that created the webhook. Revoking the grant, or its access to the organization, disables the webhook
created_atFilter<timestamp with time zone>Creation timestamp
updated_atFilter<timestamp with time zone>Last modification timestamp
descriptionFilter<text>Description of the webhook, if any
disabled_atFilter<timestamp with time zone | null>When the webhook was disabled, because its endpoint kept failing or the OAuth grant that created it lost access. A disabled webhook gets no notifications; set this to null to enable it again
endpointFilter<text>URL notifications are sent to
eventsFilter<Array<WebhookEvent>>Events to which the webhook is subscribed
signing_secretFilter<text>Secret used to sign each notification sent to the webhook. Verify notifications with the Standard Webhooks headers (webhook-id, webhook-timestamp, webhook-signature: HMAC-SHA256 with this secret as key). The X-Signature header (MD5) is deprecated and will be removed in the future
sourceFilter<text>Where the webhook was registered: the admin, the API or an external tool such as Zapier
Responses
204Deleted. With the header Prefer: return=representation, the response is a 200 whose body holds the deleted webhooks with the selected columns.
400The request is malformed, for example an unknown column or an invalid filter.
401The API key is missing or invalid.
403The API key doesn't have the scope this request needs, or no permission for this change, for example when writing rows of another organization.
429The API key made more requests per minute than its rate limit allows. Retry after the number of seconds in the Retry-After header.
message, details and hint, and for database errors a code. See errors.curl -X DELETE "https://api.cv-transformer.com/v1/webhooks?id=eq.00000000-0000-0000-0000-000000000000" \
-H "Authorization: Bearer YOUR_API_KEY"(no content)Update webhooks
Requireswebhooks:write
Filters
Without filters, this request updates all webhooks the API key has access to. Always filter on at least one column, like id=eq.{id}.
idFilter<uuid>Unique identifier
grant_idFilter<uuid | null>Identifier of the OAuth grant that created the webhook. Revoking the grant, or its access to the organization, disables the webhook
created_atFilter<timestamp with time zone>Creation timestamp
updated_atFilter<timestamp with time zone>Last modification timestamp
descriptionFilter<text>Description of the webhook, if any
disabled_atFilter<timestamp with time zone | null>When the webhook was disabled, because its endpoint kept failing or the OAuth grant that created it lost access. A disabled webhook gets no notifications; set this to null to enable it again
endpointFilter<text>URL notifications are sent to
eventsFilter<Array<WebhookEvent>>Events to which the webhook is subscribed
signing_secretFilter<text>Secret used to sign each notification sent to the webhook. Verify notifications with the Standard Webhooks headers (webhook-id, webhook-timestamp, webhook-signature: HMAC-SHA256 with this secret as key). The X-Signature header (MD5) is deprecated and will be removed in the future
sourceFilter<text>Where the webhook was registered: the admin, the API or an external tool such as Zapier
Body
Partial<Webhook>The attributes are listed under the webhook object. Read-only attributes are set by CV-Transformer and can't be written.
Responses
204Updated. With the header Prefer: return=representation, the response is a 200 whose body holds the updated webhooks with the selected columns.
400The request is malformed, for example an unknown column, an invalid filter or an invalid body.
401The API key is missing or invalid.
403The API key doesn't have the scope this request needs, or no permission for this change, for example when writing rows of another organization.
409The change conflicts with existing data, for example a duplicate key or a reference to a row that does not exist.
429The API key made more requests per minute than its rate limit allows. Retry after the number of seconds in the Retry-After header.
message, details and hint, and for database errors a code. See errors.curl -X PATCH "https://api.cv-transformer.com/v1/webhooks?id=eq.00000000-0000-0000-0000-000000000000" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "description": "" }'(no content)