Back to docs
API Reference

Microsoft Teams + Koji: Post AI Interview Insights Into the Channel Where Decisions Get Made

How to pipe completed Koji AI interviews into Microsoft Teams using the Workflows webhook that replaced the retired Office 365 connector, with the exact payload fields available.

The 60-second answer

Koji has no native Microsoft Teams app and emits no outbound webhooks or events, so nothing inside Koji posts to Teams on its own. Two routes work today. The fastest takes a minute: publish the study report and paste its link into a channel. That page stays live, updates as interviews land, and opens without a Koji account. The automated route: create a Teams Workflows webhook, then have your own backend, or Zapier, Make or n8n, poll the Koji read endpoint and post a card when an interview comes back completed with its analysis attached.

One timing note matters more than anything else on this page. The Office 365 connector webhooks that most integration tutorials still tell you to use no longer exist. Microsoft disabled them on a rollout that began 18 May 2026 and completed 22 May 2026, and its instruction was that all connector-based webhooks must be migrated to Power Automate-based workflows before that rollout started. If a guide tells you to open a channel and click Connectors, that guide is describing a dead feature. Everything below uses the Workflows path.

Why route research into Teams at all

Microsoft disclosed 320 million monthly active users for Teams in its FY24 Q1 results in October 2023. For a large share of enterprises that makes Teams the default surface where work is noticed - which is exactly the problem research has. A finding that lives in a research tool competes for attention with nothing, because nobody opens the research tool on a Tuesday afternoon.

Piping interviews into a channel changes three things:

  • Latency. A quote reaches the people who can act on it minutes after the participant says it, not at the end of a study.
  • Reach. Engineers, designers, support and executives read the same unedited sentence, rather than three different summaries of it.
  • Memory. A channel is searchable. Did anyone ever complain about the import step? becomes a question you can answer.

What you can detect today

Koji emits no events, so your poller decides what counts as news. Everything below is visible on the read endpoint:

  • status is completed - the interview finished, and the transcript and structured answers are ready.
  • analysis is populated - the summary, theme tags and quality score are attached.
  • The quality score is 3 or above. That is the same threshold Koji bills at, so it is a sensible bar for worth a ping.
  • A report exists for the study, so you can deep-link to it from the card.

What Koji does not push

Be honest with yourself about this list before you design the workflow:

  • There is no trigger app, no event stream and no outbound webhook. Polling is the mechanism.
  • Cross-interview themes are not pushed anywhere. Theme clustering happens when the study report is generated. To alert on five people said this, either keep a running count in your own store as interviews land, or read the report and let its clustering do the work.
  • There is no per-message streaming. The unit of news is a finished interview.

Setup: Koji to Teams in four steps

Step 1 - Create the Workflows webhook

  1. In Teams, click the ellipsis next to the target channel and choose Workflows.
  2. Pick the template Post to a channel when a webhook request is received.
  3. Confirm the team and channel, then finish. Teams returns a URL on the logic.azure.com domain. Copy it.

That URL is a bearer credential in every meaningful sense: anyone holding it can post into your channel. Store it as a secret, never in client-side code or a committed .env.

Step 2 - Decide what counts as news

Resist the urge to post everything. A channel that fires on all 200 interviews in a study gets muted in a day, and a muted channel is worth less than no channel. Sensible filters:

  • Quality score of 4 or 5 only, for a general #voice-of-customer channel.
  • Any interview where a named theme tag appears, for a focused channel like #onboarding-research.
  • Negative sentiment only, for a churn-watch channel.

Step 3 - Poll the Koji read endpoint

Call GET /api/v1/interviews/{id} with an API key in the Authorization: Bearer header. Three things to know before you write the loop:

  • The key needs the interview:read permission, and the request must come from an allowed origin if you have configured an origin allowlist.
  • Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Read them and back off rather than discovering your ceiling with a burst of 429s.
  • The endpoint requires an Interviews plan or higher.

