Send a one-off test email for a campaign to a specific address.
curl --request POST \
--url https://api.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"testEmail": "<string>",
"subject": "<string>",
"bodyHtml": "<string>",
"senderProfileId": "<string>",
"replyTo": "<string>"
}
'import requests
url = "https://api.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send"
payload = {
"testEmail": "<string>",
"subject": "<string>",
"bodyHtml": "<string>",
"senderProfileId": "<string>",
"replyTo": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
testEmail: '<string>',
subject: '<string>',
bodyHtml: '<string>',
senderProfileId: '<string>',
replyTo: '<string>'
})
};
fetch('https://api.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send', 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.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send",
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([
'testEmail' => '<string>',
'subject' => '<string>',
'bodyHtml' => '<string>',
'senderProfileId' => '<string>',
'replyTo' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send"
payload := strings.NewReader("{\n \"testEmail\": \"<string>\",\n \"subject\": \"<string>\",\n \"bodyHtml\": \"<string>\",\n \"senderProfileId\": \"<string>\",\n \"replyTo\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"testEmail\": \"<string>\",\n \"subject\": \"<string>\",\n \"bodyHtml\": \"<string>\",\n \"senderProfileId\": \"<string>\",\n \"replyTo\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"testEmail\": \"<string>\",\n \"subject\": \"<string>\",\n \"bodyHtml\": \"<string>\",\n \"senderProfileId\": \"<string>\",\n \"replyTo\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Marketing Campaigns
Send a one-off test email for a campaign to a specific address.
Uses the campaign’s configured sender profile, subject, and body but does not affect the recipient list, counters, or send history.
POST
/
api
/
v0
/
marketing-campaigns
/
{campaignId}
/
test-send
Send a one-off test email for a campaign to a specific address.
curl --request POST \
--url https://api.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"testEmail": "<string>",
"subject": "<string>",
"bodyHtml": "<string>",
"senderProfileId": "<string>",
"replyTo": "<string>"
}
'import requests
url = "https://api.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send"
payload = {
"testEmail": "<string>",
"subject": "<string>",
"bodyHtml": "<string>",
"senderProfileId": "<string>",
"replyTo": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
testEmail: '<string>',
subject: '<string>',
bodyHtml: '<string>',
senderProfileId: '<string>',
replyTo: '<string>'
})
};
fetch('https://api.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send', 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.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send",
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([
'testEmail' => '<string>',
'subject' => '<string>',
'bodyHtml' => '<string>',
'senderProfileId' => '<string>',
'replyTo' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send"
payload := strings.NewReader("{\n \"testEmail\": \"<string>\",\n \"subject\": \"<string>\",\n \"bodyHtml\": \"<string>\",\n \"senderProfileId\": \"<string>\",\n \"replyTo\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"testEmail\": \"<string>\",\n \"subject\": \"<string>\",\n \"bodyHtml\": \"<string>\",\n \"senderProfileId\": \"<string>\",\n \"replyTo\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"testEmail\": \"<string>\",\n \"subject\": \"<string>\",\n \"bodyHtml\": \"<string>\",\n \"senderProfileId\": \"<string>\",\n \"replyTo\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
CompanyApiKeyBearerAuth & CompanyId
Company API key - scoped to a specific company. Generate from the Integrations page in your dashboard.
Path Parameters
Body
application/json
Test email target
Request body for sending a one-off test email
Email address to send the test to
Override subject to test with the current (unsaved) form value instead of the persisted campaign subject
Override HTML body to test with the current (unsaved) form value instead of the persisted campaign body
Override sender profile to test with the current (unsaved) form selection instead of the persisted campaign sender
Override reply-to address to test with the current (unsaved) form value

