Skip to main content
Caretta can send signed HTTPS webhooks when call data becomes available. Use webhooks to move transcripts, AI-generated meeting notes, and evaluated metrics into your own systems.

Quickstart

1

Add an endpoint

As an organisation administrator, open Settings → Webhooks → Add endpoint in Caretta and enter a public HTTPS URL.
2

Choose a delivery mode

Select individual events for the lowest latency, or choose a bundled call.ready event for one combined payload.
3

Save the signing secret

Copy the signing secret when Caretta shows it. It is displayed once. Store it in a secrets manager or encrypted environment variable.
4

Send a test

Select Send test for the endpoint. Caretta sends a webhook.test request.
5

Verify and acknowledge

Verify X-Caretta-Signature against the raw request body and return a 2xx response within 10 seconds.

Events

Eligible calls are real calls longer than 60 seconds that have not been deleted. Calls lasting 60 seconds or less, and deleted calls, do not produce delivery events.

Choose a delivery strategy

Per-event delivery

Select any combination of call.completed, call.notes_ready, and call.metrics_ready. This is the default and sends each component as soon as it is ready. Use call.completed when you need one reliable event for every eligible call. Use call.metrics_ready when you need the evaluation result for every eligible call, including calls that were skipped with a recorded reason.

Bundled delivery

Bundled mode sends one call.ready event after all selected components are ready. The transcript is always included; notes and metrics are optional.
Notes are best-effort. Roughly 3–4% of calls never generate notes, usually because the desktop app is closed before generation completes and is not reopened. In that case, call.notes_ready is not sent and a bundle that requires notes is never delivered. Notes may also arrive seconds or minutes after the transcript, and occasionally hours later.
If you must receive every eligible call:
  • Subscribe to call.completed using per-event delivery.
  • For a reliable single bundle, include metrics but do not require notes.
  • If you need a notes-and-metrics bundle, add a second per-event endpoint for call.completed as a safety net.
You can configure multiple endpoints and mix delivery modes.

Verify signatures

Every request includes these headers: Caretta signs this exact byte sequence:
with your endpoint secret as the HMAC-SHA256 key.
Verify the original raw request body. Parsing JSON and serialising it again can change whitespace or key order and will break signature verification.
verify-caretta-signature.js
Verify the signature before parsing or acting on the payload. Keep the endpoint secret server-side and rotate it if it may have been exposed.

Send an Authorization header

Some receivers cannot verify signatures and accept only a token in the Authorization header. For these receivers, enter the full header value in Authorization header when you add or edit the endpoint. For example:
Caretta stores the value encrypted and sends it unchanged as Authorization on every request, including test events. You cannot view the value after you save it. You can replace it or clear it. Requests are still signed, so you can verify the signature as well.
Use a token that your receiver issued. Do not use the Caretta signing secret as the Authorization header value.

Example: OpenClaw

OpenClaw hooks accept Authorization: Bearer <token>. In your OpenClaw config, enable hooks and add a mapping for Caretta. See OpenClaw inbound webhooks and hook configuration for all options.
Then, in Caretta, set the endpoint URL to https://<your-openclaw-host>/hooks/caretta and the Authorization header to Bearer <long-random-hook-token>. The URL must be public HTTPS. To make OpenClaw reachable over HTTPS, see the OpenClaw exposure runbook. If a tunnel or reverse proxy sits in front of OpenClaw, also set its trusted proxies in the OpenClaw gateway configuration. Otherwise OpenClaw rejects the request with 403. OpenClaw limits hook requests to 256 KiB. A small number of call.completed events with very long transcripts can exceed this limit. If you need notes only, subscribe to call.notes_ready.

Delivery behaviour

  • Return any 2xx response within 10 seconds.
  • Delivery is at least once. Deduplicate using X-Caretta-Event-Id.
  • Event ordering is not guaranteed. Correlate related events with data.call.id.
  • Failed requests are retried with backoff for approximately two hours.
  • Network retries reuse the event and delivery IDs.
A good handler verifies the signature, stores or queues the event, returns 2xx, and performs slower processing asynchronously.

Payloads

All events include event, schema_version, event_id, delivery_id, and occurred_at.
A completed evaluation can return an empty metrics array with a skip reason. Metrics can be re-evaluated; use evaluated_at to identify the latest result.

Internal calls

Every data.call object has an internal field: Use it to skip internal meetings, for example to keep team calls out of your CRM.
These examples show the payload structure and use illustrative values. Build consumers to tolerate additional fields so they remain compatible as Caretta adds data.

Manage an endpoint

Open Settings → Webhooks to:
  • enable or disable delivery;
  • change the URL, subscribed events, or delivery mode;
  • set, replace, or clear the Authorization header;
  • send a test event;
  • inspect the delivery log;
  • rotate the signing secret; or
  • delete the endpoint.
Rotating the secret invalidates the previous secret immediately. Update your receiver before sending another test.
Endpoint management through a public REST API is planned but is not currently available.