Blog · API

Webhook contract for transcript → actions

One JSON shape in, structured action items out (and optional Notion/Linear side effects). Keep the contract small so any form, bot, or Zap can call it.

Request (POST)

Minimal body your n8n Webhook node can normalize:

{
  "transcript": "Full meeting text...",
  "meeting_title": "Weekly ops sync",
  "destination": "notion",
  "meeting_date": "2026-09-15"
}
  • transcript (required) — plain text; you own transcription upstream
  • meeting_title — echoed onto tickets for context
  • destinationnotion | linear | both
  • meeting_date — optional ISO date for relative-date resolution (see null-dates post)

Extracted item shape

{
  "title": string,
  "owner": string | null,
  "due_date": "YYYY-MM-DD" | null,
  "priority": "high" | "medium" | "low" | null,
  "notes": string | null
}
Owner is a name string from speech, not a Notion person or Linear user id in v1. Due date is null when the model can’t emit a real calendar day.

Response sketch

After LLM parse + destination writes, return something humans and machines can both read:

{
  "ok": true,
  "meeting_title": "Weekly ops sync",
  "items": [ /* extracted items */ ],
  "created": {
    "notion_pages": 3,
    "linear_issues": 0
  }
}

On LLM/JSON failure, fail closed: ok: false, no partial tickets if you can help it — better a retry than half a board of junk.

Auth & ops notes

  • Protect the webhook (n8n header auth, IP allowlist, or a shared secret query param you rotate).
  • Keep LLM, Notion, and Linear credentials in n8n — never in the caller.
  • Log meeting_title + item count; avoid logging full transcripts in shared channels if they’re sensitive.

Why a pack instead of a one-off Zap

The hard part isn’t “call an LLM.” It’s a stable schema, destination branching, and prompts that refuse invented dates. Once the contract is fixed, every upstream (Fireflies export, Otter paste, custom bot) can reuse the same webhook.

Import the workflow

OpsPacket Meeting → Action Items ships the n8n graph + SETUP for this contract. $97 one-time.

Checkout on Gumroad

← Null due dates pattern · All posts