curl --request POST \
--url https://api.example.com/api/v1/sender-profiles/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"profile_name": "<string>",
"sender_data": {},
"description": "<string>",
"is_default": false,
"send_mechanism": "bavimail",
"connected_mailbox_account": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/sender-profiles/"
payload = {
"profile_name": "<string>",
"sender_data": {},
"description": "<string>",
"is_default": False,
"send_mechanism": "bavimail",
"connected_mailbox_account": "<string>"
}
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({
profile_name: '<string>',
sender_data: {},
description: '<string>',
is_default: false,
send_mechanism: 'bavimail',
connected_mailbox_account: '<string>'
})
};
fetch('https://api.example.com/api/v1/sender-profiles/', 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.example.com/api/v1/sender-profiles/",
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([
'profile_name' => '<string>',
'sender_data' => [
],
'description' => '<string>',
'is_default' => false,
'send_mechanism' => 'bavimail',
'connected_mailbox_account' => '<string>'
]),
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.example.com/api/v1/sender-profiles/"
payload := strings.NewReader("{\n \"profile_name\": \"<string>\",\n \"sender_data\": {},\n \"description\": \"<string>\",\n \"is_default\": false,\n \"send_mechanism\": \"bavimail\",\n \"connected_mailbox_account\": \"<string>\"\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))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/sender-profiles/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"profile_name\": \"<string>\",\n \"sender_data\": {},\n \"description\": \"<string>\",\n \"is_default\": false,\n \"send_mechanism\": \"bavimail\",\n \"connected_mailbox_account\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/sender-profiles/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"profile_name\": \"<string>\",\n \"sender_data\": {},\n \"description\": \"<string>\",\n \"is_default\": false,\n \"send_mechanism\": \"bavimail\",\n \"connected_mailbox_account\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"user_id": "<string>",
"profile_name": "<string>",
"sender_data": {
"data": {}
},
"id": "<string>",
"description": "<string>",
"prompt_names": [
"<string>"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"usage_count": 0,
"is_default": false,
"send_mechanism": "bavimail",
"connected_mailbox_account": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Create Sender Profile
Create a new sender profile.
Creates a new sender profile for the authenticated user. The profile will be scoped to the user and can only be accessed by them.
The sender-profile creation limit is determined by the user’s plan.
The sender_data can contain ANY fields - there is no predefined schema. Common fields might include full_name, company, role, etc., but you can include any fields your use case requires.
Args: profile_data: The sender profile data current_user: Authenticated user information settings: Application settings
Returns: The created sender profile with generated ID
Raises: HTTPException: If profile creation fails or limit exceeded
curl --request POST \
--url https://api.example.com/api/v1/sender-profiles/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"profile_name": "<string>",
"sender_data": {},
"description": "<string>",
"is_default": false,
"send_mechanism": "bavimail",
"connected_mailbox_account": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/sender-profiles/"
payload = {
"profile_name": "<string>",
"sender_data": {},
"description": "<string>",
"is_default": False,
"send_mechanism": "bavimail",
"connected_mailbox_account": "<string>"
}
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({
profile_name: '<string>',
sender_data: {},
description: '<string>',
is_default: false,
send_mechanism: 'bavimail',
connected_mailbox_account: '<string>'
})
};
fetch('https://api.example.com/api/v1/sender-profiles/', 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.example.com/api/v1/sender-profiles/",
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([
'profile_name' => '<string>',
'sender_data' => [
],
'description' => '<string>',
'is_default' => false,
'send_mechanism' => 'bavimail',
'connected_mailbox_account' => '<string>'
]),
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.example.com/api/v1/sender-profiles/"
payload := strings.NewReader("{\n \"profile_name\": \"<string>\",\n \"sender_data\": {},\n \"description\": \"<string>\",\n \"is_default\": false,\n \"send_mechanism\": \"bavimail\",\n \"connected_mailbox_account\": \"<string>\"\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))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/sender-profiles/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"profile_name\": \"<string>\",\n \"sender_data\": {},\n \"description\": \"<string>\",\n \"is_default\": false,\n \"send_mechanism\": \"bavimail\",\n \"connected_mailbox_account\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/sender-profiles/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"profile_name\": \"<string>\",\n \"sender_data\": {},\n \"description\": \"<string>\",\n \"is_default\": false,\n \"send_mechanism\": \"bavimail\",\n \"connected_mailbox_account\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"user_id": "<string>",
"profile_name": "<string>",
"sender_data": {
"data": {}
},
"id": "<string>",
"description": "<string>",
"prompt_names": [
"<string>"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"usage_count": 0,
"is_default": false,
"send_mechanism": "bavimail",
"connected_mailbox_account": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Request model for creating a sender profile.
User-friendly name for this profile
1 - 100The sender data as a dictionary with any fields
Optional description of when/how to use this profile
500Whether this should be the default profile
Outbound send mechanism for this sender identity.
bavimail, gmail, outlook Connected mailbox account key, e.g. the Gmail address.
Response
Successful Response
Sender profile model for storing reusable sender configurations.
This model stores a named profile containing DynamicSenderData, which can have ANY arbitrary fields. There is no predefined schema for the sender data.
Examples of valid sender data:
- {"full_name": "John", "company": "TechCorp", "role": "Sales"}
- {"sender_name": "Jane", "brand": "AI Solutions", "linkedin": "jane-doe"}
- {"name": "Bob", "agency": "Marketing Pro", "phone": "+1234", "timezone": "EST"}
- Any other combination of fields the user needs
User ID who owns this profile
User-friendly name for this profile (e.g., 'Sales Team Profile', 'Personal Brand')
1 - 100The actual sender data with arbitrary fields
Show child attributes
Show child attributes
Unique profile identifier
Optional description of when/how to use this profile
500Names of saved prompts on this profile (from sender_data.prompts[].name). Body/text intentionally omitted from list/search responses to keep payloads light and avoid leaking long prompt bodies into the campaign launcher.
Profile creation timestamp
Last update timestamp
Number of times this profile has been used
Whether this is the default profile
Outbound send mechanism bound to this sender identity.
bavimail, gmail, outlook Connected mailbox account key, e.g. the Gmail address.