Skip to main content
POST
The note attaches to a calendar_event that already exists in Nexor. There are no orphan notes in v1: if no meeting resolves, you get a 404. Meeting resolution. The endpoint tries the following in order, stopping at the first match:
  1. calendar_event_id (direct).
  2. external_calendar_provider + external_calendar_event_id (matches meetings created via POST /meetings with those dedup keys).
  3. meeting_url (exact match on the calendar_event’s meeting URL).
  4. lead_email + meeting_date (lead’s meeting within ±60 minutes of meeting_date).
  5. lead_email alone (the lead’s most recent past meeting; no time-window floor).
Idempotency. If you supply external_meeting_id together with a provider, replays of the same (provider, external_meeting_id) under your client update the existing row instead of creating duplicates. The timeline note_added activity fires only on the first insert, not on replays. Reserved providers. These values are rejected to protect internal sync pipelines: fireflies, diio, gemini, retell. Pick any other lowercase alphanumeric string (e.g. fathom, granola, otter, manual, zoom_ai). Regex: ^[a-z0-9_-]{1,64}$. Minimum payload: one way to resolve a meeting (calendar_event_id, external_calendar_event_id + external_calendar_provider, meeting_url, or lead_email) and one non-empty content field (notes, transcript_text, summary, manual_ai_summary, or action_items).

Authorizations

X-API-Key
string
header
required

API key for authentication. Keys are prefixed with nxr_live_.

Body

application/json
provider
string

Source of the note. Default manual. Reserved names rejected.

external_meeting_id
string

Stable id from the note-taker (e.g. Fathom Recording ID). Enables idempotent replay. ≤ 255 chars.

calendar_event_id
string<uuid>

Direct link, tier 1 resolution.

external_calendar_provider
string

Pair with external_calendar_event_id, tier 2.

external_calendar_event_id
string

Provider's event id from POST /meetings.

meeting_url
string

Meet / Zoom / Fathom URL, tier 3.

lead_email
string

Matches the lead (client-scoped); also drives tiers 4 & 5.

meeting_date
string

ISO 8601. Used with lead_email for ±60 min fuzzy match.

meeting_title
string
duration_seconds
integer
organizer_email
string

Host email.

notes
string

Raw freeform text. Alias for transcript_text; if both are provided, transcript_text wins. ≤ 1 MB.

transcript_text
string

Full transcript. ≤ 1 MB.

summary
string

Notetaker's native summary (Fathom / Granola / Otter recap).

manual_ai_summary
string

AI-enriched custom summary. Stored separately from summary.

action_items
any[]

["Send pricing", ...] or [{ text, assignee }, ...]. ≤ 512 KB.

questions
any[]

["What's the monthly cost?", ...]. ≤ 512 KB.

keywords
any[]

["pricing", "enterprise", ...]. ≤ 512 KB.

sentences
any[]

Speaker-level utterances (Fireflies-compatible shape). ≤ 512 KB.

status
enum<string>
default:completed
Available options:
completed,
pending,
failed

Response

Created (or 200 on replay upsert)

success
boolean
upserted
boolean

true when a prior row with the same (provider, external_meeting_id) was updated instead of inserted.

meeting_note
object
Last modified on June 26, 2026