Documentation

Reference

Every endpoint, every package, and what the words mean.

All documentation
Getting started
Overview Quickstart SDK packages
Frontend
React Vue Svelte React Native Web Components Headless & theming Real-time
Backend API
Authentication Templates Trigger & status Contacts & preferences
More
Self-hosting MCP server Reference

Endpoints

RouteCredentialWhat it does
POST /v1/notificationsService keyTrigger an event for 1–100 recipients
GET /v1/notifications/{event_id}Service keyDelivery status for one event
POST /v1/contactsService keyCreate a contact (409 if the external_id exists)
POST /v1/contacts/bulkService keyCreate or update up to 500 contacts, matched by external_id
PUT /v1/contacts/{id}Service keyReplace a contact's mutable fields
POST /v1/contacts/tokensService keyMint a contact token (404 if the contact is unknown)
GET /v1/contacts/{id}/notificationsContact tokenThe contact's inbox
GET /v1/contacts/{id}/preferencesEitherThe preference matrix
PUT /v1/contacts/{id}/preferencesEitherSet one type × channel preference
PUT /v1/contacts/{id}/languageEitherSet the preferred language
POST /v1/contacts/{id}/push-subscriptionsEitherRegister a push destination (device token, or a browser subscription)
GET /v1/web-push/public-keyEitherYour account's VAPID public key, for pushManager.subscribe()

A contact token may only ever act as its own contact. A service key may act as any contact in its account.

Packages

  • API base: https://api.elaan.io/v1 (self-hosted installs use their own host)
  • OpenAPI document: elaan.io/openapi.json — the machine-readable contract for every endpoint above. Generate a typed client for any language from it.
  • npm: @elaanio/react, @elaanio/vue, @elaanio/svelte, @elaanio/react-native, @elaanio/elements, @elaanio/react-core, @elaanio/core
  • SDK source & issues: github.com/ThingsIDoForLove/elaan-js
  • Console: console.elaan.io, where you create notification types, templates, brands, and service keys.

Glossary

  • Notification type: a kind of message ("order shipped"), carrying its per-channel defaults. Referenced everywhere by its key.
  • Template: the content for one type on one channel, optionally per brand and per language.
  • Brand: a named set of values (name, colour, logo URL) a template renders against. Every account has exactly one default.
  • Contact: a recipient, addressed by your own external_id.
  • Event: one trigger for one recipient, with its own id and its own delivery status.
  • Channel: in-app inbox, email, mobile push, or browser push (web push).
  • Secret variable: a trigger value sent to the recipient in full but masked in your activity log, such as a one-time code or a reset link. Passed in secret_variables rather than variables.