Webhooks
catentio.webhooks lists webhook gates — pipeline steps that are blocked waiting for an external system to call back into Catentio. It is a read surface.
This namespace is the inbound gate feature. Outbound webhooks — Catentio POSTing to a URL you register when a run or project finishes — DO exist, on the public API, and are not wrapped by this SDK. Call them directly: Webhooks (outbound).
Auth.
GET /v1/webhooksrequires the control plane'sx-catentio-sessionheader, which this SDK never sends. NeitherapiKeymode nor Bearer-session mode authenticates here. See SDKs → Auth: what actually works.
Namespace
catentio.webhooks.list() // works
catentio.webhooks.create() // endpoint not implemented — do not use
catentio.webhooks.delete() // endpoint not implemented — do not use
Only list() is usable. create() and delete() exist on the client but target POST /v1/webhooks and DELETE /v1/webhooks/{id} — routes the control plane does not implement. Calling them fails. They are a vestige of an outbound-webhook product that was never built.
webhooks.list
Signature. catentio.webhooks.list(token?)
Wraps GET /v1/webhooks. Returns { data, meta } — every subtask with kind = gate and gate_kind = webhook, waiting ones first, then recently resolved.
import { CatentioSaasClient } from '@forjio/catentio-saas-node';
const catentio = new CatentioSaasClient({ apiKey: process.env.CATENTIO_API_KEY! });
const { data, meta } = await catentio.webhooks.list();
for (const gate of data) {
console.log(
gate.subtask_id,
gate.project_title,
`${gate.phase_slug}/${gate.step_slug}`,
gate.status, // 'blocked' while waiting on the callback
);
}
console.log('by status:', meta.by_status);
Each row carries subtask_id, project_id, project_title, workflow_slug, phase_slug, step_slug, task_id, status, gate_config, consumes_artifacts, consumes_subtasks, created_at, started_at, completed_at. Field-by-field notes are in the API reference.
The underlying endpoint accepts status and limit query params; the SDK method takes neither today — filter client-side, or call the REST endpoint directly.
Find what's currently waiting
const { data } = await catentio.webhooks.list();
const waiting = data.filter((g) => g.status === 'blocked');
for (const g of waiting) {
console.warn(`${g.project_title} is blocked at ${g.step_slug} since ${g.started_at}`);
}
Resolving a gate
Not an SDK operation. A webhook gate is resolved by the runtime's pipeline_resolve_webhook_gate tool, which is SENSITIVE and agent-invoked — see API → Webhooks.
Next
- API → Webhooks — the wire-level reference.
- Gates & approvals — all four gate kinds.
- Events — the queryable event archive.