A completed interview returns interview_id, status, created_at, updated_at, a respondent object, a stats object with message_count, user_messages, assistant_messages and duration_seconds, the full transcript array, and analysis.

Step 4 - Shape the card

The analysis object is where the useful material lives: a summary, keyInsights, a sentiment value, themeTags, a questionAnswerMap, structuredAnswers for typed questions, and a qualityScore carrying an overall 1-5 score, a written rationale, and a breakdown of relevance, depth and coverage.

A card that people actually read contains four things and stops: one verbatim quote, the theme tags, the quality score, and a link to the full transcript. The quote is the part that changes minds. Lead with it.

How Koji handles this

  • Every extracted item is grounded in a verbatim quote. Each theme, insight and quote in the analysis carries the participant's own words, copied character for character in their original language, filler words included. Items whose supporting quote cannot be matched back to a real respondent message are dropped rather than shown, so a card built from this payload cannot surface a sentence the participant never said.
  • The AI asks the follow-up before the moment passes. A survey tool would have recorded the import was confusing and stopped. Koji probes, so the card you post already contains the reason.
  • Structured and conversational data arrive together. All six structured question types - open_ended, scale, single_choice, multiple_choice, ranking and yes_no - return a machine-readable structuredValue alongside the qualitative reasoning, so you can put a number and a because-clause in the same card.
  • Quality scoring is built in, which is what makes an automated filter possible at all. Without a score you are posting noise and hoping.
  • Voice and text interviews land in the same shape, so one workflow handles both.

Common mistakes

Posting every interview into one busy channel

The failure mode is silent: nobody unsubscribes, they just stop reading. Filter hard, and give a low-volume channel a high-signal name.

Treating the card as the artifact

A Teams message is a notification, not a record. It scrolls away. The durable artifact is the published report and the transcript it links to. Always include the link.

Rebuilding theme counting in your poller

Counting how often a theme appears across interviews is report-level work that Koji already does. Duplicating it in a webhook handler gets you a second, slightly wrong number.

Governance

Interview transcripts routinely contain personal data and, in B2B research, commercially sensitive detail. A channel is a copy of that data in a second system with its own retention and its own membership list. Post the quote and the link, not the transcript. Keep the channel private where the study warrants it, and confirm your Teams retention policy matches the commitment you made to participants.

Frequently asked questions

Does Koji have a native Microsoft Teams app?

No. There is no Koji app in the Teams store and no outbound webhook from Koji, so a message reaches Teams only because something you run put it there. The two supported patterns are pasting a published report link, and polling the Koji read endpoint from your own backend or a no-code tool and posting to a Teams Workflows webhook.

Can I still use the old Office 365 connector webhook?

No. Microsoft disabled Office 365 connectors on a rollout beginning 18 May 2026 and completing 22 May 2026, and required connector-based webhooks to be migrated to Power Automate-based workflows beforehand. Use the Workflows app template Post to a channel when a webhook request is received instead.

How quickly will an insight appear in the channel?

That is set by your polling interval, not by Koji. A per-minute poll puts a finished interview in the channel about a minute after the participant stops talking. Watch the rate limit headers on the read endpoint and widen the interval if you are running many studies at once.

Do I need an API key, and which plan?

Yes. The read endpoint needs an API key with the interview:read permission, sent as a bearer token, and it requires an Interviews plan or higher. The published-report-link route needs neither.

Can I trigger a Koji interview from Teams?

Not from a Teams message directly, but the pieces exist. The Headless API can start an interview and send messages to it, so a Power Automate flow or a bot you host can call it. Most teams find the reverse direction - research arriving in Teams - delivers value far sooner.

What stops the card containing a quote the participant never said?

Grounding. Every extracted item must carry a verbatim slice of a real respondent message, and the server drops any item whose supporting quote cannot be matched against the transcript. If a quote reaches your card, it was in the conversation.

Related Resources