curl --request POST \
--url https://api.getoutbox.ai/contacts/ \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"full_name": "<string>",
"email": "<string>",
"phone_number": "<string>",
"business_name": "<string>",
"notes": "<string>",
"tags": [
"<string>"
],
"is_dnd": true,
"lead_source": "<string>",
"custom_fields": {}
}
'import requests
url = "https://api.getoutbox.ai/contacts/"
payload = {
"full_name": "<string>",
"email": "<string>",
"phone_number": "<string>",
"business_name": "<string>",
"notes": "<string>",
"tags": ["<string>"],
"is_dnd": True,
"lead_source": "<string>",
"custom_fields": {}
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
full_name: '<string>',
email: '<string>',
phone_number: '<string>',
business_name: '<string>',
notes: '<string>',
tags: ['<string>'],
is_dnd: true,
lead_source: '<string>',
custom_fields: {}
})
};
fetch('https://api.getoutbox.ai/contacts/', 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.getoutbox.ai/contacts/",
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([
'full_name' => '<string>',
'email' => '<string>',
'phone_number' => '<string>',
'business_name' => '<string>',
'notes' => '<string>',
'tags' => [
'<string>'
],
'is_dnd' => true,
'lead_source' => '<string>',
'custom_fields' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.getoutbox.ai/contacts/"
payload := strings.NewReader("{\n \"full_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"business_name\": \"<string>\",\n \"notes\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"is_dnd\": true,\n \"lead_source\": \"<string>\",\n \"custom_fields\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<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.getoutbox.ai/contacts/")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"full_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"business_name\": \"<string>\",\n \"notes\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"is_dnd\": true,\n \"lead_source\": \"<string>\",\n \"custom_fields\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoutbox.ai/contacts/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"full_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"business_name\": \"<string>\",\n \"notes\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"is_dnd\": true,\n \"lead_source\": \"<string>\",\n \"custom_fields\": {}\n}"
response = http.request(request)
puts response.read_bodyCreate Contact
Create a new contact or update an existing one. If a contact already exists for the company by email or phone, that row is updated; otherwise a new contact is created. On upsert, new tags are merged with existing tags (deduplicated). Response body is empty (no JSON payload).
curl --request POST \
--url https://api.getoutbox.ai/contacts/ \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"full_name": "<string>",
"email": "<string>",
"phone_number": "<string>",
"business_name": "<string>",
"notes": "<string>",
"tags": [
"<string>"
],
"is_dnd": true,
"lead_source": "<string>",
"custom_fields": {}
}
'import requests
url = "https://api.getoutbox.ai/contacts/"
payload = {
"full_name": "<string>",
"email": "<string>",
"phone_number": "<string>",
"business_name": "<string>",
"notes": "<string>",
"tags": ["<string>"],
"is_dnd": True,
"lead_source": "<string>",
"custom_fields": {}
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
full_name: '<string>',
email: '<string>',
phone_number: '<string>',
business_name: '<string>',
notes: '<string>',
tags: ['<string>'],
is_dnd: true,
lead_source: '<string>',
custom_fields: {}
})
};
fetch('https://api.getoutbox.ai/contacts/', 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.getoutbox.ai/contacts/",
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([
'full_name' => '<string>',
'email' => '<string>',
'phone_number' => '<string>',
'business_name' => '<string>',
'notes' => '<string>',
'tags' => [
'<string>'
],
'is_dnd' => true,
'lead_source' => '<string>',
'custom_fields' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.getoutbox.ai/contacts/"
payload := strings.NewReader("{\n \"full_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"business_name\": \"<string>\",\n \"notes\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"is_dnd\": true,\n \"lead_source\": \"<string>\",\n \"custom_fields\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<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.getoutbox.ai/contacts/")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"full_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"business_name\": \"<string>\",\n \"notes\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"is_dnd\": true,\n \"lead_source\": \"<string>\",\n \"custom_fields\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoutbox.ai/contacts/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"full_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"business_name\": \"<string>\",\n \"notes\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"is_dnd\": true,\n \"lead_source\": \"<string>\",\n \"custom_fields\": {}\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
Company API Key
Body
Contact fields
Title-cased; split into first and last name
Lowercased; optional
Normalized using the company's country when present
On an existing contact, new tags are merged with existing tags (deduplicated)
Do-not-disturb; boolean or string variants accepted
Must be one of: manual, api, webhook, facebook, instagram, import. Invalid values are stored as manual.
Map of custom field name to value (string). Only keys that exist as company CustomField names are stored.
Show child attributes
Show child attributes
Response
Success. Empty response body (no JSON payload).

