curl --request POST \
--url https://api.instantly.ai/api/v2/inbox-placement-tests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "My Inbox Placement Test",
"type": 1,
"sending_method": 1,
"email_subject": "My Email Subject",
"email_body": "Hi, this is my email body",
"emails": [
"john@doe.com"
]
}
'import requests
url = "https://api.instantly.ai/api/v2/inbox-placement-tests"
payload = {
"name": "My Inbox Placement Test",
"type": 1,
"sending_method": 1,
"email_subject": "My Email Subject",
"email_body": "Hi, this is my email body",
"emails": ["john@doe.com"]
}
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: 'My Inbox Placement Test',
type: 1,
sending_method: 1,
email_subject: 'My Email Subject',
email_body: 'Hi, this is my email body',
emails: ['john@doe.com']
})
};
fetch('https://api.instantly.ai/api/v2/inbox-placement-tests', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://api.instantly.ai/api/v2/inbox-placement-tests")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"My Inbox Placement Test\",\n \"type\": 1,\n \"sending_method\": 1,\n \"email_subject\": \"My Email Subject\",\n \"email_body\": \"Hi, this is my email body\",\n \"emails\": [\n \"john@doe.com\"\n ]\n}")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.instantly.ai/api/v2/inbox-placement-tests",
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' => 'My Inbox Placement Test',
'type' => 1,
'sending_method' => 1,
'email_subject' => 'My Email Subject',
'email_body' => 'Hi, this is my email body',
'emails' => [
'john@doe.com'
]
]),
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.instantly.ai/api/v2/inbox-placement-tests"
payload := strings.NewReader("{\n \"name\": \"My Inbox Placement Test\",\n \"type\": 1,\n \"sending_method\": 1,\n \"email_subject\": \"My Email Subject\",\n \"email_body\": \"Hi, this is my email body\",\n \"emails\": [\n \"john@doe.com\"\n ]\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))
}{
"id": "01a082d0-3312-70ab-a942-69713cb8bc94",
"organization_id": "01a082d0-3312-70ab-a942-69729cb03baf",
"name": "My Inbox Placement Test",
"type": 1,
"sending_method": 1,
"email_subject": "My Email Subject",
"email_body": "Hi, this is my email body",
"emails": [
"john@doe.com"
],
"recipients": [
"johndoe@instantly.ai"
],
"timestamp_created": "2026-09-08T20:57:57.778Z",
"delivery_mode": 1,
"description": "This is a test description",
"schedule": {
"days": {
"2": true,
"3": true
},
"timing": {
"from": "02:30"
},
"timezone": "America/Chihuahua"
},
"campaign_id": "01a082d0-3312-70ab-a942-6973435e4f59",
"test_code": "ptid_gi7SuJfi4pEDSJ3rdIbCW",
"tags": [
"01a082d0-3312-70ab-a942-697467349f54"
],
"text_only": true,
"recipients_labels": [
{
"region": "North America",
"sub_region": "US",
"type": "Professional",
"esp": "Google"
}
],
"timestamp_next_run": "2026-09-08T20:57:57.778Z",
"automations": [
{
"when": {
"condition": "placement_goes_below",
"condition_value": 80
},
"then": {
"webhook_url": "https://example.com/webhook",
"pause_sending_campaigns_for": 14,
"pause": true,
"enable_slow_ramp": true,
"disable_slow_ramp": true,
"add_tags": [
"01a082d0-3312-70ab-a942-6976338dcac0"
],
"remove_tags": [
"01a082d0-3312-70ab-a942-6977f8f68575"
]
}
}
],
"status": 1,
"not_sending_status": "daily_limits_hit"
}{
"statusCode": 400,
"error": "Bad Request",
"message": "body must have required property 'name'"
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Missing Authorization header"
}{
"statusCode": 402,
"error": "Payment Required",
"message": "Workspace does not have an active paid plan"
}{
"statusCode": 404,
"error": "Not Found",
"message": "Resource not found"
}{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded"
}Create inbox placement test
Requires one of the following scopes: inbox_placement_tests:create, inbox_placement_tests:all, all:create, all:all
curl --request POST \
--url https://api.instantly.ai/api/v2/inbox-placement-tests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "My Inbox Placement Test",
"type": 1,
"sending_method": 1,
"email_subject": "My Email Subject",
"email_body": "Hi, this is my email body",
"emails": [
"john@doe.com"
]
}
'import requests
url = "https://api.instantly.ai/api/v2/inbox-placement-tests"
payload = {
"name": "My Inbox Placement Test",
"type": 1,
"sending_method": 1,
"email_subject": "My Email Subject",
"email_body": "Hi, this is my email body",
"emails": ["john@doe.com"]
}
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: 'My Inbox Placement Test',
type: 1,
sending_method: 1,
email_subject: 'My Email Subject',
email_body: 'Hi, this is my email body',
emails: ['john@doe.com']
})
};
fetch('https://api.instantly.ai/api/v2/inbox-placement-tests', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://api.instantly.ai/api/v2/inbox-placement-tests")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"My Inbox Placement Test\",\n \"type\": 1,\n \"sending_method\": 1,\n \"email_subject\": \"My Email Subject\",\n \"email_body\": \"Hi, this is my email body\",\n \"emails\": [\n \"john@doe.com\"\n ]\n}")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.instantly.ai/api/v2/inbox-placement-tests",
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' => 'My Inbox Placement Test',
'type' => 1,
'sending_method' => 1,
'email_subject' => 'My Email Subject',
'email_body' => 'Hi, this is my email body',
'emails' => [
'john@doe.com'
]
]),
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.instantly.ai/api/v2/inbox-placement-tests"
payload := strings.NewReader("{\n \"name\": \"My Inbox Placement Test\",\n \"type\": 1,\n \"sending_method\": 1,\n \"email_subject\": \"My Email Subject\",\n \"email_body\": \"Hi, this is my email body\",\n \"emails\": [\n \"john@doe.com\"\n ]\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))
}{
"id": "01a082d0-3312-70ab-a942-69713cb8bc94",
"organization_id": "01a082d0-3312-70ab-a942-69729cb03baf",
"name": "My Inbox Placement Test",
"type": 1,
"sending_method": 1,
"email_subject": "My Email Subject",
"email_body": "Hi, this is my email body",
"emails": [
"john@doe.com"
],
"recipients": [
"johndoe@instantly.ai"
],
"timestamp_created": "2026-09-08T20:57:57.778Z",
"delivery_mode": 1,
"description": "This is a test description",
"schedule": {
"days": {
"2": true,
"3": true
},
"timing": {
"from": "02:30"
},
"timezone": "America/Chihuahua"
},
"campaign_id": "01a082d0-3312-70ab-a942-6973435e4f59",
"test_code": "ptid_gi7SuJfi4pEDSJ3rdIbCW",
"tags": [
"01a082d0-3312-70ab-a942-697467349f54"
],
"text_only": true,
"recipients_labels": [
{
"region": "North America",
"sub_region": "US",
"type": "Professional",
"esp": "Google"
}
],
"timestamp_next_run": "2026-09-08T20:57:57.778Z",
"automations": [
{
"when": {
"condition": "placement_goes_below",
"condition_value": 80
},
"then": {
"webhook_url": "https://example.com/webhook",
"pause_sending_campaigns_for": 14,
"pause": true,
"enable_slow_ramp": true,
"disable_slow_ramp": true,
"add_tags": [
"01a082d0-3312-70ab-a942-6976338dcac0"
],
"remove_tags": [
"01a082d0-3312-70ab-a942-6977f8f68575"
]
}
}
],
"status": 1,
"not_sending_status": "daily_limits_hit"
}{
"statusCode": 400,
"error": "Bad Request",
"message": "body must have required property 'name'"
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Missing Authorization header"
}{
"statusCode": 402,
"error": "Payment Required",
"message": "Workspace does not have an active paid plan"
}{
"statusCode": 404,
"error": "Not Found",
"message": "Resource not found"
}{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The Inbox Placement Test to create
The Inbox Placement Test to create
Name of the inbox placement test
"My Inbox Placement Test"
Whether the inbox placement test is a one-time test or an automated test
1, 2 1
Whether the inbox placement test will be sent from Instantly or from outside Instantly
1, 2 1
Email subject of the inbox placement test
"My Email Subject"
Email body of the inbox placement test
"Hi, this is my email body"
Emails to send the inbox placement test to
Whether to send emails one by one or all together
1, 2, null 1
Description of the inbox placement test
"This is a test description"
Specifies the date and time when the automated inbox placement tests will be sent.
Show child attributes
Show child attributes
{
"days": { "2": true, "3": true },
"timing": { "from": "02:30" },
"timezone": "America/Chihuahua"
}
Campaign ID
"01a082d0-3312-70ab-a942-6973435e4f59"
Code for identifying inbox placement tests sent from outside Instantly. Use ptid_ followed by letters, numbers, hyphens, or underscores. When creating a test, the ptid_ prefix is added automatically if omitted. The full code must be at most 50 characters.
^\s*$|^(ptid_)?(?!ptid_)[A-Za-z0-9_-]{1,45}$"ptid_abc_DEF-123"
List of tag IDs to use for sending emails
Disables open tracking
true
A list of email providers and their corresponding types to which emails will be sent. To retrieve the available options, use the GET: /inbox-placement-tests/email-service-provider-options endpoint
Show child attributes
Show child attributes
Timestamp when the inbox placement test will run next
"2026-09-08T20:57:57.778Z"
Optional automations to trigger based on conditions
Show child attributes
Show child attributes
Status of the inbox placement test
1, 2, 3 1
Why the inbox placement test is currently not sending. It will be an empty string if there are no issues.
daily_limits_hit, other "daily_limits_hit"
Run the test immediately after creation, as well as on the schedule
true
Response
The Inbox Placement Test
An inbox placement test
Unique identifier for the inbox placement test
"01a082d0-3312-70ab-a942-69713cb8bc94"
Organization ID
"01a082d0-3312-70ab-a942-69729cb03baf"
Name of the inbox placement test
"My Inbox Placement Test"
Whether the inbox placement test is a one-time test or an automated test
1, 2 1
Whether the inbox placement test will be sent from Instantly or from outside Instantly
1, 2 1
Email subject of the inbox placement test
"My Email Subject"
Email body of the inbox placement test
"Hi, this is my email body"
Emails to send the inbox placement test to
Timestamp when the inbox placement test was created
"2026-09-08T20:57:57.778Z"
Whether to send emails one by one or all together
1, 2, null 1
Description of the inbox placement test
"This is a test description"
Specifies the date and time when the automated inbox placement tests will be sent.
Show child attributes
Show child attributes
{
"days": { "2": true, "3": true },
"timing": { "from": "02:30" },
"timezone": "America/Chihuahua"
}
Campaign ID
"01a082d0-3312-70ab-a942-6973435e4f59"
Code for identifying inbox placement tests sent from outside Instantly. Use ptid_ followed by letters, numbers, hyphens, or underscores. When creating a test, the ptid_ prefix is added automatically if omitted. The full code must be at most 50 characters.
^ptid_(?!ptid_)[A-Za-z0-9_-]{1,45}$"ptid_gi7SuJfi4pEDSJ3rdIbCW"
List of tag IDs to use for sending emails
Disables open tracking
true
A list of email providers and their corresponding types to which emails will be sent. To retrieve the available options, use the GET: /inbox-placement-tests/email-service-provider-options endpoint
Show child attributes
Show child attributes
Timestamp when the inbox placement test will run next
"2026-09-08T20:57:57.778Z"
Optional automations to trigger based on conditions
Show child attributes
Show child attributes
Status of the inbox placement test
1, 2, 3 1
Why the inbox placement test is currently not sending. It will be an empty string if there are no issues.
daily_limits_hit, other "daily_limits_hit"