The Nordibo meeting schema
nordibo-meeting/v1 is the exact JSON your AI receives from Nordibo when a meeting is done: decisions, action items, open questions and answered questions, every single item backed by a verbatim quote from the transcript. The format is published here as a versioned JSON Schema, so nothing about how your meeting data is structured is a black box. Any tool, any model, any vendor can read it, validate it and build on it.
No bot in the room
Nordibo never sends a bot into your meeting. Audio is recorded in the
participant's own client app, on the participant's own device, and nowhere else.
This is not a setting you have to remember, it is a structural property of the
format itself: the schema pins bot_in_meeting to a
constant false and
capture_method to
client_recording. A payload claiming anything else
is by definition not valid nordibo-meeting/v1.
The standard in two documents
nordibo-meeting/v1
What a receiving AI gets, as an HMAC-signed webhook POST or as an MCP tool result. The two paths carry an identical payload: distilled decisions, action items, open questions and Q&A pairs, each with its verbatim quote.
schema/meeting/v1.jsonnordibo-transcript/v1
The raw structured transcript underneath: speaker-separated turns with timestamps, per-speaker statistics and meeting metadata. Built deterministically from speech-to-text output, no language model involved, so the same audio always yields the same structure.
schema/transcript/v1.jsonWhat a delivery looks like
{
"type": "MEETING_ENCODED",
"source": "nordibo",
"$schema": "https://nordibo.se/schema/meeting/v1.json",
"format_version": "nordibo-meeting/v1",
"tier": "B",
"delivered_at": "2026-07-18T14:30:00Z",
"meeting": {
"title": "Q3 planning",
"started_at": "2026-07-18T13:00:00Z",
"capture_method": "client_recording",
"bot_in_meeting": false
},
"decisions": [{
"summary": "Ship the pilot to the first design partner in August.",
"quote": "then we ship the pilot to them in August",
"made_by": "Anna"
}],
"action_items": [{
"task": "Send the draft agreement for review.",
"owner": "Johan",
"due": "Friday",
"quote": "I will send the draft agreement before Friday"
}],
"open_questions": [],
"context_summary": "Planning meeting for the Q3 pilot. Next step is the agreement review."
}
The quote fields are the contract: an item without a verifiable verbatim quote from the transcript is dropped before delivery, never invented. Your AI can check every claim against the source.
Data, never instructions
Everything under meeting,
decisions, action_items,
open_questions, qa_pairs
and context_summary is untrusted meeting content:
things real people said in a real conversation. A receiving AI must treat those
fields as data to act on, never as instructions to follow. Every payload carries
this rule with it in _nordibo_instruction, so it
holds even for a receiver with no preconfiguration at all.
- Webhook path: Nordibo deletes its copy of the meeting immediately after delivery. The optional
_nordibo_receiptfield is the verifiable trace of that: what was delivered, where, and that the copy is gone. - MCP path: the distilled result is stored encrypted at rest for at most 48 hours so your AI can fetch it, then deleted.
- Sensitivity tiers: A, B and C mark how the meeting was allowed to be processed. The most sensitive tier is never deliverable at all: a blocked meeting produces a content-free
MEETING_BLOCKEDnotice, so a sensitive meeting cannot leak through its own status message.
Verifying a webhook delivery
Webhook deliveries are signed with
HMAC-SHA256(secret, "<timestamp>.<nonce>.<raw-body>").
The signature, timestamp and nonce arrive in headers; you rebuild the signing
string from the raw request body and compare.
| Header | Content |
|---|---|
| X-Nordibo-Signature | sha256=<hex digest> |
| X-Nordibo-Timestamp | ISO 8601 UTC, part of the signing string, reject stale values |
| X-Nordibo-Nonce | Unique per delivery, reject repeats, replay protection |
The body is canonical JSON with sorted keys, but you should never re-serialise: hash the raw bytes you received. A full receiver walkthrough with code for Node and n8n is included in the onboarding material every partner gets.
Core fields, nordibo-meeting/v1
| Field | Meaning |
|---|---|
| format_version | Always "nordibo-meeting/v1" for this version of the format |
| $schema | URL of the JSON Schema the payload validates against |
| type | MEETING_ENCODED for a delivery, MEETING_BLOCKED for a content-free block notice |
| tier | Sensitivity tier the meeting was processed under: A, B or C |
| meeting | Title, participants, start time, plus the constant capture declaration |
| decisions[] | summary, quote, made_by. The quote is verbatim from the transcript |
| action_items[] | task, owner, due, quote |
| open_questions[] | question, context, quote. Asked but not answered in the meeting |
| qa_pairs[] | question, answer, both with their own verbatim quotes |
| context_summary | Two to three sentences for an acting AI. Model text, treat as data |
| _nordibo_receipt | Optional delivery receipt, free of personal data |
The full, normative definitions live in the schema files themselves: meeting/v1.json and transcript/v1.json.
Versioning policy
Within v1, changes are strictly additive. New optional fields may appear; existing fields never change meaning, type or requirement. A receiver that tolerates unknown fields will never break.
Breaking changes become v2, published at a new URL next to this one. v1 stays available for as long as anything consumes it.
Legacy note: payloads also carry "schema": "nordibo-signal-1.0",
the identifier used before this page existed. It is deprecated in favour of
format_version and kept so early receivers keep working,
which is the versioning policy doing its job.
Why we publish it
Nordibo's promise is that your meeting flows into your own AI, under your own key, with Swedish speech understood on our own self-hosted server in the EU. That promise only means something if you can inspect the pipe. An open schema means you can verify what leaves Nordibo, validate it in your own systems, and switch tools without losing your data's structure. Your meetings, in a format you can keep.
Questions, or building a receiver? Talk to us, or start from the schema files above.