API reference
Add a webhook endpoint
Add an HTTPS endpoint that receives search and shortlist events as signed POSTs, so results reach your systems without an agent running. Returns the signing secret once. Up to 10 endpoints a workspace. events defaults to every event ([”*”]). The URL must be public HTTPS; private, loopback and link-local addresses are refused, and redirects are never followed. Store secret now: it is not shown again. Does not use credits.
Needs scope webhooks:write.
POST
/
webhooks
Add a webhook endpoint
curl --request POST \
--url https://api.revcenter.ai/v1/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://hooks.example.com/revcenter",
"events": [
"search.completed",
"shortlist.changed"
],
"description": "ATS sync"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://hooks.example.com/revcenter',
events: ['search.completed', 'shortlist.changed'],
description: 'ATS sync'
})
};
fetch('https://api.revcenter.ai/v1/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.revcenter.ai/v1/webhooks"
payload = {
"url": "https://hooks.example.com/revcenter",
"events": ["search.completed", "shortlist.changed"],
"description": "ATS sync"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"data": {
"id": "5e4d3c2b-1a09-4f8e-9d7c-6b5a4f3e2d1c",
"url": "https://hooks.example.com/revcenter",
"description": "ATS sync",
"events": [
"search.completed",
"shortlist.changed"
],
"enabled": true,
"disabled_reason": null,
"consecutive_failures": 0,
"secret_hint": "whsec_…Qz1c",
"created_at": "2026-10-19T09:12:00.000Z",
"updated_at": "2026-10-19T09:12:00.000Z",
"secret": "whsec_3q2-7wE1Vb0N8c5k2Lr9xY4mT6pA1sD0fG7hJ3kQz1c"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}Authorizations
An API key from Settings → Usage → API (rvc_live_…).
Body
application/json
⌘I
Add a webhook endpoint
curl --request POST \
--url https://api.revcenter.ai/v1/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://hooks.example.com/revcenter",
"events": [
"search.completed",
"shortlist.changed"
],
"description": "ATS sync"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://hooks.example.com/revcenter',
events: ['search.completed', 'shortlist.changed'],
description: 'ATS sync'
})
};
fetch('https://api.revcenter.ai/v1/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.revcenter.ai/v1/webhooks"
payload = {
"url": "https://hooks.example.com/revcenter",
"events": ["search.completed", "shortlist.changed"],
"description": "ATS sync"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"data": {
"id": "5e4d3c2b-1a09-4f8e-9d7c-6b5a4f3e2d1c",
"url": "https://hooks.example.com/revcenter",
"description": "ATS sync",
"events": [
"search.completed",
"shortlist.changed"
],
"enabled": true,
"disabled_reason": null,
"consecutive_failures": 0,
"secret_hint": "whsec_…Qz1c",
"created_at": "2026-10-19T09:12:00.000Z",
"updated_at": "2026-10-19T09:12:00.000Z",
"secret": "whsec_3q2-7wE1Vb0N8c5k2Lr9xY4mT6pA1sD0fG7hJ3kQz1c"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}{
"error": {
"code": "search_not_found",
"message": "No search with that id in this workspace.",
"details": null,
"request_id": "req_01JABCDEF"
},
"meta": {
"request_id": "req_01JABCDEF"
}
}