- Create an email template POST
- Delete an email template DELETE
- Retrieve a template's draft GET
- Retrieve a template version GET
- Retrieve an email template GET
- List a template's versions GET
- List email templates GET
- Publish a template's draft POST
- Restore a template version POST
- Update a template's draft PUT
- Update an email template PATCH
- Check an email address POST
- Check an IP address POST
- Check a rate limit POST
- Classify content POST
- Assess an event POST
- Report an assessment's outcome POST
- Create a rate limit bucket POST
- Add an allow or block list entry POST
- Create a rule POST
- Delete a rate limit bucket DELETE
- Remove a list entry DELETE
- Delete a rule DELETE
- Forget a user DELETE
- Retrieve an assessment GET
- Retrieve the calibration GET
- Retrieve a rate limit bucket GET
- Retrieve a list entry GET
- Retrieve a rule GET
- Retrieve the risk settings GET
- List assessments GET
- List rate limit buckets GET
- List allow and block list entries GET
- List rules GET
- Update a rate limit bucket PATCH
- Update a rule PATCH
- Update the risk settings PATCH
Create an email template
Creates a template with a draft holding its variables and a subject, HTML and text per locale. Sends use it once its draft is published. Not idempotent: retrying after a lost response can create a second template (unless it has an alias). Templates belong to the API key's own environment: a coss_test_… key only ever sees sandbox ones. Give a template the same alias in every environment to send it by that name.
bearerAuthAuthorizationBearer <token>A secret API key from the dashboard: coss_live_… for production environments, coss_test_… for sandbox environments.
Coss-Version?"2026-10-10"The API version (a date) to use for this request. Defaults to your organization's version, pinned to the latest one when it first used the API and upgraded from the dashboard. The SDK always sends the version it was built for.
"2026-10-10"application/json- body
- body
- …
Creates the template and its draft. Publish the draft to send it.
name*stringShown in the dashboard.
1 <= length <= 100alias?stringA name to send the template by instead of its id, e.g. welcome: the same alias can be used in every environment.
^[a-z0-9][a-z0-9_-]{0,63}$description?stringlength <= 500default_locale?stringThe locale sends fall back to when they ask for none, or for one without content. Defaults to the first entry of contents (or "en").
length <= 35variables?array<>The variables the template uses, with their types.
items <= 50sample_variables?Example values for previews and test sends in the dashboard.
contents?array<>The subject, HTML and text per locale.
items <= 30The template.
application/json- response
- response
- …
object*"email_template""email_template"id*stringalias*string|nullname*stringdescription*string|nullpublished_version*|The version sends use; null until the draft is first published.
published_at*|date-timehas_unpublished_changes*booleanWhether the draft was changed since it was last published.
created_at*stringdate-timeupdated_at*stringdate-timeimport { Coss } from "coss";const coss = new Coss({ apiKey: process.env.COSS_API_KEY, baseUrl: "https://api.coss.com",});const { data, error } = await coss.email.templates.create({ name: "Welcome", alias: "welcome", default_locale: "en", variables: [ { name: "first_name", type: "string", required: true, }, ], sample_variables: { first_name: "Ada", }, contents: [ { locale: "en", subject: "Welcome, {{first_name}}", html: "<p>Hi {{first_name}}, thanks for signing up!</p>", }, { locale: "de", subject: "Willkommen, {{first_name}}", html: "<p>Hallo {{first_name}}, danke für deine Anmeldung!</p>", }, ],});{ "object": "email_template", "id": "etpl_01k7c8m4q2f3e9v6t5r1n0p8yz", "alias": "welcome", "name": "Welcome", "description": "Sent after sign-up.", "published_version": 2, "published_at": "2026-10-10T12:00:00.000Z", "has_unpublished_changes": false, "created_at": "2026-10-01T09:00:00.000Z", "updated_at": "2026-10-10T12:00:00.000Z"}