Cancel a batch
Cancel every still-scheduled email in the batch. Already-sent or already-canceled members are skipped. An unknown or empty batch is a no-op (canceled_count 0), not a 404.
curl --request DELETE \
--url https://api.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id}', 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.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "scheduled_email.batch",
"batch_id": "campaign-x",
"canceled_count": 40
}{
"name": "missing_user_agent",
"message": "A User-Agent header is required.",
"statusCode": 400
}{
"name": "invalid_api_key",
"message": "API key is invalid.",
"statusCode": 403
}{
"name": "validation_error",
"message": "<string>",
"statusCode": 123
}{
"name": "validation_error",
"message": "<string>",
"statusCode": 123
}{
"name": "invalid_idempotent_request",
"message": "This Idempotency-Key was already used with a different payload.",
"statusCode": 409
}{
"name": "validation_error",
"message": "<string>",
"statusCode": 123
}{
"name": "rate_limit_exceeded",
"message": "Too many requests. Please slow down.",
"statusCode": 429
}{
"name": "application_error",
"message": "An unexpected error occurred.",
"statusCode": 500
}Authorizations
An API key created in the dashboard, sent as Authorization: Bearer mk_....
Headers
A unique key making this write retry-safe. A repeat request with the same key and a byte-identical body returns the original response instead of executing again (24-hour window). Max 256 characters. See Idempotency.
256Path Parameters
The batch grouping label shared by the scheduled emails to act on.
64Response
The batch cancel result.
The result of a batch cancel or reschedule. canceled_count is present for a cancel; rescheduled_count and scheduled_at for a reschedule.
Always scheduled_email.batch.
"scheduled_email.batch"The batch that was acted on.
Number of emails canceled (batch cancel only).
Number of emails rescheduled (batch reschedule only).
The new send time applied to the batch (batch reschedule only), in UTC.
curl --request DELETE \
--url https://api.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id}', 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.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mailkube.com/mta/v1/scheduled-emails/batches/{batch_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "scheduled_email.batch",
"batch_id": "campaign-x",
"canceled_count": 40
}{
"name": "missing_user_agent",
"message": "A User-Agent header is required.",
"statusCode": 400
}{
"name": "invalid_api_key",
"message": "API key is invalid.",
"statusCode": 403
}{
"name": "validation_error",
"message": "<string>",
"statusCode": 123
}{
"name": "validation_error",
"message": "<string>",
"statusCode": 123
}{
"name": "invalid_idempotent_request",
"message": "This Idempotency-Key was already used with a different payload.",
"statusCode": 409
}{
"name": "validation_error",
"message": "<string>",
"statusCode": 123
}{
"name": "rate_limit_exceeded",
"message": "Too many requests. Please slow down.",
"statusCode": 429
}{
"name": "application_error",
"message": "An unexpected error occurred.",
"statusCode": 500
}