Skip to main content
This guide walks through creating a campaign, adding topics and contacts, and launching it programmatically. Use it as a template.

Prerequisites

  • A full access workspace API key (read + write) — launching sends real invitations. See Authentication.
  • Your workspace ID (API keys are workspace-scoped; the ID is shown alongside the key in Developer → API Keys).
  • A list of contacts (name + email at minimum).

How launching works

Creating a campaign is three calls: create the campaign shell, add topics as question sets, add contacts. POST /start then validates everything and sends the invitations on the campaign’s channel — in_app_chat (email with a personal interview link), slack (Slack DM), or teams (Microsoft Teams chat). Participants self-schedule. Two scheduling knobs worth knowing:
  • Scheduled send — pass start_immediately: false with a future timeframe_start and the invitations are held until the campaign opens (date-only starts send at 08:00 in the campaign’s timezone). The detail endpoint reports the exact instant as invitations_scheduled_for.
  • Soft deadlinetimeframe_end is communicated to participants as the response deadline but never blocks late responses.

End-to-end script

Knowing when it’s done

Don’t poll. Subscribe to the synthesis.completed webhook — it fires once the synthesis pipeline finishes, and the report is queryable immediately after.
If you can’t run a webhook receiver, fall back to polling GET /v1/interviews/{id} every minute and watching the status field — but webhooks are strongly preferred.

Common follow-ups