Skip to content
EmitKitDocs
Esc
↑↓navigate↵open⌘Jpreview

Changelog

Notifications that don't stop quietly

September 28, 2026

Dashboard
  • Repaired when the app opens. Browsers sometimes replace a device’s push registration. When you open the app, EmitKit moves your notification settings to the new one, with your per-organization and channel choices kept. If the browser dropped it altogether, EmitKit registers again without asking.
  • “Notifications stopped on this device”. If push was on and nothing reaches the device any more, the app says so. Turn back on registers it afresh. If notifications are blocked in the browser or phone settings, the app says that instead.
  • Signing out stops pushes. A device you sign out of no longer gets your account’s notifications, so the next person using it doesn’t see them. Turn notifications on again after you sign back in.
Sign in with a code

September 28, 2026

Dashboard
  • Codes instead of magic links. Continue with Email Code emails you a six-digit code that expires after 5 minutes. On iPhone, a link from Mail opened in Safari, which keeps its own sign-in, so the app on your Home Screen stayed signed out. You type a code into the app itself, and iOS offers it from Mail above the keyboard. Asking again resends the same code, and after three wrong tries you need a new one.
  • Back to where you were. Signing in from a link, such as a notification you tapped while signed out, now opens that page. Before, it could end on an error page instead.
Ask for a decision

September 26, 2026

API
  • Buttons and fields on events. Add actions with an id (buttons) and fields (a choice, text, a number or yes/no) to an event, and it waits for an answer. The push opens an answer page; the first person to answer decides. Links (actions with a url) work on any event. See Ask for a decision.
  • Read events back. GET /v1/events/{id} returns an event with its answer, and POST /v1/events/{id}/cancel stops one from waiting.
  • Error codes. Every error body now carries a stable code, such as validation_error or not_found, and validation errors say how to fix each problem.
  • MCP. createEvent can ask, and the new getEvent and cancelEvent tools read and cancel.
Callbacks for questions

September 26, 2026

API
  • callbackUrl. Send it with a question and EmitKit POSTs the answer (event.answered), or the expiry (event.expired), to your endpoint, signed the Standard Webhooks way with your project’s callback secret (Settings → API keys). Failed deliveries are retried for about 16 hours with the same webhook-id. See Callbacks.
  • resume. Up to 65,536 characters of your own state, sent back as is in the callback and GET /v1/events/{id}, so a serverless handler can carry on without a database.
  • Delivery status. GET /v1/events/{id} shows callback: attempts, the last status and when it was delivered.
Read events, list channels, read-only keys

September 26, 2026

API
  • GET /v1/events. The Project’s events, newest first, with their answers. Filter by channel, since and before; page with nextCursor. MCP: listEvents.
  • GET /v1/channels. The channel names already in use. MCP: listChannels.
  • GET /v1/me. Which Organization and Project a key belongs to, and what it may do.
  • Read-only keys. Choose Read-only when you create a key in Settings → API keys. It reads events and channels and gets 403 forbidden for anything else; over MCP it only sees the read tools. See scopes.
  • userId in identify. POST /v1/identify takes userId, like events do. user_id still works.
  • MCP authentication. A bad or rate-limited key now gets an HTTP 401 or 429 for every MCP request, instead of an error inside a tool result.
SDK 3 and the CLI (preview)

September 26, 2026

SDK
  • @emitkit/js 3 (npm install @emitkit/js@next). Typed requests and responses; ask() sends a question and waits for the answer from someone’s phone; events.get, events.list, events.cancel, channels.list, identities.delete and me; verifyCallback() for callbacks; one EmitKitError with the API’s code; safe retries with an automatic idempotency key. No dependencies. See the SDK docs.
  • The CLI (npx @emitkit/cli@next). emitkit send, ask (waits, with exit codes for scripts), events, tail, channels, identify, with --json for agents. See CLI.
A simpler dashboard, with revenue

September 24, 2026

Dashboard
  • One feed. The dashboard is now a single live feed. Pick a Project next to your organization’s name. Open any event to see its details right under it, including a link to show only that Channel.
  • Pulse. Events over the last 24 hours, 7 or 30 days, compared with the period before.
  • Revenue. Send amount and currency in an event’s metadata, for example "metadata": { "amount": 49, "currency": "EUR" }, and the dashboard shows the amount on the event and adds it up as revenue. See Metadata.
  • Readable details. Durations, sizes, percentages, dates, links and nested objects in metadata are formatted instead of shown as raw values.
EmitKit v3

September 24, 2026

Platform

EmitKit v3 is live at app.emitkit.com, with the API at api.emitkit.com.

  • Dashboard. A live event console you can filter by Project, Channel, source, or text, with every event’s metadata a click away. Manage Projects and Channels, invite members with roles, and manage API keys. The dashboard installs as an app on your phone or computer.
  • Push notifications. Turn them on in Settings → Notifications to get events on your devices, for every Channel or only the ones you pick. Events sent with notify: false stay quiet.
  • Erase a user on request. DELETE /v1/identities/{user_id} deletes an identity and its aliases, so you can honour an erasure request straight away.
  • MCP server. Agents can create events, identify users, and erase identities at https://api.emitkit.com/mcp with an API key.
  • Safer retries and clearer limits. Idempotency-Key replays the first response for 24 hours. Authenticated responses carry rate-limit headers, and going over the limit returns 429 with Retry-After.
  • Documentation. Guides, the API reference, and this changelog now live at emitkit.com/docs, with Markdown and llms.txt versions for agents.

Accounts, Organizations, and API keys from the previous version of EmitKit weren’t carried over. Sign up again and create a new API key: keys still start with emitkit_, but old keys no longer work.

A new look for EmitKit

September 24, 2026

Platform

EmitKit has a new identity: a new mark and wordmark, Emit Blue, and the Geist typeface. You’ll see it in the dashboard, on the website, in these docs, in emails, in the installed app’s icon and in push notifications. Nothing about the API or your data changes.