Register a custom_webhook tool target
const url = 'https://api.vocapable.com/v1/webhook-targets';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"webhook_id":"example","description":"example","parameters":{},"side_effect":"read_only","url":"example","timeout_seconds":5,"max_invocations_per_call":3}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.vocapable.com/v1/webhook-targets \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "webhook_id": "example", "description": "example", "parameters": {}, "side_effect": "read_only", "url": "example", "timeout_seconds": 5, "max_invocations_per_call": 3 }'Register one target, minting its signing secret - the only time it is readable.
Everything bind time would refuse is refused here, where it costs one API request instead of one tool on a live call: a reserved name, a schema the runtime’s validator cannot enforce, one over the prompt budget, and a URL outside the delivery policy.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”POST /webhook-targets - one spoken-name integration a live call may invoke.
The field bounds are the prompt-budget bounds from vocapable_contracts.toolschema:
the id lands in a schema enum the model reads and the description in the catalog it
re-reads every turn, so what this model refuses is exactly what bind time would.
object
object
Whether an invocation only reads, or changes state something else can observe.
Two values by design: anything that is not a lookup gets an idempotency key. That is
why end_call - runtime-local, but a state change - is MUTATING.
Responses
Section titled “Responses”Successful Response
A summary plus the plaintext secret, when the answering call minted one.
object
object
Examplegenerated
{ "id": "example", "webhook_id": "example", "description": "example", "parameters": {}, "side_effect": "example", "timeout_seconds": 1, "max_invocations_per_call": 1, "url": "example", "status": "example", "previous_secret_expires_at": "2026-04-15T12:00:00Z", "created_at": "2026-04-15T12:00:00Z", "updated_at": "2026-04-15T12:00:00Z", "secret": "example"}Validation Error
object
object
object
Examplegenerated
{ "detail": [ { "loc": [ "example" ], "msg": "example", "type": "example", "input": "example", "ctx": {} } ]}