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/webhooks requires the control plane's x-catentio-session header, which this SDK never sends. Neither apiKey mode 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