curl --request POST \
--url https://api.voiceaiwrapper.app/api/v2/clients/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"client_users": [
{
"email": "user@client.com",
"password": "SecureP@ss123"
}
],
"client_details": {
"name": "Acme Corp",
"email": "acme@example.com"
},
"client_asset_group": {
"tenant_voice_provider_id": "VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=",
"name": "Default Group"
},
"billing_provider": {
"type": "STRIPE",
"selected_product": {
"product_id": "...",
"price_ids": [
"..."
]
}
},
"client_access": {
"assistant": "view_only",
"campaign": "view_and_add"
},
"assigned_resources": {
"assistant": [
"asst_abc123"
],
"vapi_workflow": [],
"vapi_squad": [],
"phone_number": [],
"phone_number_pool": [],
"knowledge_base": [],
"tools_and_functions": [],
"campaign": [
"Vm9pY2VDYW1wYWlnbjoxMjM="
]
}
}
'import requests
url = "https://api.voiceaiwrapper.app/api/v2/clients/create"
payload = {
"client_users": [
{
"email": "user@client.com",
"password": "SecureP@ss123"
}
],
"client_details": {
"name": "Acme Corp",
"email": "acme@example.com"
},
"client_asset_group": {
"tenant_voice_provider_id": "VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=",
"name": "Default Group"
},
"billing_provider": {
"type": "STRIPE",
"selected_product": {
"product_id": "...",
"price_ids": ["..."]
}
},
"client_access": {
"assistant": "view_only",
"campaign": "view_and_add"
},
"assigned_resources": {
"assistant": ["asst_abc123"],
"vapi_workflow": [],
"vapi_squad": [],
"phone_number": [],
"phone_number_pool": [],
"knowledge_base": [],
"tools_and_functions": [],
"campaign": ["Vm9pY2VDYW1wYWlnbjoxMjM="]
}
}
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({
client_users: [{email: 'user@client.com', password: 'SecureP@ss123'}],
client_details: {name: 'Acme Corp', email: 'acme@example.com'},
client_asset_group: {
tenant_voice_provider_id: 'VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=',
name: 'Default Group'
},
billing_provider: {type: 'STRIPE', selected_product: {product_id: '...', price_ids: ['...']}},
client_access: {assistant: 'view_only', campaign: 'view_and_add'},
assigned_resources: {
assistant: ['asst_abc123'],
vapi_workflow: [],
vapi_squad: [],
phone_number: [],
phone_number_pool: [],
knowledge_base: [],
tools_and_functions: [],
campaign: ['Vm9pY2VDYW1wYWlnbjoxMjM=']
}
})
};
fetch('https://api.voiceaiwrapper.app/api/v2/clients/create', 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.voiceaiwrapper.app/api/v2/clients/create",
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([
'client_users' => [
[
'email' => 'user@client.com',
'password' => 'SecureP@ss123'
]
],
'client_details' => [
'name' => 'Acme Corp',
'email' => 'acme@example.com'
],
'client_asset_group' => [
'tenant_voice_provider_id' => 'VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=',
'name' => 'Default Group'
],
'billing_provider' => [
'type' => 'STRIPE',
'selected_product' => [
'product_id' => '...',
'price_ids' => [
'...'
]
]
],
'client_access' => [
'assistant' => 'view_only',
'campaign' => 'view_and_add'
],
'assigned_resources' => [
'assistant' => [
'asst_abc123'
],
'vapi_workflow' => [
],
'vapi_squad' => [
],
'phone_number' => [
],
'phone_number_pool' => [
],
'knowledge_base' => [
],
'tools_and_functions' => [
],
'campaign' => [
'Vm9pY2VDYW1wYWlnbjoxMjM='
]
]
]),
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.voiceaiwrapper.app/api/v2/clients/create"
payload := strings.NewReader("{\n \"client_users\": [\n {\n \"email\": \"user@client.com\",\n \"password\": \"SecureP@ss123\"\n }\n ],\n \"client_details\": {\n \"name\": \"Acme Corp\",\n \"email\": \"acme@example.com\"\n },\n \"client_asset_group\": {\n \"tenant_voice_provider_id\": \"VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=\",\n \"name\": \"Default Group\"\n },\n \"billing_provider\": {\n \"type\": \"STRIPE\",\n \"selected_product\": {\n \"product_id\": \"...\",\n \"price_ids\": [\n \"...\"\n ]\n }\n },\n \"client_access\": {\n \"assistant\": \"view_only\",\n \"campaign\": \"view_and_add\"\n },\n \"assigned_resources\": {\n \"assistant\": [\n \"asst_abc123\"\n ],\n \"vapi_workflow\": [],\n \"vapi_squad\": [],\n \"phone_number\": [],\n \"phone_number_pool\": [],\n \"knowledge_base\": [],\n \"tools_and_functions\": [],\n \"campaign\": [\n \"Vm9pY2VDYW1wYWlnbjoxMjM=\"\n ]\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))
}HttpResponse<String> response = Unirest.post("https://api.voiceaiwrapper.app/api/v2/clients/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"client_users\": [\n {\n \"email\": \"user@client.com\",\n \"password\": \"SecureP@ss123\"\n }\n ],\n \"client_details\": {\n \"name\": \"Acme Corp\",\n \"email\": \"acme@example.com\"\n },\n \"client_asset_group\": {\n \"tenant_voice_provider_id\": \"VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=\",\n \"name\": \"Default Group\"\n },\n \"billing_provider\": {\n \"type\": \"STRIPE\",\n \"selected_product\": {\n \"product_id\": \"...\",\n \"price_ids\": [\n \"...\"\n ]\n }\n },\n \"client_access\": {\n \"assistant\": \"view_only\",\n \"campaign\": \"view_and_add\"\n },\n \"assigned_resources\": {\n \"assistant\": [\n \"asst_abc123\"\n ],\n \"vapi_workflow\": [],\n \"vapi_squad\": [],\n \"phone_number\": [],\n \"phone_number_pool\": [],\n \"knowledge_base\": [],\n \"tools_and_functions\": [],\n \"campaign\": [\n \"Vm9pY2VDYW1wYWlnbjoxMjM=\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.voiceaiwrapper.app/api/v2/clients/create")
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 \"client_users\": [\n {\n \"email\": \"user@client.com\",\n \"password\": \"SecureP@ss123\"\n }\n ],\n \"client_details\": {\n \"name\": \"Acme Corp\",\n \"email\": \"acme@example.com\"\n },\n \"client_asset_group\": {\n \"tenant_voice_provider_id\": \"VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=\",\n \"name\": \"Default Group\"\n },\n \"billing_provider\": {\n \"type\": \"STRIPE\",\n \"selected_product\": {\n \"product_id\": \"...\",\n \"price_ids\": [\n \"...\"\n ]\n }\n },\n \"client_access\": {\n \"assistant\": \"view_only\",\n \"campaign\": \"view_and_add\"\n },\n \"assigned_resources\": {\n \"assistant\": [\n \"asst_abc123\"\n ],\n \"vapi_workflow\": [],\n \"vapi_squad\": [],\n \"phone_number\": [],\n \"phone_number_pool\": [],\n \"knowledge_base\": [],\n \"tools_and_functions\": [],\n \"campaign\": [\n \"Vm9pY2VDYW1wYWlnbjoxMjM=\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Client created successfully",
"data": {
"client_id": "<string>",
"client_name": "<string>",
"primary_email": "<string>",
"users": [
{}
],
"asset_group_id": "<string>"
}
}{
"message": "Validation error",
"errors": {
"client_users": [
"At least one client user is required"
]
}
}{
"message": "<string>"
}{
"success": false,
"message": "Internal server error",
"error": "<string>"
}Create Client
Creates a new client account under the authenticated tenant, including user accounts, a client account configuration, billing configuration, and access permissions.
Authentication
All requests require an Authorization header using Bearer token authentication:
Authorization: Bearer <api_key>
curl --request POST \
--url https://api.voiceaiwrapper.app/api/v2/clients/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"client_users": [
{
"email": "user@client.com",
"password": "SecureP@ss123"
}
],
"client_details": {
"name": "Acme Corp",
"email": "acme@example.com"
},
"client_asset_group": {
"tenant_voice_provider_id": "VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=",
"name": "Default Group"
},
"billing_provider": {
"type": "STRIPE",
"selected_product": {
"product_id": "...",
"price_ids": [
"..."
]
}
},
"client_access": {
"assistant": "view_only",
"campaign": "view_and_add"
},
"assigned_resources": {
"assistant": [
"asst_abc123"
],
"vapi_workflow": [],
"vapi_squad": [],
"phone_number": [],
"phone_number_pool": [],
"knowledge_base": [],
"tools_and_functions": [],
"campaign": [
"Vm9pY2VDYW1wYWlnbjoxMjM="
]
}
}
'import requests
url = "https://api.voiceaiwrapper.app/api/v2/clients/create"
payload = {
"client_users": [
{
"email": "user@client.com",
"password": "SecureP@ss123"
}
],
"client_details": {
"name": "Acme Corp",
"email": "acme@example.com"
},
"client_asset_group": {
"tenant_voice_provider_id": "VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=",
"name": "Default Group"
},
"billing_provider": {
"type": "STRIPE",
"selected_product": {
"product_id": "...",
"price_ids": ["..."]
}
},
"client_access": {
"assistant": "view_only",
"campaign": "view_and_add"
},
"assigned_resources": {
"assistant": ["asst_abc123"],
"vapi_workflow": [],
"vapi_squad": [],
"phone_number": [],
"phone_number_pool": [],
"knowledge_base": [],
"tools_and_functions": [],
"campaign": ["Vm9pY2VDYW1wYWlnbjoxMjM="]
}
}
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({
client_users: [{email: 'user@client.com', password: 'SecureP@ss123'}],
client_details: {name: 'Acme Corp', email: 'acme@example.com'},
client_asset_group: {
tenant_voice_provider_id: 'VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=',
name: 'Default Group'
},
billing_provider: {type: 'STRIPE', selected_product: {product_id: '...', price_ids: ['...']}},
client_access: {assistant: 'view_only', campaign: 'view_and_add'},
assigned_resources: {
assistant: ['asst_abc123'],
vapi_workflow: [],
vapi_squad: [],
phone_number: [],
phone_number_pool: [],
knowledge_base: [],
tools_and_functions: [],
campaign: ['Vm9pY2VDYW1wYWlnbjoxMjM=']
}
})
};
fetch('https://api.voiceaiwrapper.app/api/v2/clients/create', 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.voiceaiwrapper.app/api/v2/clients/create",
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([
'client_users' => [
[
'email' => 'user@client.com',
'password' => 'SecureP@ss123'
]
],
'client_details' => [
'name' => 'Acme Corp',
'email' => 'acme@example.com'
],
'client_asset_group' => [
'tenant_voice_provider_id' => 'VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=',
'name' => 'Default Group'
],
'billing_provider' => [
'type' => 'STRIPE',
'selected_product' => [
'product_id' => '...',
'price_ids' => [
'...'
]
]
],
'client_access' => [
'assistant' => 'view_only',
'campaign' => 'view_and_add'
],
'assigned_resources' => [
'assistant' => [
'asst_abc123'
],
'vapi_workflow' => [
],
'vapi_squad' => [
],
'phone_number' => [
],
'phone_number_pool' => [
],
'knowledge_base' => [
],
'tools_and_functions' => [
],
'campaign' => [
'Vm9pY2VDYW1wYWlnbjoxMjM='
]
]
]),
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.voiceaiwrapper.app/api/v2/clients/create"
payload := strings.NewReader("{\n \"client_users\": [\n {\n \"email\": \"user@client.com\",\n \"password\": \"SecureP@ss123\"\n }\n ],\n \"client_details\": {\n \"name\": \"Acme Corp\",\n \"email\": \"acme@example.com\"\n },\n \"client_asset_group\": {\n \"tenant_voice_provider_id\": \"VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=\",\n \"name\": \"Default Group\"\n },\n \"billing_provider\": {\n \"type\": \"STRIPE\",\n \"selected_product\": {\n \"product_id\": \"...\",\n \"price_ids\": [\n \"...\"\n ]\n }\n },\n \"client_access\": {\n \"assistant\": \"view_only\",\n \"campaign\": \"view_and_add\"\n },\n \"assigned_resources\": {\n \"assistant\": [\n \"asst_abc123\"\n ],\n \"vapi_workflow\": [],\n \"vapi_squad\": [],\n \"phone_number\": [],\n \"phone_number_pool\": [],\n \"knowledge_base\": [],\n \"tools_and_functions\": [],\n \"campaign\": [\n \"Vm9pY2VDYW1wYWlnbjoxMjM=\"\n ]\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))
}HttpResponse<String> response = Unirest.post("https://api.voiceaiwrapper.app/api/v2/clients/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"client_users\": [\n {\n \"email\": \"user@client.com\",\n \"password\": \"SecureP@ss123\"\n }\n ],\n \"client_details\": {\n \"name\": \"Acme Corp\",\n \"email\": \"acme@example.com\"\n },\n \"client_asset_group\": {\n \"tenant_voice_provider_id\": \"VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=\",\n \"name\": \"Default Group\"\n },\n \"billing_provider\": {\n \"type\": \"STRIPE\",\n \"selected_product\": {\n \"product_id\": \"...\",\n \"price_ids\": [\n \"...\"\n ]\n }\n },\n \"client_access\": {\n \"assistant\": \"view_only\",\n \"campaign\": \"view_and_add\"\n },\n \"assigned_resources\": {\n \"assistant\": [\n \"asst_abc123\"\n ],\n \"vapi_workflow\": [],\n \"vapi_squad\": [],\n \"phone_number\": [],\n \"phone_number_pool\": [],\n \"knowledge_base\": [],\n \"tools_and_functions\": [],\n \"campaign\": [\n \"Vm9pY2VDYW1wYWlnbjoxMjM=\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.voiceaiwrapper.app/api/v2/clients/create")
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 \"client_users\": [\n {\n \"email\": \"user@client.com\",\n \"password\": \"SecureP@ss123\"\n }\n ],\n \"client_details\": {\n \"name\": \"Acme Corp\",\n \"email\": \"acme@example.com\"\n },\n \"client_asset_group\": {\n \"tenant_voice_provider_id\": \"VGVuYW50Vm9pY2VQcm92aWRlcjoxMjM=\",\n \"name\": \"Default Group\"\n },\n \"billing_provider\": {\n \"type\": \"STRIPE\",\n \"selected_product\": {\n \"product_id\": \"...\",\n \"price_ids\": [\n \"...\"\n ]\n }\n },\n \"client_access\": {\n \"assistant\": \"view_only\",\n \"campaign\": \"view_and_add\"\n },\n \"assigned_resources\": {\n \"assistant\": [\n \"asst_abc123\"\n ],\n \"vapi_workflow\": [],\n \"vapi_squad\": [],\n \"phone_number\": [],\n \"phone_number_pool\": [],\n \"knowledge_base\": [],\n \"tools_and_functions\": [],\n \"campaign\": [\n \"Vm9pY2VDYW1wYWlnbjoxMjM=\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Client created successfully",
"data": {
"client_id": "<string>",
"client_name": "<string>",
"primary_email": "<string>",
"users": [
{}
],
"asset_group_id": "<string>"
}
}{
"message": "Validation error",
"errors": {
"client_users": [
"At least one client user is required"
]
}
}{
"message": "<string>"
}{
"success": false,
"message": "Internal server error",
"error": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Client account configuration
List of user accounts to create for this client. Required. At least one user must be provided.
Show child attributes
Show child attributes
Basic client account details. Optional.
Show child attributes
Show child attributes
Client account configuration. Required. tenant_voice_provider_id is required.
Show child attributes
Show child attributes
Billing configuration. Optional. Defaults to empty if not provided.
{
"type": "STRIPE",
"selected_product": { "product_id": "...", "price_ids": ["..."] }
}
Dashboard permission settings. Optional. All fields optional - omitted fields use defaults. See endpoint description for full list of allowed values per field.
{
"assistant": "view_only",
"campaign": "view_and_add"
}
Resources to assign to the client's client account configuration. Optional.
Show child attributes
Show child attributes
Was this page helpful?

