Skip to main content
A campaign packages everything Ontora needs to run a research project end-to-end:
  • A goal describing what you’re trying to learn.
  • A channel for the invitations — email with a personal interview link (in_app_chat), Slack DM (slack), or Microsoft Teams chat (teams).
  • A question set organized as topics and sub-topics, with goals, priorities, and typed questions — open-ended plus structured components (single/multiple choice, Likert, ranking, matrix, sliders).
  • A list of contacts to interview.
  • A schedule — send invitations at launch, or hold them for a start date; plus a soft response deadline.
  • A language (default_language) that fixes the participant-facing copy, interview UI, conversation, and voice.
  • A synthesis target that defines the final report shape.

Lifecycle

Launching and scheduling

POST /v1/interviews/{id}/start validates the campaign (goal, at least one contact, at least one question, channel prerequisites), marks it active, and sends the invitations on the campaign’s channel. Participants self-schedule via their personal link — there is no calendar coordination.
  • Send now (default): invitations go out at launch.
  • Scheduled send: with start_immediately: false and a future timeframe_start, invitations are held and sent automatically when the campaign opens. Date-only start values resolve to 08:00 in the campaign’s timezone, so participants get invited in their morning, not at midnight UTC. The detail endpoint exposes the exact instant as invitations_scheduled_for.
  • Soft deadline: timeframe_end is shown to participants as the response deadline (in invitations and reminders) but never blocks late responses.
Contacts added to an active campaign are invited immediately — or held with everyone else when the send is still scheduled.

Topics and questions

Each topic carries a goal, a priority (required / important / optional), and a free-text success_threshold describing when the topic counts as sufficiently covered. Sub-topics and explicit questions narrow the agent’s focus without scripting it. Questions have a question_type: open_ended (default), single_choice, multiple_choice, likert_scale, statement, and the interactive components ranking, matrix, and range_slider (configured via component_config, answered through structured UI in the session, and aggregated deterministically). The interview agent is not a fixed script. It uses topics as a coverage target and improvises follow-ups based on what each respondent says.

Contacts

A contact is the person being interviewed. Minimum required fields are name and email (Slack campaigns accept slack_user_id instead); richer metadata (department, job title, seniority) feeds into persona synthesis. You can add contacts:
  • One at a time via POST /v1/interviews/{id}/contacts
  • In bulk via JSON (POST /v1/interviews/{id}/contacts/bulk)
  • In bulk via CSV upload (POST /v1/interviews/{id}/contacts/import)

What you get back

Once the campaign reaches completed, four synthesis outputs become available:
  • Cartography — a map of processes, categorized and connected. See Synthesis.
  • Roadmap — proposed solutions grouped by horizon (now / next / later).
  • Personas — per-contact and per-department behavioral profiles.
  • Conversations — individual transcripts with summaries and citations.
All four are addressable individually and exportable as Markdown or ZIP.