Access & visibility
Allow newsletters.SaveNewsletterDraft on your API key.
Acting member required. Send Brigg-Act-As with an approved member account ID. The key supplies permissions; the member selects whose data is used.
The selected member must be active and approved by the credential. This selects whose private data is used; the credential supplies permissions. Private ownership and project boundaries still apply.
Request fields
Send a JSON object with the following fields. Required fields must be included; omit optional fields you do not need.
newsletter_idstringRequiredRead the issue and use its newsletter_id when available. This is the content identity, not the issue or schedule ID. newsletters.GetNewsletterIssue.
At least 1 character.
subjectstring or nullOptionalSubject line shown to recipients.
preview_textstring or nullOptionalThe inbox preheader.
audienceobject or nullOptionalSelected recipients or audience definition for this newsletter.
Nested fields
Variant 1
modestringRequiredall selects all contacts; tags selects contacts carrying at least one selected tag; manual uses only the supplied email addresses.
Allowed: "all", "tags", "manual".
tagsarray of stringRequiredStable contact tag keys. Used only in tags mode.
extraarray of stringRequiredExplicit additional email addresses. In manual mode these are the entire audience.
Preparation, review and sending are separate
A schedule produces issues. An issue has its own issue_id; its generated content has a separate newsletter_id. Read Get newsletter issue until that content and its review_url are available. A schedule start or run response does not mean preparation has finished.
Public callers use manual approval. A person reviews and sends the issue in Brigg; preparing content or saving a draft does not send it to the audience. Send newsletter test email sends a test to the acting member, not the subscriber list.
A schedule's start_at is Unix milliseconds and its timezone is an IANA zone used for recurrence. run_now creates an extra first issue without consuming the first scheduled slot. Pause a schedule with paused: true when you want to stop future preparation while retaining the schedule.
Response
Returns 200 OK with a JSON body.
okbooleanRequiredWhether the action completed successfully.
Errors & retries
Set BRIGG_REQUEST_ID once for each logical action. The samples send it as Idempotency-Key. Reuse the same value and body on retries, including after a timeout; a missing response does not prove the action failed.
For rate limits, follow the server’s retry guidance and back off. See HTTP errors and safe retries and limits.
| HTTP status | Code | What to do |
|---|---|---|
| 400 | invalid_json |
Send a JSON object with Content-Type: application/json. |
| 400 | invalid_input |
Check the request fields and types. Supply a stable Idempotency-Key containing 1–200 characters. |
| 401 | invalid_key |
The workspace API key is missing, invalid or revoked. |
| 403 | forbidden |
Check the key’s operation and resource grants. Supply Brigg-Act-As with a member authorized by the key’s delegation grant. The selected member must be active and approved by the credential. This selects whose private data is used; the credential supplies permissions. Private ownership and project boundaries still apply. |
| 404 | not_found |
The requested operation or resource is not available to this credential. |
| 429 | rate_limited |
Wait for Retry-After before retrying. Reuse the original Idempotency-Key. |
Next steps
JSON schemas
Use the complete schemas for validation or client generation.
Full request JSON schema
{
"type": "object",
"properties": {
"newsletter_id": {
"type": "string",
"minLength": 1,
"description": "Read the issue and use its newsletter_id when available. This is the content identity, not the issue or schedule ID. [newsletters.GetNewsletterIssue](/reference/newsletters/GetNewsletterIssue)."
},
"subject": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "Subject line shown to recipients."
},
"preview_text": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "The inbox preheader."
},
"audience": {
"anyOf": [
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"all",
"tags",
"manual"
],
"description": "all selects all contacts; tags selects contacts carrying at least one selected tag; manual uses only the supplied email addresses."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Stable contact tag keys. Used only in tags mode."
},
"extra": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$"
},
"description": "Explicit additional email addresses. In manual mode these are the entire audience."
}
},
"required": [
"mode",
"tags",
"extra"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
},
{
"type": "null"
}
],
"description": "Selected recipients or audience definition for this newsletter."
}
},
"required": [
"newsletter_id"
],
"additionalProperties": false,
"examples": [
{
"newsletter_id": "e_example"
}
]
}Full response JSON schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "Whether the action completed successfully."
}
},
"required": [
"ok"
],
"additionalProperties": false,
"examples": [
{
"ok": true
}
]
}