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>",
"poll": {},
"subject": "<string>",
"bodyHtml": "<string>",
"fromName": "<string>",
"senderProfileId": "<string>",
"replyTo": "<string>"
}
'import requests
url = "https://api.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send"
payload = {
"testEmail": "<string>",
"poll": {},
"subject": "<string>",
"bodyHtml": "<string>",
"fromName": "<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>',
poll: {},
subject: '<string>',
bodyHtml: '<string>',
fromName: '<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>',
'poll' => [
],
'subject' => '<string>',
'bodyHtml' => '<string>',
'fromName' => '<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 \"poll\": {},\n \"subject\": \"<string>\",\n \"bodyHtml\": \"<string>\",\n \"fromName\": \"<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 \"poll\": {},\n \"subject\": \"<string>\",\n \"bodyHtml\": \"<string>\",\n \"fromName\": \"<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 \"poll\": {},\n \"subject\": \"<string>\",\n \"bodyHtml\": \"<string>\",\n \"fromName\": \"<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>"
}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.
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>",
"poll": {},
"subject": "<string>",
"bodyHtml": "<string>",
"fromName": "<string>",
"senderProfileId": "<string>",
"replyTo": "<string>"
}
'import requests
url = "https://api.parallellabs.app/api/v0/marketing-campaigns/{campaignId}/test-send"
payload = {
"testEmail": "<string>",
"poll": {},
"subject": "<string>",
"bodyHtml": "<string>",
"fromName": "<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>',
poll: {},
subject: '<string>',
bodyHtml: '<string>',
fromName: '<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>',
'poll' => [
],
'subject' => '<string>',
'bodyHtml' => '<string>',
'fromName' => '<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 \"poll\": {},\n \"subject\": \"<string>\",\n \"bodyHtml\": \"<string>\",\n \"fromName\": \"<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 \"poll\": {},\n \"subject\": \"<string>\",\n \"bodyHtml\": \"<string>\",\n \"fromName\": \"<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 \"poll\": {},\n \"subject\": \"<string>\",\n \"bodyHtml\": \"<string>\",\n \"fromName\": \"<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
Company API key - scoped to a specific company. Generate from the Integrations page in your dashboard.
Path Parameters
Body
Test email target
Request body for sending a one-off test email
Email address to send the test to
Override poll for a test email. Test answer links do not record votes.
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 display name for the test email
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

