Quickstart

  1. Sign up at /signup and create an organization.
  2. Create an outcome from the Respond to every qualified lead template. Its success event is customer.reply_received.
  3. Create a workflow from the Webhook → HTTP request template, point the HTTP step at your API, link it to the outcome, and Publish.
  4. Copy the webhook URL and reveal the signing secret on the workflow page, then send a signed request (below).
  5. Open Executions to watch the run step by step. Failed steps show the error class and whether replay is safe.
  6. 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"}'