Create the Agent channel
Connects a carrier number, SIP trunk, or WhatsApp endpoint for the verified Organization under agents:write and channels:write. Omit agentId to connect it unassigned and attach an Agent later; several endpoints may route to the same Agent. Provider onboarding has no idempotency key, so confirm an uncertain response before retrying.
curl --request POST \
--url https://api.getarbol.com/v1/channels \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"accountSid": "<string>",
"authToken": "<string>",
"kind": "number",
"phoneNumber": "+573001234567"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
accountSid: '<string>',
authToken: '<string>',
kind: 'number',
phoneNumber: '+573001234567'
})
};
fetch('https://api.getarbol.com/v1/channels', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.getarbol.com/v1/channels"
payload = {
"accountSid": "<string>",
"authToken": "<string>",
"kind": "number",
"phoneNumber": "+573001234567"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"channel": {
"address": "<string>",
"agentId": "agt_018f47a2-4f4d-7d61-9e2c-1d7b8e9a0c31",
"createdAt": "2026-08-29T14:30:00Z",
"displayName": "<string>",
"id": "agt_018f47a2-4f4d-7d61-9e2c-1d7b8e9a0c31",
"inboundEnabled": true,
"kind": "whatsapp",
"outboundEnabled": true,
"status": "active",
"updatedAt": "2026-08-29T14:30:00Z"
},
"authorization": {
"expiresAt": "2026-08-29T14:30:00Z",
"url": "<string>"
}
}{
"defined": true,
"inferable": true,
"code": "BAD_REQUEST",
"status": 400,
"message": "<string>",
"data": {
"issues": [
{
"code": "custom",
"message": "<string>",
"path": [
"<string>"
]
}
],
"truncated": true
}
}{
"defined": true,
"inferable": true,
"code": "UNAUTHORIZED",
"status": 401,
"message": "<string>",
"data": "<unknown>"
}{
"defined": true,
"inferable": true,
"code": "FORBIDDEN",
"status": 403,
"message": "<string>",
"data": {
"missingPermissions": [
"agents:read"
]
}
}{
"defined": true,
"inferable": true,
"code": "NOT_FOUND",
"status": 404,
"message": "<string>",
"data": "<unknown>"
}{
"defined": true,
"inferable": true,
"code": "CONFLICT",
"status": 409,
"message": "<string>",
"data": "<unknown>"
}{
"code": "PAYLOAD_TOO_LARGE",
"defined": false,
"inferable": false,
"message": "<string>",
"data": "<unknown>"
}{
"code": "UNSUPPORTED_MEDIA_TYPE",
"defined": false,
"inferable": false,
"message": "<string>",
"data": "<unknown>"
}{
"defined": true,
"inferable": true,
"code": "TOO_MANY_REQUESTS",
"status": 429,
"message": "<string>",
"data": {
"retryAfterSeconds": 123
}
}{
"defined": true,
"inferable": true,
"code": "SERVICE_UNAVAILABLE",
"status": 503,
"message": "<string>",
"data": "<unknown>"
}Authorizations
Organization-scoped Auth0 user access token issued to an approved first-party client or exchanged by a trusted OBO resource server.
Body
- Create number channel input
- Create SIP channel input
- Create WhatsApp channel input
Connects a managed voice number as an Agent channel.
1 - 1601 - 2000"number"International telephone number in E.164 form.
^\+[1-9]\d{7,14}$"+573001234567"
Opaque Arbol resource identifier; the endpoint and tenant-scoped lookup determine its resource type.
64^[a-z][a-z0-9]{1,15}_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"agt_018f47a2-4f4d-7d61-9e2c-1d7b8e9a0c31"
1 - 160Response
OK
Created channel plus a human setup capability when the provider requires one.
curl --request POST \
--url https://api.getarbol.com/v1/channels \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"accountSid": "<string>",
"authToken": "<string>",
"kind": "number",
"phoneNumber": "+573001234567"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
accountSid: '<string>',
authToken: '<string>',
kind: 'number',
phoneNumber: '+573001234567'
})
};
fetch('https://api.getarbol.com/v1/channels', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.getarbol.com/v1/channels"
payload = {
"accountSid": "<string>",
"authToken": "<string>",
"kind": "number",
"phoneNumber": "+573001234567"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"channel": {
"address": "<string>",
"agentId": "agt_018f47a2-4f4d-7d61-9e2c-1d7b8e9a0c31",
"createdAt": "2026-08-29T14:30:00Z",
"displayName": "<string>",
"id": "agt_018f47a2-4f4d-7d61-9e2c-1d7b8e9a0c31",
"inboundEnabled": true,
"kind": "whatsapp",
"outboundEnabled": true,
"status": "active",
"updatedAt": "2026-08-29T14:30:00Z"
},
"authorization": {
"expiresAt": "2026-08-29T14:30:00Z",
"url": "<string>"
}
}{
"defined": true,
"inferable": true,
"code": "BAD_REQUEST",
"status": 400,
"message": "<string>",
"data": {
"issues": [
{
"code": "custom",
"message": "<string>",
"path": [
"<string>"
]
}
],
"truncated": true
}
}{
"defined": true,
"inferable": true,
"code": "UNAUTHORIZED",
"status": 401,
"message": "<string>",
"data": "<unknown>"
}{
"defined": true,
"inferable": true,
"code": "FORBIDDEN",
"status": 403,
"message": "<string>",
"data": {
"missingPermissions": [
"agents:read"
]
}
}{
"defined": true,
"inferable": true,
"code": "NOT_FOUND",
"status": 404,
"message": "<string>",
"data": "<unknown>"
}{
"defined": true,
"inferable": true,
"code": "CONFLICT",
"status": 409,
"message": "<string>",
"data": "<unknown>"
}{
"code": "PAYLOAD_TOO_LARGE",
"defined": false,
"inferable": false,
"message": "<string>",
"data": "<unknown>"
}{
"code": "UNSUPPORTED_MEDIA_TYPE",
"defined": false,
"inferable": false,
"message": "<string>",
"data": "<unknown>"
}{
"defined": true,
"inferable": true,
"code": "TOO_MANY_REQUESTS",
"status": 429,
"message": "<string>",
"data": {
"retryAfterSeconds": 123
}
}{
"defined": true,
"inferable": true,
"code": "SERVICE_UNAVAILABLE",
"status": 503,
"message": "<string>",
"data": "<unknown>"
}