Liste döndüren uçlar imleç (cursor) ile sayfalanır. Sayfa numarası ya da offset yoktur. Her yanıt bir sonraki sayfa için bir imleç verir.
#Nasıl çalışır
- İlk isteği
cursorolmadan, isteğe bağlılimitile yapın. - Yanıttaki
next_cursordeğerini bir sonraki istektecursorparametresine verin. has_more: false(ya danext_cursor: null) olduğunda durun.
curl "https://api.verimerkezi.app/wa/contacts?limit=50" \
-H "Authorization: Bearer $VM_API_KEY"{
"ok": true,
"contacts": [
{ "id": 26481, "phone": "+905550000000", "name": "Ayşe Yılmaz" }
],
"next_cursor": "eyJpZCI6MjY0ODEsImsiOiJpZCIsImQiOiJkZXNjIn0",
"has_more": true
}curl "https://api.verimerkezi.app/wa/contacts?limit=50&cursor=eyJpZCI6MjY0ODEsImsiOiJpZCIsImQiOiJkZXNjIn0" \
-H "Authorization: Bearer $VM_API_KEY"#Uç bazında yanıt zarfı
Liste alanının adı ve imlecin türü uca göre değişir:
| Uç | Liste alanı | İmleç | Sıra | limit (vars. / en çok) |
|---|---|---|---|---|
GET /contacts | contacts | next_cursor, opak metin | yeniden eskiye | 50 / 200 |
GET /contacts/opted-out | contacts | next_cursor, opak metin | yeniden eskiye | 50 / 200 |
GET /credit/transactions | transactions | next_cursor, opak metin | yeniden eskiye | 50 / 200 |
GET /templates | templates | next_cursor, tamsayı | yeniden eskiye | 50 / 100 |
GET /media | media | paging.next_cursor, tamsayı | yeniden eskiye | 50 / 100 |
GET /messages | data | next_cursor, tamsayı | eskiden yeniye | 50 / 100 |
GET /calls | calls | next_cursor | yeniden eskiye | 50 / 100 |
GET /flows | flows | paging.after (Meta imleci, after parametresiyle) | Meta sırası | — / 100 |
GET /media yanıtında imleç iç içe paging nesnesindedir: { "media": [...], "paging": { "limit": 50, "has_more": true, "next_cursor": 13115 } }.#Tüm kayıtları çekin
const tum = [];
let cursor = null;
do {
const url = new URL('https://api.verimerkezi.app/wa/contacts');
url.searchParams.set('limit', '200');
if (cursor) url.searchParams.set('cursor', cursor);
const r = await (await fetch(url, { headers: { Authorization: `Bearer ${process.env.VM_API_KEY}` } })).json();
tum.push(...r.contacts);
cursor = r.has_more ? r.next_cursor : null;
} while (cursor);
console.log(`${tum.length} kişi`);import os, requests
tum, cursor = [], None
while True:
params = {"limit": 200}
if cursor:
params["cursor"] = cursor
r = requests.get("https://api.verimerkezi.app/wa/contacts", params=params,
headers={"Authorization": f"Bearer {os.environ['VM_API_KEY']}"}).json()
tum.extend(r["contacts"])
if not r["has_more"]:
break
cursor = r["next_cursor"]
print(len(tum), "kişi")<?php
$tum = [];
$cursor = null;
do {
$q = http_build_query(array_filter(['limit' => 200, 'cursor' => $cursor]));
$ch = curl_init('https://api.verimerkezi.app/wa/contacts?' . $q);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VM_API_KEY')]]);
$r = json_decode(curl_exec($ch), true);
$tum = array_merge($tum, $r['contacts']);
$cursor = $r['has_more'] ? $r['next_cursor'] : null;
} while ($cursor);
echo count($tum) . " kişi\n";#Süzgeçle birlikte
Süzgeçleri (q, status, source vb.) imleçle birlikte kullanabilirsiniz. Tutarlı sonuç için sayfalar boyunca süzgeci değiştirmeyin.
#Önceki sayfa
İmleç tabanlı sayfalama geriye gitmez. "Önceki" düğmesi gerekiyorsa gördüğünüz imleçleri istemci tarafında bir yığında saklayın.
#Mesaj kayıtlarında artımlı okuma
GET /messages, kaçan webhook olaylarını geri almak içindir ve kayıtları eskiden yeniye döndürür. since (en fazla 90 gün geriye) ile başlayın; her sayfadaki next_cursor değerini saklayıp sonraki çağrıda verin. Ayrıntı: Mesaj kayıtlarını listele.
