Bulk Availability Check Endpoint
curl --request POST \
--url https://app.tuco.ai/api/leads/check-availability \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.tuco.ai/api/leads/check-availability"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.tuco.ai/api/leads/check-availability', 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://app.tuco.ai/api/leads/check-availability",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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://app.tuco.ai/api/leads/check-availability"
req, _ := http.NewRequest("POST", 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.post("https://app.tuco.ai/api/leads/check-availability")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.tuco.ai/api/leads/check-availability")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyiMessage Availability
Bulk Availability Check Endpoint
Bulk-check iMessage availability for many leads or a single address. REST endpoint in the Tuco AI iMessage API — bearer-token auth, JSON request/response, full.
POST
/
api
/
leads
/
check-availability
Bulk Availability Check Endpoint
curl --request POST \
--url https://app.tuco.ai/api/leads/check-availability \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.tuco.ai/api/leads/check-availability"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.tuco.ai/api/leads/check-availability', 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://app.tuco.ai/api/leads/check-availability",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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://app.tuco.ai/api/leads/check-availability"
req, _ := http.NewRequest("POST", 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.post("https://app.tuco.ai/api/leads/check-availability")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.tuco.ai/api/leads/check-availability")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyEndpoint
- Method:
POST - Path:
/api/leads/check-availability
Check a Single Address (Quick Check)
Use this form to check one phone number or email address without creating a lead.The
address field must be a non-empty string. Sending { "address": "" } will not work — the empty string is ignored and Tuco falls through to the bulk leads path, which will likely return a 404 if you haven’t provided leadIds or listId.{
"address": "+12025551234"
}
{
"success": true,
"available": true,
"address": "+12025551234"
}
Bulk Check by Lead IDs
Provide a list of lead IDs in the current workspace. Tuco will:- Mark each lead as
availabilityStatus: "available","unavailable", or"error". - Return a summary of how many checks succeeded or failed.
{
"leadIds": [
"667f1f77bcf86cd799439012",
"667f1f77bcf86cd799439013",
"667f1f77bcf86cd799439014"
]
}
{
"success": true,
"checked": 3,
"successful": 3,
"errors": 0,
"results": [
{
"leadId": "667f1f77bcf86cd799439012",
"available": true,
"status": "available"
},
{
"leadId": "667f1f77bcf86cd799439013",
"available": false,
"status": "unavailable"
}
],
"processingMode": "synchronous"
}
{
"success": true,
"message": "Bulk availability check started in background",
"jobId": "bulk-availability-2025-10-15T14:30:00.000Z",
"checked": 1200,
"processingMode": "background"
}
availabilityStatus field on each lead for downstream decisions (for example, whether to enroll a lead in an iMessage campaign or to prefer SMS/email).