curl --request POST \
--url https://api.tented.ai/v1/email-blasts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>"
}
'import requests
url = "https://api.tented.ai/v1/email-blasts"
payload = {
"name": "<string>",
"description": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', description: '<string>'})
};
fetch('https://api.tented.ai/v1/email-blasts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tented.ai/v1/email-blasts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tented.ai/v1/email-blasts"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.tented.ai/v1/email-blasts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tented.ai/v1/email-blasts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"blast_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "<string>",
"name": "<string>",
"status": "draft",
"description": "<string>",
"audience_list_id": "<string>",
"audience_source": "<string>",
"audience": {
"list_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source": "<string>",
"name": "<string>",
"kind": "<string>",
"member_count": 123
},
"email_id": "<string>",
"email_source": "<string>",
"email": {
"email_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source": "<string>",
"name": "<string>",
"status": "<string>",
"subject": "<string>",
"current_version": 123,
"approved_version": 123
},
"operational": true,
"scheduled_at": "2023-11-07T05:31:56Z",
"approved_at": "2023-11-07T05:31:56Z",
"approved_email_version": 123,
"sent_at": "2023-11-07T05:31:56Z",
"send_mode": "<string>",
"details": {
"blast_recipient_count": 123,
"blast_qualified_count": 123,
"blast_sent_count": 123,
"blast_failed_count": 123,
"blast_blocked_count": 123,
"blast_audience_truncated": true,
"blast_delivered_count": 123,
"blast_opened_count": 123,
"blast_clicked_count": 123,
"blast_bounced_count": 123,
"blast_spam_count": 123,
"blast_unsubscribed_count": 123
},
"approval_readiness": {
"ready": true,
"missing": [
"<string>"
],
"warnings": [
"<string>"
]
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "<string>",
"error_code": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"limit": 123,
"current": 123
}{
"error": "<string>",
"error_code": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"limit": 123,
"current": 123
}Create a blast
Create a draft blast. Attach an audience and an email, then schedule it or send it immediately.
curl --request POST \
--url https://api.tented.ai/v1/email-blasts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>"
}
'import requests
url = "https://api.tented.ai/v1/email-blasts"
payload = {
"name": "<string>",
"description": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', description: '<string>'})
};
fetch('https://api.tented.ai/v1/email-blasts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tented.ai/v1/email-blasts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tented.ai/v1/email-blasts"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.tented.ai/v1/email-blasts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tented.ai/v1/email-blasts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"blast_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "<string>",
"name": "<string>",
"status": "draft",
"description": "<string>",
"audience_list_id": "<string>",
"audience_source": "<string>",
"audience": {
"list_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source": "<string>",
"name": "<string>",
"kind": "<string>",
"member_count": 123
},
"email_id": "<string>",
"email_source": "<string>",
"email": {
"email_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source": "<string>",
"name": "<string>",
"status": "<string>",
"subject": "<string>",
"current_version": 123,
"approved_version": 123
},
"operational": true,
"scheduled_at": "2023-11-07T05:31:56Z",
"approved_at": "2023-11-07T05:31:56Z",
"approved_email_version": 123,
"sent_at": "2023-11-07T05:31:56Z",
"send_mode": "<string>",
"details": {
"blast_recipient_count": 123,
"blast_qualified_count": 123,
"blast_sent_count": 123,
"blast_failed_count": 123,
"blast_blocked_count": 123,
"blast_audience_truncated": true,
"blast_delivered_count": 123,
"blast_opened_count": 123,
"blast_clicked_count": 123,
"blast_bounced_count": 123,
"blast_spam_count": 123,
"blast_unsubscribed_count": 123
},
"approval_readiness": {
"ready": true,
"missing": [
"<string>"
],
"warnings": [
"<string>"
]
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "<string>",
"error_code": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"limit": 123,
"current": 123
}{
"error": "<string>",
"error_code": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"limit": 123,
"current": 123
}Authorizations
Workspace API key, e.g. Authorization: Bearer tented_.... Create keys in Workspace Settings → API Keys.
Body
Response
Draft blast created.
An email blast. approval_readiness is included only while the blast is a draft.
Blast ID.
Always email_blast.
Blast name.
Lifecycle state.
draft, scheduled, sending, sent, failed, cancelled, archived Description.
List backing the audience.
existing or inline.
Attached audience, or null when not set.
Show child attributes
Show child attributes
Email attached to the blast.
existing or inline.
Attached email summary, or null when not set.
Show child attributes
Show child attributes
True for operational/transactional sends: unsubscribed contacts are not suppressed and the unsubscribe footer is skipped.
Scheduled send time (UTC).
When the attached email was approved for this blast.
Email version locked in for the send.
When the send completed.
scheduled or send_now.
Send and engagement counters.
Show child attributes
Show child attributes
Readiness summary included on draft blasts and on campaign_not_ready errors.
Show child attributes
Show child attributes
Creation time.
Last update.