Quickstart
- Sign up at /signup and create an organization.
- Create an outcome from the Respond to every qualified lead template. Its success event is
customer.reply_received.
- Create a workflow from the Webhook → HTTP request template, point the HTTP step at your API, link it to the outcome, and Publish.
- Copy the webhook URL and reveal the signing secret on the workflow page, then send a signed request (below).
- Open Executions to watch the run step by step. Failed steps show the error class and whether replay is safe.
- Report the real result:
POST /api/v1/outcomes/<id>/events with an API key, or the outcome's signed ingest webhook. The outcome's progress updates from verified events only.
Send a signed webhook
import crypto from "node:crypto";
const body = JSON.stringify({ lead_id: "lead_123", qualified: true, event_id: "evt_1" });
const t = Math.floor(Date.now() / 1000);
const v1 = crypto.createHmac("sha256", process.env.WEBHOOK_SECRET).update(`${t}.${body}`).digest("hex");
await fetch(WEBHOOK_URL, { method: "POST", body, headers: {
"Content-Type": "application/json",
"X-OutcomeOS-Signature": `t=${t},v1=${v1}`,
}});
Report an outcome event
curl -X POST "https://outcomeos.cloud/api/v1/outcomes/<outcome_id>/events" \
-H "Authorization: Bearer $OUTCOMEOS_API_KEY" -H "Content-Type: application/json" \
-d '{"event_type":"customer.reply_received","subject_id":"lead_123","idempotency_key":"msg_abc"}'