curl --request POST \
--url https://api.useanima.sh/v1/identities \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"capabilities": [],
"slug": "<string>",
"email": "jsmith@example.com",
"phone": {
"countryCode": "US",
"areaCode": "<string>"
},
"metadata": {}
}
'import requests
url = "https://api.useanima.sh/v1/identities"
payload = {
"name": "<string>",
"capabilities": [],
"slug": "<string>",
"email": "jsmith@example.com",
"phone": {
"countryCode": "US",
"areaCode": "<string>"
},
"metadata": {}
}
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: '<string>',
capabilities: [],
slug: '<string>',
email: 'jsmith@example.com',
phone: {countryCode: 'US', areaCode: '<string>'},
metadata: {}
})
};
fetch('https://api.useanima.sh/v1/identities', 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.useanima.sh/v1/identities",
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' => '<string>',
'capabilities' => [
],
'slug' => '<string>',
'email' => 'jsmith@example.com',
'phone' => [
'countryCode' => 'US',
'areaCode' => '<string>'
],
'metadata' => [
]
]),
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.useanima.sh/v1/identities"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"capabilities\": [],\n \"slug\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": {\n \"countryCode\": \"US\",\n \"areaCode\": \"<string>\"\n },\n \"metadata\": {}\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.useanima.sh/v1/identities")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"capabilities\": [],\n \"slug\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": {\n \"countryCode\": \"US\",\n \"areaCode\": \"<string>\"\n },\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.useanima.sh/v1/identities")
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 \"name\": \"<string>\",\n \"capabilities\": [],\n \"slug\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": {\n \"countryCode\": \"US\",\n \"areaCode\": \"<string>\"\n },\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"slug": "<string>",
"apiKey": "<string>",
"email": {
"id": "<string>",
"email": "<string>",
"domain": "<string>",
"isPrimary": true
},
"phone": {
"id": "<string>",
"phoneNumber": "<string>",
"capabilities": {
"sms": true,
"mms": true,
"voice": true
},
"isPrimary": true
},
"vault": {
"id": "<string>",
"status": "<string>"
},
"failures": [
{
"capability": "email",
"error": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z"
}Post identities
curl --request POST \
--url https://api.useanima.sh/v1/identities \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"capabilities": [],
"slug": "<string>",
"email": "jsmith@example.com",
"phone": {
"countryCode": "US",
"areaCode": "<string>"
},
"metadata": {}
}
'import requests
url = "https://api.useanima.sh/v1/identities"
payload = {
"name": "<string>",
"capabilities": [],
"slug": "<string>",
"email": "jsmith@example.com",
"phone": {
"countryCode": "US",
"areaCode": "<string>"
},
"metadata": {}
}
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: '<string>',
capabilities: [],
slug: '<string>',
email: 'jsmith@example.com',
phone: {countryCode: 'US', areaCode: '<string>'},
metadata: {}
})
};
fetch('https://api.useanima.sh/v1/identities', 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.useanima.sh/v1/identities",
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' => '<string>',
'capabilities' => [
],
'slug' => '<string>',
'email' => 'jsmith@example.com',
'phone' => [
'countryCode' => 'US',
'areaCode' => '<string>'
],
'metadata' => [
]
]),
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.useanima.sh/v1/identities"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"capabilities\": [],\n \"slug\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": {\n \"countryCode\": \"US\",\n \"areaCode\": \"<string>\"\n },\n \"metadata\": {}\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.useanima.sh/v1/identities")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"capabilities\": [],\n \"slug\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": {\n \"countryCode\": \"US\",\n \"areaCode\": \"<string>\"\n },\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.useanima.sh/v1/identities")
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 \"name\": \"<string>\",\n \"capabilities\": [],\n \"slug\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": {\n \"countryCode\": \"US\",\n \"areaCode\": \"<string>\"\n },\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"slug": "<string>",
"apiKey": "<string>",
"email": {
"id": "<string>",
"email": "<string>",
"domain": "<string>",
"isPrimary": true
},
"phone": {
"id": "<string>",
"phoneNumber": "<string>",
"capabilities": {
"sms": true,
"mms": true,
"voice": true
},
"isPrimary": true
},
"vault": {
"id": "<string>",
"status": "<string>"
},
"failures": [
{
"capability": "email",
"error": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z"
}Authorizations
JWT Bearer token obtained from authentication. Pass as: Authorization: Bearer
Body
Provision a complete agent identity in a single call
Human-readable name for the agent (e.g. 'shopping-agent')
2 - 100Capabilities to provision. Email is always included.
1email, phone, vault URL-safe identifier. Auto-derived from name if omitted
2 - 64^[a-z0-9-]+$Custom email address. Defaults to {slug}@agents.useanima.sh
Phone provisioning options (only used if 'phone' is in capabilities)
Show child attributes
Show child attributes
Arbitrary key-value metadata
Show child attributes
Show child attributes
Response
OK
Provisioned agent identity with all requested capabilities
Agent ID
Agent API key — only returned on creation
Email identity (always provisioned)
Show child attributes
Show child attributes
Phone identity (if requested)
Show child attributes
Show child attributes
Vault identity (if requested)
Show child attributes
Show child attributes
Capabilities that failed to provision. Empty on full success.
Show child attributes
Show child attributes
