curl "https://tawked.com/v1/partner/verifications?application=store_88&status=verified&limit=50" \
-H "Authorization: Bearer tk_partner_xxxxxxxxxxxxxxxxxxxx"const res = await fetch("https://tawked.com/v1/partner/verifications?application=store_88&status=verified&limit=50", {
headers: {
Authorization: "Bearer tk_partner_xxxxxxxxxxxxxxxxxxxx",
},
});
const data = await res.json();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://tawked.com/v1/partner/verifications",
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;
}import requests
res = requests.get(
"https://tawked.com/v1/partner/verifications?application=store_88&status=verified&limit=50",
headers={"Authorization": "Bearer tk_partner_xxxxxxxxxxxxxxxxxxxx"},
)
data = res.json(){
"data": [
{
"id": "b7e5c2b0-9c1a-4e2f-8f2a-3a6b0e9d1c44",
"application_id": "c2a10f3e-8b7a-4d2e-9c1a-1a2b3c4d5e6f",
"external_id": "store_88",
"status": "verified",
"channel": "sms",
"to": "+966551234567",
"reference": "order-42",
"attempts_remaining": 0,
"resends_remaining": 0,
"expires_at": "2026-09-26T12:34:56.789Z",
"verified_at": "2026-09-26T12:31:02.145Z",
"created_at": "2026-09-26T12:29:56.789Z",
"mode": "partner",
"lang": "ar",
"price_halalas": 9
}
],
"next_cursor": "eyJ0IjoiMjAyNi0wOS0yNiAxMjoyOTo1Ni4wMDAwMDAiLCJpZCI6ImI3ZTVjMmIwLTljMWEtNGUyZi04ZjJhLTNhNmIwZTlkMWM0NCJ9",
"has_more": false
}{
"error": "invalid_request",
"fields": [
"status"
]
}{
"error": "unauthorized"
}{
"error": "ip_not_allowed"
}{
"error": "not_found"
}{
"error": "too_many_requests"
}{
"error": "internal_error"
}List verifications
Every code your key sent, newest first, across all your applications. Each row is the shape of GET /v1/verify/{id} plus application_id, your external_id, the key mode it was sent under, the lang and the price_halalas it was charged at. Keyset paging with no totals: keep next_cursor and pass it back as cursor; has_more says whether another page is waiting. An archived application keeps its rows.
curl "https://tawked.com/v1/partner/verifications?application=store_88&status=verified&limit=50" \
-H "Authorization: Bearer tk_partner_xxxxxxxxxxxxxxxxxxxx"const res = await fetch("https://tawked.com/v1/partner/verifications?application=store_88&status=verified&limit=50", {
headers: {
Authorization: "Bearer tk_partner_xxxxxxxxxxxxxxxxxxxx",
},
});
const data = await res.json();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://tawked.com/v1/partner/verifications",
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;
}import requests
res = requests.get(
"https://tawked.com/v1/partner/verifications?application=store_88&status=verified&limit=50",
headers={"Authorization": "Bearer tk_partner_xxxxxxxxxxxxxxxxxxxx"},
)
data = res.json(){
"data": [
{
"id": "b7e5c2b0-9c1a-4e2f-8f2a-3a6b0e9d1c44",
"application_id": "c2a10f3e-8b7a-4d2e-9c1a-1a2b3c4d5e6f",
"external_id": "store_88",
"status": "verified",
"channel": "sms",
"to": "+966551234567",
"reference": "order-42",
"attempts_remaining": 0,
"resends_remaining": 0,
"expires_at": "2026-09-26T12:34:56.789Z",
"verified_at": "2026-09-26T12:31:02.145Z",
"created_at": "2026-09-26T12:29:56.789Z",
"mode": "partner",
"lang": "ar",
"price_halalas": 9
}
],
"next_cursor": "eyJ0IjoiMjAyNi0wOS0yNiAxMjoyOTo1Ni4wMDAwMDAiLCJpZCI6ImI3ZTVjMmIwLTljMWEtNGUyZi04ZjJhLTNhNmIwZTlkMWM0NCJ9",
"has_more": false
}{
"error": "invalid_request",
"fields": [
"status"
]
}{
"error": "unauthorized"
}{
"error": "ip_not_allowed"
}{
"error": "not_found"
}{
"error": "too_many_requests"
}{
"error": "internal_error"
}Authorizations
Authorization: Bearer . An application key (tk_live_, tk_test_) has full access, which covers every product and any product added later, or custom access, chosen when the key is created: one or more of the scopes verify:check, verify:send (includes verify:check), notifications:read, notifications:send (includes notifications:read), email:read, email:send (includes email:read), email:manage (includes email:send), webhooks:manage, email:inbound, notifications:templates (includes notifications:read), chat:menus, chat:attendant. No key made on the API keys page holds notifications:templates, full access included: the three template writes answer such a key 403 insufficient_scope. A connected app's key holds it. Nor chat:menus: the five conversation menu operations answer such a key 403 insufficient_scope, and a connected app's key holds it once the client approved it. Nor chat:attendant: the five auto-attendant operations answer such a key 403 insufficient_scope too, and a connected app's key holds it once the client approved it. email:manage and webhooks:manage are held only by a key someone chose them for: a full-access key, old or new, never holds them. email:inbound, which reads, deletes and forwards received e-mail, is opt-in on every key, full access included: a key holds it only when it was turned on when the key was created. A call outside the key's access answers 403 insufficient_scope and names the scope it needs in the WWW-Authenticate response header. A partner key (tk_partner_) always has full access. Whatever its access, a key is a server-side secret.
Query Parameters
Your external_id: only that application. An id that is not yours answers 404 not_found.
One of pending, verified, failed, expired, canceled; pending and expired are read by the clock, as GET /v1/verify/{id} reads them.
The mode of the key that sent the code: partner for your key.
Your own reference, exactly.
Only rows created at or after this ISO 8601 date or datetime.
Only rows created at or before this ISO 8601 date or datetime.
The next_cursor of the previous page: the rows after it.
Page size, 1 to 100; 50 when omitted.