What is Orqestra?
The problem
Every application eventually needs to send notifications. A welcome email when someone signs up. An SMS when a payment fails. A real-time alert when a background job finishes.
Most teams handle this by writing it themselves: a SendGrid call here, a Twilio snippet there, a Firebase SDK wrapper somewhere else. After a few months you have notification logic scattered across services, each team managing their own credentials, each integration breaking in its own way when something goes wrong.
It works — until it doesn't. And when it breaks, you have no visibility into what happened.
The solution
Orqestra is a notification service you deploy once and use from every service in your stack.
Instead of integrating directly with email or SMS providers, your services fire a single HTTP event:
POST /api/v1/events/trigger
x-api-key: your-api-key
{
"eventType": "payment.failed",
"payload": {
"userId": "user_12345",
"recipientEmail": "alice@example.com"
},
"variables": {
"amount": 49.99,
"cardLast4": "4242"
}
}
payload tells Orqestra who to notify. variables holds the data your template will render — the keys map directly to Handlebars expressions like {{amount}} in your template content.
Orqestra finds the right template for that event, renders it, and delivers it — over email, SMS, push, or all three simultaneously. Your service doesn't know or care which provider was used.
How it works
flowchart LR
A[Your service] -->|POST event| B[Orqestra API]
B --> C{Match template}
C -->|Email template| D[Email provider]
C -->|SMS template| E[SMS provider]
C -->|Push template| F[Real-time push]
D --> G[Recipient ✓]
E --> G
F --> G
Three steps:
- Trigger an event — your service sends one HTTP call with a JSON payload.
- Templates render automatically — Orqestra finds the template that matches your event type and fills in the variables from your
variablesobject. - Notifications are delivered — the rendered content is dispatched to the configured channel (email, SMS, or in-app push).
If delivery fails, Orqestra retries automatically. If it fails permanently, the notification lands in the Recovery Queue so you can investigate and replay it — nothing disappears silently.
Who it's for
- Product teams who want to own their notification content without asking engineering to change code every time.
- Platform teams building shared infrastructure for multiple internal services or tenants.
- SaaS builders who need strict data isolation between their own customers.
Key concepts
| Term | What it means |
|---|---|
| Tenant | A team or application with its own API key, templates, and provider settings |
| Event | A signal your app fires when something happens (order.confirmed, user.signup) |
| Template | A reusable message layout linked to an event type |
| Provider | The service that delivers the message (Resend, SendGrid, Twilio) |
| Channel | The delivery method — Email, SMS, or Push |
See Concepts for full plain-language definitions with examples.
Next steps
- Quickstart → — Fire your first notification in 5 minutes using the sandbox.
- Concepts → — Understand tenants, providers, templates, and events.
- Architecture → — How the components fit together under the hood.