curl --request GET \
--url https://api.erdo.ai/v1/voice/phone-numbers/{number}/sms \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.erdo.ai/v1/voice/phone-numbers/{number}/sms"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.erdo.ai/v1/voice/phone-numbers/{number}/sms', 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.erdo.ai/v1/voice/phone-numbers/{number}/sms",
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.erdo.ai/v1/voice/phone-numbers/{number}/sms"
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.erdo.ai/v1/voice/phone-numbers/{number}/sms")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/voice/phone-numbers/{number}/sms")
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{
"address": "<string>",
"agent_ref": "<string>",
"brand_status": "<string>",
"campaign_status": "<string>",
"last_polled_at": "2023-11-07T05:31:56Z",
"missing_profile_fields": [
"<string>"
],
"mock": true,
"next_step": "<string>",
"not_registerable_reason": "<string>",
"profile_out_of_date": true,
"profile_out_of_date_fields": [
"<string>"
],
"profile_status": "<string>",
"reason": "<string>",
"registerable": true,
"requested_at": "2023-11-07T05:31:56Z",
"sender_kind": "<string>",
"status": "<string>"
}{
"code": "not_found",
"details": {},
"message": "<string>"
}GetVoicePhoneNumberSMSAPI mirrors the single-number half of
erdo_voice_phone_number_list: what one number’s SMS registration is waiting on, and why it was rejected if it was.
curl --request GET \
--url https://api.erdo.ai/v1/voice/phone-numbers/{number}/sms \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.erdo.ai/v1/voice/phone-numbers/{number}/sms"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.erdo.ai/v1/voice/phone-numbers/{number}/sms', 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.erdo.ai/v1/voice/phone-numbers/{number}/sms",
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.erdo.ai/v1/voice/phone-numbers/{number}/sms"
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.erdo.ai/v1/voice/phone-numbers/{number}/sms")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/voice/phone-numbers/{number}/sms")
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{
"address": "<string>",
"agent_ref": "<string>",
"brand_status": "<string>",
"campaign_status": "<string>",
"last_polled_at": "2023-11-07T05:31:56Z",
"missing_profile_fields": [
"<string>"
],
"mock": true,
"next_step": "<string>",
"not_registerable_reason": "<string>",
"profile_out_of_date": true,
"profile_out_of_date_fields": [
"<string>"
],
"profile_status": "<string>",
"reason": "<string>",
"registerable": true,
"requested_at": "2023-11-07T05:31:56Z",
"sender_kind": "<string>",
"status": "<string>"
}{
"code": "not_found",
"details": {},
"message": "<string>"
}Authorizations
An Erdo API key (erdo_api_...) or scoped token (erdo_token_...).
Path Parameters
Response
Success response
Erdo's own numbers.
needs before registration can be submitted, so the answer to "why isn't my number replying" is actionable rather than "it isn't registered".
when Registerable is true.
since this registration was submitted, so the carriers still hold the previous legal identity. It is reported rather than acted on: re-sending re-opens carrier review, so it is a person's decision — and without this field every surface would go on showing the new identity beside a status of "approved" and nothing would say the two had parted. ProfileOutOfDateFields names what moved, empty for a registration that predates the per-field record.
Erdo's own shared numbers, or one on the root account. It is reported rather than left to the attempt, because an approval card for a call that can never execute is worse than a refusal: it sits in the work feed looking like a decision somebody still has to make.

