DeckleDocs
Dashboard

Concepts

Projects & environments

A project is an isolated workspace, and every project has a Test and a Live environment. Which one you send from is decided entirely by the key you use.

Everything in Deckle lives inside a project, and every project ships with two environments. You don't configure environments separately — you pick one by using a sk_test_ or sk_live_ key, which keeps testing safely away from real inboxes.

Projects#

A project is a self-contained workspace. Each one owns its own data and never shares it with another project, so you can keep separate apps, brands, or clients fully isolated under a single account.

Everything below is scoped to the project you're in:

  • Contacts — your audience, keyed by email, with events and activity timelines.
  • Templates — the React Email templates you send and brand.
  • Domains — the verified domains you're allowed to send from.
  • API keys — the secret keys that authenticate every request.
  • Events — the named actions that power segments and automations.

Because keys are scoped to a project, a key from one project can never read or send on behalf of another. Create and switch between projects with the project switcher in the dashboard top bar.

Test and Live#

Every project has two environments, Test and Live. You don't select an environment in a settings page — you select it by choosing which key you send with. A sk_test_ key targets the Test environment; a sk_live_ key targets Live.

import { Deckle } from "@deckle/sdk";

// A test key sends into the Test environment.
const test = new Deckle("sk_test_...");
await test.emails.send({
  from: "Acme <hello@acme.com>",
  to: "success@simulator.amazonses.com",
  subject: "Sandbox check",
  html: "<p>This never reaches a real inbox.</p>",
});

// A live key sends into the Live environment.
const live = new Deckle("sk_live_...");
await live.emails.send({
  from: "Acme <hello@acme.com>",
  to: "jane@example.com",
  subject: "Welcome to Acme 👋",
  html: "<h1>Hey Jane</h1>",
});

In the dashboard, the Test/Live toggle sits in the top bar. It filters what you see — emails, logs, and reports — to the environment you're viewing, so a test send never clutters your live analytics.

What Test can do#

The Test environment is a sandbox. A sk_test_ key can only deliver to two kinds of recipient:

  • AWS SES simulator mailboxes, such as success@simulator.amazonses.com, bounce@simulator.amazonses.com, and complaint@simulator.amazonses.com.
  • Addresses on the project's own verified domains.

This lets you exercise the full pipeline — templates, variables, webhooks, and bounce or complaint handling — without any risk of reaching a real person.

Test keys are sandboxed

A sk_test_ key can never send to arbitrary real inboxes. It reaches only the SES simulator mailboxes or your project's verified domains. Any other recipient is rejected. To email real people — and to run campaign or broadcast sends — you must use a sk_live_ key.

What requires Live#

ActionTestLive
Transactional send to the SES simulatorYesYes
Send to your own verified domainYesYes
Send to arbitrary real inboxesNoYes
Campaign / broadcast sendNoYes

Switching projects#

Use the project switcher in the dashboard top bar to move between projects or create a new one. Switching changes everything the dashboard shows — contacts, templates, domains, keys, and logs all belong to the active project.

Over the API there's nothing to switch: the project (and its environment) is determined by the key on the request. Point your app at a different project by swapping the key, typically through an environment variable such as DECKLE_API_KEY.

One key per environment per deploy

Give each deploy its own key: a sk_test_ key in local and staging, a sk_live_ key in production. Store both in API key secrets, never in source control.

Next steps#