Agent Setup Status
curl --request GET \
--url https://api.tracklysms.com/api/v2/agent/setup \
--header 'X-Api-Key: <api-key>'import requests
url = "https://api.tracklysms.com/api/v2/agent/setup"
headers = {"X-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Api-Key': '<api-key>'}};
fetch('https://api.tracklysms.com/api/v2/agent/setup', 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.tracklysms.com/api/v2/agent/setup",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Api-Key: <api-key>"
],
]);
$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.tracklysms.com/api/v2/agent/setup"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<api-key>")
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.tracklysms.com/api/v2/agent/setup")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tracklysms.com/api/v2/agent/setup")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_bodyV2 API Reference
Agent Setup Status
Read stored setup progress and the next human or assistant action for your SMS connection.
GET
/
v2
/
agent
/
setup
Agent Setup Status
curl --request GET \
--url https://api.tracklysms.com/api/v2/agent/setup \
--header 'X-Api-Key: <api-key>'import requests
url = "https://api.tracklysms.com/api/v2/agent/setup"
headers = {"X-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Api-Key': '<api-key>'}};
fetch('https://api.tracklysms.com/api/v2/agent/setup', 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.tracklysms.com/api/v2/agent/setup",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Api-Key: <api-key>"
],
]);
$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.tracklysms.com/api/v2/agent/setup"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<api-key>")
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.tracklysms.com/api/v2/agent/setup")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tracklysms.com/api/v2/agent/setup")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_bodyReturns account setup evidence for the calling key. Use
trackly_get_setup_status through MCP or call this endpoint with your private API credentials. The response contains counts, identifiers, and trusted Trackly links. It does not create billing records, provision senders, contact a payment provider, or send a message. Authentication can update the key’s last-used information.
This is a progress summary. Run preflight for a proposed message; current send policy and human approval are enforced again when sending.
| Field | Meaning |
|---|---|
setup.connection | Calling key ID and sandbox mode; observed active, unexpired OAuth grant count. Grant counts do not prove current key authority. API-key connections can have zero OAuth grants. |
setup.senders | Observed active account-owned list count, which can include senders forbidden by the key’s current restrictions. count_limited marks a bounded sample. |
setup.billing | Whether a stored billing configuration was found and its saved status. An absent record is unknown. Presence does not prove payment, funding, or eligibility. |
setup.latest_hold | Most recent hold attributed to this key, or null. Contains status, mode, recipient count, and saved outcome counts. |
setup.recent_hold_search_limited | Older holds for this key were outside the search. A missing result does not prove the connection has never sent. |
setup.next_steps | Suggested actions with fixed Trackly destinations. Opening a link never completes setup or approves a message. |
latest_hold.outcome distinguishes simulation_completed, submitted, unknown, and not_completed. submitted_count is a saved live submission count, never a delivery receipt. Inspect error_count for partial bulk results. For unknown, read the same held send; do not automatically create or execute a replacement.
The summary is advisory and may change after the read. Sender provisioning, billing, recipient consent, and applicable messaging requirements remain separate steps. See connect an assistant and send with human approval.
Errors
| Status | Meaning |
|---|---|
| 401 | Missing or invalid credentials. |
| 403 | Current account authority or delegated access does not permit the request. |
| 429 | Authentication request limit exceeded, when applicable. |
| 503 | Stored setup evidence or delegated authorization is unavailable. Retry this read later. |