Skip to main content
A workspace is the top-level container for everything in Courier. It holds brands, providers, templates, API keys, user profiles, and analytics. Nothing leaks between workspaces. Environments inside it separate configuration and data, so you build and test without touching live traffic. Most teams run one workspace with its two default environments.

Environments and API keys

Every workspace starts with two isolated environments, Production and Test. You can add more, and rename any environment except Production. Each has its own templates, brands, tags, subscription topics, integrations, journeys, API keys, and logs. A change in one never affects another until you migrate it. Switch environments from the dropdown at the top of the dashboard. Switching only changes your view and never affects live notifications. Courier has no separate “test mode” flag. Test is an environment, and a Test key is what puts you in it. API keys are scoped to one environment and one permission level. The prefix tells you both: A mock send lands on the status. It went through routing and rendering, and no provider was contacted.

Email in the Test environment

A new workspace’s Test environment arrives with a testing email provider already configured, so you can send before connecting anything of your own. That provider only delivers to the address you signed up with. It is a guardrail, not a bug. You can develop against real sends without any chance of reaching a real customer, which also makes a Test key the right one to hand an . To reach other addresses from Test, connect your own email provider to that environment, such as a sandbox SendGrid key. Integrations are per environment, so it does not touch Production. Create separate keys per service so you can rotate or revoke them independently. Keep published Production keys out of client-side code, and use Test keys during development. Find keys in your workspace settings.

Migrate assets between environments

Promote work with the Migrate assets flow, in the ellipsis menu on a template in the templates page. Courier copies the template and its dependencies: brands, tags, subscription topics, test events, and event maps. The template keeps working in the destination. On later migrations, you can overwrite a copied dependency or keep the existing asset. Pick a destination workspace to migrate across workspaces. Provider and channel integrations are not copied. They are per environment, so a migrated template arrives with content and no way to deliver it. Nothing fails at migrate time. You find out on the first send, when the template renders and goes nowhere. Configure each provider in the destination environment, which can hold different credentials from the source, such as a sandbox SendGrid key in Test.

Logs and billing by environment

Logs and metrics are environment-specific. A Test-key send appears only in the Test dashboard, and a Production-key send only in Production. Billing counts sends across all environments.

What counts as a billable event

Courier bills on send attempts, not deliveries. A billable event happens every time Courier processes a message toward a provider:
  • One unit per recipient, not per channel. Sending to one user across email, SMS, and push is a single unit.
  • Success does not matter. If Courier reaches a downstream provider, it bills.
  • Test messages are billable, as are undeliverable messages and messages blocked by preferences.
Channels listed as separate entries in a to array bill once per entry, so one person sent as three recipients bills three times. Send to a user_id, or one object holding every channel, so Courier consolidates them:

Workspace patterns

  • Single workspace (most teams). Production and Test cover most cases. Use environments, roles, and key scoping for control.
  • Separate workspaces per product. Keep each product’s notification stack isolated.
  • Separate workspaces for data residency. Use an EU workspace for customers who require EU data residency, and a US workspace for everyone else. See the .
Workspace creation is not supported in the EU region (eu-west-1), though an existing EU workspace and the tenants inside it work normally. has the details.

Workspace, environment, or tenant

Three separate isolation layers. They stack: a workspace contains environments, and within an environment you send to tenants. Reach for the one whose boundary you actually need. A workspace is a hard wall you rarely cross, an environment is the same product at a different stage of release, and a tenant is one of your customers inside a running environment. Picking a workspace where you needed a tenant means maintaining two of every template. For what tenants are used for, see .

Email open and click tracking

Enable open and click tracking for email in . The setting is global and applies to all environments. Hyperlinks and CTAs must use absolute URLs. A relative URL gets no tracking link attached and raises nothing, so the email sends and the clicks never appear in your metrics. You can still turn tracking off for one link. in Design Studio, open the action block or hyperlink settings and toggle tracking off.

FAQ

Use environments. Every workspace has isolated Production and Test environments, and you can add more, such as Staging. Separate workspaces are for billing, data residency, or fully separate products, not for staging one product.
A new workspace is not attached to an existing Enterprise contract or plan. If your contract covers multiple workspaces, contact your Courier account team or support to add the new workspace to your plan.
Use the Migrate assets flow and pick a destination workspace. Courier copies the template and its dependencies. Providers are per environment and are not copied.
Switching environments only changes your dashboard view. It does not affect live notifications or data in either environment.
Provider integrations are per environment and are not migrated. Configure the provider in the destination environment so the template has a channel.
Each environment is a separate partition. A Test-key send never appears in Production reads, and the reverse. Every send is attributed to the environment of the key that made it.