# subscriber.dev - [Introduction](https://docs.subscriber.dev/introduction.md): Lifecycle email you run from your terminal or your AI agent. - [Quickstart](https://docs.subscriber.dev/quickstart.md): Send your first workflow email in about five minutes. - [Connect your AI agent](https://docs.subscriber.dev/mcp.md): Run subscriber.dev from Claude, Cursor or any MCP client. - [CLI reference](https://docs.subscriber.dev/cli.md): Every subscriber command and its options. - [TUI](https://docs.subscriber.dev/tui.md): Browse and manage everything with your keyboard. - [Environments](https://docs.subscriber.dev/environments.md): Keep testing separate from the emails your real users get. - [Subscribers](https://docs.subscriber.dev/subscribers.md): The people you email: their details, tags, and whether they've opted in. - [Sending](https://docs.subscriber.dev/sending.md): How your emails go out, and how to keep them out of spam. - [Workflows](https://docs.subscriber.dev/workflows.md): Steps, delays, and triggering a workflow for a subscriber. - [Templates](https://docs.subscriber.dev/templates.md): Personalise subjects and bodies with Liquid variables, conditions and layouts. - [Broadcasts](https://docs.subscriber.dev/broadcasts.md): Send a workflow to everyone in an audience, all at once or spread out. - [Plans and limits](https://docs.subscriber.dev/plans.md): What each plan includes, how subscribers are counted, and what happens when you go over. - [Analytics](https://docs.subscriber.dev/analytics.md): How many subscribers you have, and how your emails are doing. - [Troubleshooting](https://docs.subscriber.dev/troubleshooting.md): Find out why an email didn't send, a trigger didn't fire, or an email went to spam. - [Overview](https://docs.subscriber.dev/integrations/overview.md): Connect the services subscriber.dev sends through and listens to. - [Resend](https://docs.subscriber.dev/integrations/resend.md): Send through Resend, with bounces and spam complaints handled for you. - [Postmark](https://docs.subscriber.dev/integrations/postmark.md): Send through Postmark, with bounces and spam complaints handled for you. - [Amazon SES](https://docs.subscriber.dev/integrations/ses.md): Send through Amazon SES, with bounces and spam complaints handled for you. - [SMTP](https://docs.subscriber.dev/integrations/smtp.md): Send through any SMTP provider. - [Cloudflare Email](https://docs.subscriber.dev/integrations/cloudflare.md): Send through Cloudflare's email sending API. - [Stripe](https://docs.subscriber.dev/integrations/stripe.md): Start and stop workflows from Stripe trial and subscription events. - [Introduction](https://docs.subscriber.dev/api-reference/introduction.md): Call subscriber.dev from your own app. - [Get current user](https://docs.subscriber.dev/api-reference/users/get-current-user.md) - [Update current user](https://docs.subscriber.dev/api-reference/users/update-current-user.md) - [List AI agents connected through MCP sign-in](https://docs.subscriber.dev/api-reference/users/list-ai-agents-connected-through-mcp-sign-in.md) - [Disconnect an AI agent and revoke its access](https://docs.subscriber.dev/api-reference/users/disconnect-an-ai-agent-and-revoke-its-access.md) - [Sign out the session this request was made with](https://docs.subscriber.dev/api-reference/users/sign-out-the-session-this-request-was-made-with.md) - [Get user's workspaces](https://docs.subscriber.dev/api-reference/workspaces/get-users-workspaces.md) - [Create a new workspace](https://docs.subscriber.dev/api-reference/workspaces/create-a-new-workspace.md) - [Update a workspace](https://docs.subscriber.dev/api-reference/workspaces/update-a-workspace.md) - [List a workspace's environments](https://docs.subscriber.dev/api-reference/environments/list-a-workspaces-environments.md) - [Create a new environment in a workspace](https://docs.subscriber.dev/api-reference/environments/create-a-new-environment-in-a-workspace.md) - [Get the environment's setup checklist](https://docs.subscriber.dev/api-reference/environments/get-the-environments-setup-checklist.md): What's left to go from a new environment to the first email sent: connect an email provider, create a workflow, then trigger it. - [Get a workspace's plan and usage](https://docs.subscriber.dev/api-reference/billing/get-a-workspaces-plan-and-usage.md) - [Get a link to start a paid plan (or the billing portal if the workspace already has one)](https://docs.subscriber.dev/api-reference/billing/get-a-link-to-start-a-paid-plan-or-the-billing-portal-if-the-workspace-already-has-one.md) - [Get a link to manage or cancel the workspace's plan](https://docs.subscriber.dev/api-reference/billing/get-a-link-to-manage-or-cancel-the-workspaces-plan.md) - [List subscribers](https://docs.subscriber.dev/api-reference/subscribers/list-subscribers.md): Returns a paginated list of active subscribers in the environment - [Create a new subscriber](https://docs.subscriber.dev/api-reference/subscribers/create-a-new-subscriber.md): Creates a new subscriber in the specified environment and initialises their preferences - [List distinct tags](https://docs.subscriber.dev/api-reference/subscribers/list-distinct-tags.md): Returns every distinct tag currently in use across subscribers in the environment - [Get a subscriber](https://docs.subscriber.dev/api-reference/subscribers/get-a-subscriber.md): Returns a single subscriber with their latest preferences - [Delete a subscriber](https://docs.subscriber.dev/api-reference/subscribers/delete-a-subscriber.md): Soft-deletes a subscriber. The record is retained but excluded from all queries. - [Update a subscriber](https://docs.subscriber.dev/api-reference/subscribers/update-a-subscriber.md): Updates subscriber fields. All fields are optional. - [Bulk create or update subscribers](https://docs.subscriber.dev/api-reference/subscribers/bulk-create-or-update-subscribers.md): Upserts up to 500 subscribers per request. Each row is matched to an existing subscriber by publicId, then externalId, then email (in that order); if none match, a new subscriber is created. Rows are processed independently, so one failing row does not fail the batch. - [Update subscriber preferences](https://docs.subscriber.dev/api-reference/subscribers/update-subscriber-preferences.md): Creates a new preference record with updated values (immutable pattern) - [Add a tag to a subscriber](https://docs.subscriber.dev/api-reference/subscribers/add-a-tag-to-a-subscriber.md): Adds a tag to the subscriber. Adding a tag that's already present is a no-op. - [Remove a tag from a subscriber](https://docs.subscriber.dev/api-reference/subscribers/remove-a-tag-from-a-subscriber.md) - [Trigger a workflow](https://docs.subscriber.dev/api-reference/workflows/trigger-a-workflow.md): Starts a run of the workflow identified by `key` for the matched subscriber, scheduling all of its steps. - [List workflows](https://docs.subscriber.dev/api-reference/workflows/list-workflows.md): Returns a paginated list of workflows in the environment - [Create a new workflow](https://docs.subscriber.dev/api-reference/workflows/create-a-new-workflow.md): Creates a workflow definition: a named, ordered sequence of steps (email or webhook), each with a delay relative to the previous step. Optional `triggers` start it automatically on events from connected integrations, e.g. Stripe's trial_started, and `exitConditions` stop a person's active run on oth… - [List all workflow runs](https://docs.subscriber.dev/api-reference/workflows/list-all-workflow-runs.md): Returns a paginated list of trigger runs across every workflow in the environment, most recent first - [Get a workflow](https://docs.subscriber.dev/api-reference/workflows/get-a-workflow.md): Returns a single workflow with its steps - [Delete a workflow](https://docs.subscriber.dev/api-reference/workflows/delete-a-workflow.md): Soft-deletes a workflow. Existing in-flight runs are unaffected. - [Update a workflow](https://docs.subscriber.dev/api-reference/workflows/update-a-workflow.md): Updates workflow fields. If `steps` is provided, it replaces ALL existing steps; likewise for `triggers` and `exitConditions`. - [List runs for a workflow](https://docs.subscriber.dev/api-reference/workflows/list-runs-for-a-workflow.md): Returns a paginated list of trigger runs for this workflow, most recent first - [Preview a broadcast's audience size](https://docs.subscriber.dev/api-reference/broadcasts/preview-a-broadcasts-audience-size.md): Resolves the audience query and returns how many subscribers currently match, without creating or sending anything. Intended for confirming a broadcast's blast radius before triggering it. - [Trigger a broadcast](https://docs.subscriber.dev/api-reference/broadcasts/trigger-a-broadcast.md): Fans this workflow out to every subscriber matching the audience query. Resolving the audience and scheduling sends happens asynchronously — poll the returned broadcast (via listBroadcasts/getBroadcast) for progress. - [List broadcasts for a workflow](https://docs.subscriber.dev/api-reference/broadcasts/list-broadcasts-for-a-workflow.md): Returns a paginated list of broadcasts triggered for this workflow, most recent first - [Get a broadcast](https://docs.subscriber.dev/api-reference/broadcasts/get-a-broadcast.md): Returns a single broadcast with its resolved audience size and derived step-outcome counts (sent/failed/skipped/pending) - [Pause a broadcast](https://docs.subscriber.dev/api-reference/broadcasts/pause-a-broadcast.md): Holds every send that hasn't gone out yet until the broadcast is resumed. Already-sent emails are unaffected. - [Resume a paused broadcast](https://docs.subscriber.dev/api-reference/broadcasts/resume-a-paused-broadcast.md): Lets a paused broadcast carry on sending. The remaining sends keep their original spacing, pushed back by however long it was paused. - [Cancel a broadcast](https://docs.subscriber.dev/api-reference/broadcasts/cancel-a-broadcast.md): Permanently stops a broadcast: every send that hasn't gone out yet is cancelled. Already-sent emails are unaffected. Cannot be undone. - [Re-dispatch a broadcast](https://docs.subscriber.dev/api-reference/broadcasts/re-dispatch-a-broadcast.md): Re-runs setup for every matching subscriber who hasn't been set up yet (for example after setup jobs failed), spread over a fresh send window. Subscribers already set up are skipped, so nobody receives the email twice. - [Render an email](https://docs.subscriber.dev/api-reference/emails/render-an-email.md): Renders a subject and body the way they'd send, filling in variables with your own details as the sample subscriber. Nothing is sent. - [Send a test email](https://docs.subscriber.dev/api-reference/emails/send-a-test-email.md): Sends one of a workflow's email steps (workflowId, and optionally step), or a subject and body, through the environment's email integration, to you or another address, without creating a subscriber or a run. Your details are the sample subscriber unless you pass data. Subject lines are prefixed with… - [Get an integration](https://docs.subscriber.dev/api-reference/integrations/get-an-integration.md): Returns the sanitized config for a single integration type (no secrets). - [Remove an integration](https://docs.subscriber.dev/api-reference/integrations/remove-an-integration.md) - [Configure an integration](https://docs.subscriber.dev/api-reference/integrations/configure-an-integration.md): Creates or updates the integration of the given type for this environment (e.g. "smtp"). Body shape depends on the integration type; secret fields (e.g. password) are encrypted at rest and never returned. When updating, omit secret fields to keep the stored ones; config fields are always replaced in… - [Set an integration as primary](https://docs.subscriber.dev/api-reference/integrations/set-an-integration-as-primary.md): Moves this integration to the front of the environment's failover order (tried first on send). The rest keep their relative order as fallbacks. - [List configured integrations](https://docs.subscriber.dev/api-reference/integrations/list-configured-integrations.md): Returns every integration configured for this environment, sanitized (no secrets). - [Upload an image for your emails](https://docs.subscriber.dev/api-reference/uploads/upload-an-image-for-your-emails.md): Uploads a PNG, JPEG, GIF or WebP image (up to 5 MB) and returns its public URL to use in an email. - [Turn a video link into a thumbnail](https://docs.subscriber.dev/api-reference/uploads/turn-a-video-link-into-a-thumbnail.md): Email clients can't play video, so emails show a thumbnail with a play button that links to the video. Give a YouTube, Vimeo or Loom link and this stores the thumbnail and returns what to put in the email. - [Get environment-wide analytics](https://docs.subscriber.dev/api-reference/analytics/get-environment-wide-analytics.md): Subscriber counts, opt-outs, send outcomes, and bounce breakdown for an environment. `days` scopes the new-subscriber and recently-opted-out counts; send/bounce totals are all-time. - [List inbound webhook events](https://docs.subscriber.dev/api-reference/inbound-events/list-inbound-webhook-events.md): Webhook events received from inbound sources (e.g. Stripe) for this environment, most recent first, with the events they matched and what happened (workflow triggered, no workflow triggered by it, person not found, etc.). - [List workflow trigger sources](https://docs.subscriber.dev/api-reference/inbound-events/list-workflow-trigger-sources.md): Integrations whose events can trigger workflows (e.g. Stripe), whether each is connected in this environment, and the events each offers. - [List API keys](https://docs.subscriber.dev/api-reference/api-keys/list-api-keys.md) - [Create an API key](https://docs.subscriber.dev/api-reference/api-keys/create-an-api-key.md): Creates an API key for this environment. The key is only returned once. Signed-in users only: an API key can't create keys. - [Revoke an API key](https://docs.subscriber.dev/api-reference/api-keys/revoke-an-api-key.md): Requests made with the key fail straight away. - [Get the API key this request was made with](https://docs.subscriber.dev/api-reference/api-keys/get-the-api-key-this-request-was-made-with.md): Any API key can call this, whatever its scopes. Use it to find the key's environment ID. - [Self-hosting](https://docs.subscriber.dev/self-hosting.md): Run the open source community edition on your own servers. ## OpenAPI Specs - [openapi](/openapi.json) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.