- 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
Publish a template's draft
Copies the draft into the next version, which sends use from then on. Emails already accepted keep the content they were rendered with. A draft without changes since the last publish returns that version, so retrying with the revision you reviewed is safe (without it, a retry could publish edits saved in between).
bearerAuthAuthorizationBearer <token>A secret API key from the dashboard: coss_live_… for production environments, coss_test_… for sandbox environments.
id*stringThe template's id or alias.
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
- …
revision?integerThe draft revision you read. When given, the request is refused (template_revision_mismatch) if the draft changed since.
1 <= valueThe published version.
application/json- response
- response
- …
object*"email_template_version""email_template_version"template_id*stringversion*|The version number; null for the draft.
revision*integerCounts the draft's saves. A published version keeps the revision it was published from.
default_locale*stringvariables*array<>sample_variables*contents*array<>problems*array<>Syntax errors and undeclared variables per locale and field, which keep a draft from being published. Always empty for published versions.
published_at*|date-timecreated_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.publish("etpl_01k7c8m4q2f3e9v6t5r1n0p8yz", { revision: 3,});{ "object": "email_template_version", "template_id": "etpl_01k7c8m4q2f3e9v6t5r1n0p8yz", "version": 2, "revision": 3, "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>", "text": null } ], "problems": [], "published_at": "2026-10-10T12:00:00.000Z", "created_at": "2026-10-10T12:00:00.000Z", "updated_at": "2026-10-10T12:00:00.000Z"}