Emails
Batch send emails
Sends up to 100 emails in a single API call. Each message in the batch is independent and can have a different recipient, subject, and body. Messages are queued atomically — either all are accepted or none are.
Requirements
- Permission:
emails:send. - Safe retries: give each item its own
idempotencyKey; items settle independently. - HTTP rate limit: 30 requests per 60 seconds per API key.
POST
/
v1
/
emails
/
batch
TypeScript
import { createApolloSignalApiClient } from "@apollo-deploy/signal-sdk";
const signal = createApolloSignalApiClient({ apiKey: "ap_signal_..." });
const result = await signal.emails.batchSendEmails(/* params */);
console.log(result);from apollo_signal import SignalClient
signal = SignalClient(api_key="ap_signal_...")
result = signal.emails.batchSendEmails(# params)
print(result)import signal "github.com/apollo-deploy/signal-sdk-go"
client := signal.NewClient("ap_signal_...")
result, err := client.Emails.BatchSendEmails(context.Background() /* params */)
if err != nil {
log.Fatal(err)
}
fmt.Println(result)import com.apollodeploy.signal.SignalClient;
SignalClient signal = new SignalClient("ap_signal_...");
var result = signal.emails().batchSendEmails(/* params */);
System.out.println(result);import com.apollodeploy.signal.SignalClient
val signal = SignalClient("ap_signal_...")
val result = signal.emails.batchSendEmails(/* params */)
println(result)require "apollo_signal"
signal = ApolloSignal::Client.new(api_key: "ap_signal_...")
result = signal.emails.batchSendEmails(# params)
puts resultuse ApolloSignal\SignalClient;
$signal = new SignalClient("ap_signal_...");
$result = $signal->emails->batchSendEmails(/* params */);
var_dump($result);use apollo_signal::SignalClient;
let signal = SignalClient::new("ap_signal_...");
let result = signal.emails.batchSendEmails(/* params */).await?;
println!("{:?}", result);using ApolloSignal;
var signal = new SignalClient("ap_signal_...");
var result = await signal.Emails.BatchSendEmailsAsync(/* params */);
Console.WriteLine(result);curl --request POST \
--url https://api.signal.apollodeploy.com/v1/emails/batch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"from": "<string>",
"subject": "<string>",
"to": [
"<string>"
],
"attachments": [
{
"content": "<string>",
"contentType": "<string>",
"filename": "<string>",
"contentId": "<string>",
"disposition": "attachment"
}
],
"bcc": [
"<string>"
],
"cc": [
"<string>"
],
"html": "<string>",
"idempotencyKey": "<string>",
"metadata": {},
"replyTo": "<string>",
"scheduledAt": "<string>",
"sendTimeCategory": "transactional",
"tags": {},
"testMode": false,
"text": "<string>",
"trackingSettings": {
"clickTracking": true,
"openTracking": true,
"readEngagement": true,
"unsubscribeTracking": true
}
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
items: [
{
from: '<string>',
subject: '<string>',
to: ['<string>'],
attachments: [
{
content: '<string>',
contentType: '<string>',
filename: '<string>',
contentId: '<string>',
disposition: 'attachment'
}
],
bcc: ['<string>'],
cc: ['<string>'],
html: '<string>',
idempotencyKey: '<string>',
metadata: {},
replyTo: '<string>',
scheduledAt: '<string>',
sendTimeCategory: 'transactional',
tags: {},
testMode: false,
text: '<string>',
trackingSettings: {
clickTracking: true,
openTracking: true,
readEngagement: true,
unsubscribeTracking: true
}
}
]
})
};
fetch('https://api.signal.apollodeploy.com/v1/emails/batch', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"results": [
{
"index": 123,
"createdAt": "<string>",
"error": "<string>",
"id": "<string>",
"messageId": "<string>",
"scheduledAt": "<string>",
"status": "<string>"
}
]
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"errors": [
{
"detail": "<string>",
"pointer": "<string>"
}
],
"instance": "<string>",
"requestId": "<string>"
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"errors": [
{
"detail": "<string>",
"pointer": "<string>"
}
],
"instance": "<string>",
"requestId": "<string>"
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"errors": [
{
"detail": "<string>",
"pointer": "<string>"
}
],
"instance": "<string>",
"requestId": "<string>"
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"errors": [
{
"detail": "<string>",
"pointer": "<string>"
}
],
"instance": "<string>",
"requestId": "<string>"
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"errors": [
{
"detail": "<string>",
"pointer": "<string>"
}
],
"instance": "<string>",
"requestId": "<string>"
}Authorizations
Project-bound Apollo Signal API key. Keys begin with ap_signal_ and must carry the permission shown on the operation.
Body
application/json
Array of email messages to send. Maximum 100 messages per batch.
Up to 100 independent email send requests.
Email requests processed independently and returned in input order.
Maximum array length:
100Show child attributes
Show child attributes
Response
All messages accepted. Returns an ID for each message in order.
Show child attributes
Show child attributes
Was this page helpful?
⌘I
TypeScript
import { createApolloSignalApiClient } from "@apollo-deploy/signal-sdk";
const signal = createApolloSignalApiClient({ apiKey: "ap_signal_..." });
const result = await signal.emails.batchSendEmails(/* params */);
console.log(result);from apollo_signal import SignalClient
signal = SignalClient(api_key="ap_signal_...")
result = signal.emails.batchSendEmails(# params)
print(result)import signal "github.com/apollo-deploy/signal-sdk-go"
client := signal.NewClient("ap_signal_...")
result, err := client.Emails.BatchSendEmails(context.Background() /* params */)
if err != nil {
log.Fatal(err)
}
fmt.Println(result)import com.apollodeploy.signal.SignalClient;
SignalClient signal = new SignalClient("ap_signal_...");
var result = signal.emails().batchSendEmails(/* params */);
System.out.println(result);import com.apollodeploy.signal.SignalClient
val signal = SignalClient("ap_signal_...")
val result = signal.emails.batchSendEmails(/* params */)
println(result)require "apollo_signal"
signal = ApolloSignal::Client.new(api_key: "ap_signal_...")
result = signal.emails.batchSendEmails(# params)
puts resultuse ApolloSignal\SignalClient;
$signal = new SignalClient("ap_signal_...");
$result = $signal->emails->batchSendEmails(/* params */);
var_dump($result);use apollo_signal::SignalClient;
let signal = SignalClient::new("ap_signal_...");
let result = signal.emails.batchSendEmails(/* params */).await?;
println!("{:?}", result);using ApolloSignal;
var signal = new SignalClient("ap_signal_...");
var result = await signal.Emails.BatchSendEmailsAsync(/* params */);
Console.WriteLine(result);curl --request POST \
--url https://api.signal.apollodeploy.com/v1/emails/batch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"from": "<string>",
"subject": "<string>",
"to": [
"<string>"
],
"attachments": [
{
"content": "<string>",
"contentType": "<string>",
"filename": "<string>",
"contentId": "<string>",
"disposition": "attachment"
}
],
"bcc": [
"<string>"
],
"cc": [
"<string>"
],
"html": "<string>",
"idempotencyKey": "<string>",
"metadata": {},
"replyTo": "<string>",
"scheduledAt": "<string>",
"sendTimeCategory": "transactional",
"tags": {},
"testMode": false,
"text": "<string>",
"trackingSettings": {
"clickTracking": true,
"openTracking": true,
"readEngagement": true,
"unsubscribeTracking": true
}
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
items: [
{
from: '<string>',
subject: '<string>',
to: ['<string>'],
attachments: [
{
content: '<string>',
contentType: '<string>',
filename: '<string>',
contentId: '<string>',
disposition: 'attachment'
}
],
bcc: ['<string>'],
cc: ['<string>'],
html: '<string>',
idempotencyKey: '<string>',
metadata: {},
replyTo: '<string>',
scheduledAt: '<string>',
sendTimeCategory: 'transactional',
tags: {},
testMode: false,
text: '<string>',
trackingSettings: {
clickTracking: true,
openTracking: true,
readEngagement: true,
unsubscribeTracking: true
}
}
]
})
};
fetch('https://api.signal.apollodeploy.com/v1/emails/batch', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"results": [
{
"index": 123,
"createdAt": "<string>",
"error": "<string>",
"id": "<string>",
"messageId": "<string>",
"scheduledAt": "<string>",
"status": "<string>"
}
]
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"errors": [
{
"detail": "<string>",
"pointer": "<string>"
}
],
"instance": "<string>",
"requestId": "<string>"
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"errors": [
{
"detail": "<string>",
"pointer": "<string>"
}
],
"instance": "<string>",
"requestId": "<string>"
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"errors": [
{
"detail": "<string>",
"pointer": "<string>"
}
],
"instance": "<string>",
"requestId": "<string>"
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"errors": [
{
"detail": "<string>",
"pointer": "<string>"
}
],
"instance": "<string>",
"requestId": "<string>"
}{
"code": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"errors": [
{
"detail": "<string>",
"pointer": "<string>"
}
],
"instance": "<string>",
"requestId": "<string>"
}