cURL
curl --request GET \
--url https://api.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable \
--header 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable', 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.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"numbers": [
{
"number": "+14155550199",
"attachable": true,
"code": "ready",
"reason": "Ready to be my number."
}
],
"more": false
}{
"success": false,
"error": "invalid_request",
"code": "invalid_request",
"message": "Please check the details and try again."
}{
"success": false,
"error": "Unauthorized",
"message": "Please sign in to continue."
}{
"success": false,
"error": "InsufficientScope",
"message": "This access key does not allow this action. Please ask your account admin to change its permissions.",
"requiredScope": "agents:write"
}{
"success": false,
"error": "not_found",
"code": "not_found",
"message": "We couldn't find that. It may have been moved or deleted."
}{
"success": false,
"error": "quote_expired",
"code": "quote_expired",
"message": "No purchase was made. Please ask for a fresh price before confirming."
}{
"success": false,
"error": "invalid_request",
"code": "invalid_request",
"message": "Please check the details and try again."
}{
"success": false,
"error": "TooManyRequests",
"message": "That's a lot at once. Please wait a moment and try again."
}{
"success": false,
"error": "line_unverified",
"code": "line_unverified",
"message": "We couldn't finish this right now. Please try again in a moment."
}List numbers to connect to a TFU Live agent
The numbers the agency already has in its own phone account and does not use here yet, and whether each can become this rep’s number (attachable, else code and reason). Connecting one is free, so check here before buying. Read only. Machine credentials use the returned tfu_live: agent id.
Required scope: agents:read.
Required API key scope: agents:read.
GET
/
api
/
tfu-live-agents
/
{id}
/
numbers
/
attachable
cURL
curl --request GET \
--url https://api.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable \
--header 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable', 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.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.teamfollowup.ai/api/tfu-live-agents/{id}/numbers/attachable")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"numbers": [
{
"number": "+14155550199",
"attachable": true,
"code": "ready",
"reason": "Ready to be my number."
}
],
"more": false
}{
"success": false,
"error": "invalid_request",
"code": "invalid_request",
"message": "Please check the details and try again."
}{
"success": false,
"error": "Unauthorized",
"message": "Please sign in to continue."
}{
"success": false,
"error": "InsufficientScope",
"message": "This access key does not allow this action. Please ask your account admin to change its permissions.",
"requiredScope": "agents:write"
}{
"success": false,
"error": "not_found",
"code": "not_found",
"message": "We couldn't find that. It may have been moved or deleted."
}{
"success": false,
"error": "quote_expired",
"code": "quote_expired",
"message": "No purchase was made. Please ask for a fresh price before confirming."
}{
"success": false,
"error": "invalid_request",
"code": "invalid_request",
"message": "Please check the details and try again."
}{
"success": false,
"error": "TooManyRequests",
"message": "That's a lot at once. Please wait a moment and try again."
}{
"success": false,
"error": "line_unverified",
"code": "line_unverified",
"message": "We couldn't finish this right now. Please try again in a moment."
}Authorizations
Send your API key as Authorization: Bearer YOUR_API_KEY.
Path Parameters
TFU Live agent id. Never use an ordinary provider agent id.
Query Parameters
Sub-account belonging to the authenticated agency and any narrower credential location binding.
When more than one campaign uses this rep, the one whose calling line to use.
Pattern:
^[a-zA-Z0-9_-]{1,100}$⌘I
