Documentation

Notion + Tevyr

Update Notion pages and databases from any Tevyr macro — append paragraphs to a run-of-show log, flip a session's status to "Done" the moment it ends, query a database mid-show to drive a branching macro. Connect once with a paste-in integration token; no OAuth.

What's Notion?

Notion is the document + database tool a lot of production teams use for show notes, rundowns, and post-event recaps. Tevyr's integration uses Notion's official Internal Integration tokens — same auth pattern Notion's own API examples use. Get started at notion.so.

What you can do

Make Notion your single source of truth for "what happened during the show" — without anyone having to type it.

Auto-log every session start

Append a paragraph to a run-of-show page each time a session starts: 'Session {name} started at {time}'. Producer reviews the page post-show — no manual note-taking.

Flip status to Done on session end

When a session ends, patch its row in your rundown database to status=Done and stamp the completion timestamp. The Notion view auto-updates for everyone watching.

Query a database mid-show

Ask Notion 'is this segment marked ready?' before a session starts and branch the macro on the answer. Useful when production stages content gates upstream.

Centralize show notes

Have every macro fire append a structured entry to a shared page. The production team sees every cue, every blackout, every Q&A submission without watching the controller.

Prerequisites

  • Tevyr Starter plan or above — Free plan ships 0 integration connections
  • A Notion workspace where you can create integrations
  • Pages or databases to share with the integration (Notion grants permission per-page, not per-workspace)

One-time setup

1. Create a Notion integration

  1. Visit notion.so/profile/integrations
  2. Click + New integration
  3. Name it Tevyr, pick your workspace, click Save
  4. On the integration's overview, click Show next to Internal Integration Secret and copy the token — it starts with secret_ (legacy) or ntn_ (new) and is shown once, so paste it somewhere safe before leaving the page
Tip

In the modern Notion UI, the Integrations label was renamed to Connections. The developer portal URL above is unchanged.

2. Paste the token into Tevyr

  1. In Tevyr, Settings → Integrations → Add new
  2. Pick the Notion tile
  3. Paste your integration token into the token field, give the connection a name (e.g. "Notion — rundowns"), click Save
  4. Click Test on the new connection — Tevyr calls Notion's /users/me (read-only) and shows a green toast like "Notion — live · token verified"

3. Share each page with the integration

This is the #1 thing operators miss. Notion grants integration access per page, not per workspace. Until you do this step, every macro fire returns object_not_found.

  1. Open the Notion page (or database) you want Tevyr to write to
  2. Click the menu in the top-right
  3. Click ConnectionsAdd connections
  4. Pick your Tevyr integration
  5. Click Confirm

The integration now has access to that page and all of its descendants. Repeat for each top-level page you want to grant.

Page IDs vs database IDs

Notion URLs look like this:

https://www.notion.so/Test-Page-3622c4e2b4fc80729c58f850d26a5657?source=copy_link

The 32-character hex string before the ? is the page ID (dashes are optional — Tevyr accepts both forms).

Warning

If the URL also contains ?v=… like this:

https://www.notion.so/3622c4e2b4fc8097b999d6d2fe4b7b42?v=3622c4e2b4fc804fbd20000cd89bc9f4

…that's a database view, not a page. Databases reject paragraph children — you'll get a 400 Block does not support children error. To append paragraphs, pick a child page inside the database, not the database itself.

Recipes

Recipe 1 — Append "session started" paragraph to a run-of-show page

Action: Append paragraph.

FieldValue
Page ID3622c4e2b4fc80729c58f850d26a5657 (your page's hex from the URL)
TextSession {{ctx.session.name}} started at {{ctx.now.local}}
Info

Paste plain text into the Text field. The template handles the JSON wrapping. Pasting raw JSON like {"children": [...]} writes the literal JSON string as a paragraph, which is not what you want.

Recipe 2 — Flip session status to "Done" on completion

Trigger: lifecycle event on_session_end. Action: Update page properties.

FieldValue
Page IDthe rundown row's page ID
PropertyStatus
ValueDone
Date property (optional)Completed at{{ctx.now.iso}}

Recipe 3 — Query a database, branch on result

Use flow.http_request + Notion's Query database action, then feed the result into flow.branch_if:

  1. Notion → Query database → capture results[0].properties.Status.select.name
  2. flow.branch_if → if equals ready, fire the show-start macro; otherwise post to Slack and halt

Troubleshooting

object_not_found

The page (or database) hasn't been shared with the integration. Open it → ConnectionsAdd connections → pick TevyrConfirm. Re-fire.

Block does not support children

You passed a database ID where a page ID is required. Check your Notion URL — if it contains ?v=…, that's a database. Pick a child page from the database instead.

validation_error: body.children[0].paragraph

You pasted JSON into the Text field. The template wraps your text in the JSON paragraph block automatically — paste plain text only.

unauthorized

The integration token is wrong, revoked, or scoped to a different workspace. Regenerate the secret on the integration's developer page, paste the new value into the Tevyr connection (use Edit on the connection card), save, re-test.

"Text is required" shown after I pasted content

A cosmetic quirk in the macro editor — the validator only re-evaluates on direct keystrokes, not on paste. Type a single space inside the field and delete it to clear the warning, or just hit Save — the server accepts the pasted content fine.

Context variables

URL, header, and body fields on Notion actions support {{ctx.*}} interpolation — Tevyr resolves them at fire time. See the full context-variable reference in the Macros guide. Common ones: {{ctx.event.title}}, {{ctx.session.title}}, {{ctx.session.speaker_name}}, {{ctx.timer.remaining_seconds}}, {{ctx.now.iso}}.

Triggered by webhook events

Notion can be fired automatically from any webhook event (session.started, session.completed, timer.warning, etc.) — perfect for live event logs. When creating a webhook, pick Integration mode and select your Notion connection.

  • Macros — build full event-log macros mixing Notion writes with Slack pings and timer actions
  • Integrations overview — other tools you can wire alongside Notion
  • Zapier guide — for the reverse direction (Notion → Tevyr via Notion Automations + Zapier)
  • Slack guide — pair with Notion to post a Slack ping every time a Notion row updates