Get Registration Attempt History
curl --request GET \
--url https://api.tracklysms.com/api/v2/number-requests/{request_id}/readiness/history \
--header 'X-Api-Key: <api-key>'import requests
url = "https://api.tracklysms.com/api/v2/number-requests/{request_id}/readiness/history"
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/number-requests/{request_id}/readiness/history', 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/number-requests/{request_id}/readiness/history",
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/number-requests/{request_id}/readiness/history"
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/number-requests/{request_id}/readiness/history")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tracklysms.com/api/v2/number-requests/{request_id}/readiness/history")
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_bodyNumber Requests (v2)
Get Registration Attempt History
Read a bounded page of immutable submission attempt or event metadata for the request lineage.
GET
/
v2
/
number-requests
/
{request_id}
/
readiness
/
history
Get Registration Attempt History
curl --request GET \
--url https://api.tracklysms.com/api/v2/number-requests/{request_id}/readiness/history \
--header 'X-Api-Key: <api-key>'import requests
url = "https://api.tracklysms.com/api/v2/number-requests/{request_id}/readiness/history"
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/number-requests/{request_id}/readiness/history', 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/number-requests/{request_id}/readiness/history",
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/number-requests/{request_id}/readiness/history"
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/number-requests/{request_id}/readiness/history")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tracklysms.com/api/v2/number-requests/{request_id}/readiness/history")
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_bodyUse the owning account’s API key to read registration attempt and event metadata. The server scopes records to the account, request lineage, provider, and configured environment. This endpoint does not return private submission packets, captured pages, or raw provider feedback.
The cursor retains the original time window. Do not mix cursors between accounts or record kinds, infer their contents, or change query bounds halfway through a page sequence.
Query parameters
| Parameter | Meaning |
|---|---|
kind | attempts (default) or events. Attempts are oldest first; events are newest first. |
limit | Integer from 1 to 100; defaults to 100. |
from | Inclusive ISO UTC start; defaults to 30 days before until. |
until | Inclusive ISO UTC end; defaults to now. The range must be positive, no longer than 366 days, and cannot end in the future. |
cursor | Opaque nextCursor from the previous response for this account, lineage, kind, and environment. Reuse it unchanged. |
Response
The response containsschemaVersion, kind, records, nextCursor, completeWindow, from, until, rootRequestId, provider, and environment. nextCursor is null when the page sequence is complete; records: [] means no matching recorded history in the selected window. Current exports cover the infobip provider.
completeWindow is true only when the response contains the full selected time window in a single page: the request supplied no cursor parameter and the response has no nextCursor. A final cursor page still has completeWindow: false. Preserve the response envelope and time bounds when assessing results; raw record arrays, or a missing next cursor by itself, cannot substantiate verified target or completeness claims.
Attempt metadata includes saved attempt and review identifiers, content digests, action, timestamps, and provenance. Event metadata includes the observed stage, source, observation timestamps, feedback digest, and safe correlation details. Records retain their stored field names, such as attempt_id and review_id. Retain these identifiers when requesting support; they are not payloads to replay against a carrier.
Missing history or incomplete measurement anchors do not prove that a prior submission never happened. An observation alone is not confirmation of a successful submission. Keep the existing request ID and reconcile uncertain outcomes before taking another action. For the current findings and server permissions, read Registration Readiness.
Errors
| HTTP | Code | Meaning |
|---|---|---|
| 400 | invalid_history_query | Invalid record kind, limit, cursor, or time range. |
| 404 | not_found | The request does not belong to the authenticated account. |
| 503 | campaign_history_unavailable | History could not be read. Retry this read later; do not repeat a provider action. |