Pagination & Rate Limit
Pagination
OmniStream memakai dua gaya pagination.
Page-based (daftar relasional)
Endpoint daftar seperti /api/conversations, /api/contacts, dan
/api/campaigns menerima query page (mulai 1) dan per_page (maks 100).
Code
Bentuk responsnya ada dua, dan ini mudah keliru:
- Array polos —
/api/conversations,/api/wa-templates, dan sejenisnya mengembalikan array JSON langsung. Halaman terakhir tercapai saat jumlah item yang dikembalikan kurang dariper_page. - Envelope pagination —
/api/contactsdan/api/messages/searchmembungkus barisnya:{ data | results, total, page, per_page, total_pages }. Jangan perlakukan responsnya sebagai array; pakaitotal_pagesuntuk tahu batas halaman.per_pageuntuk/api/messages/searchdi-clamp 1..50 (bukan 100), dan endpoint itu tidak mengenallimit.
Cursor-based (pesan)
Daftar pesan /api/conversations/{id}/messages memakai cursor (hex ObjectId
MongoDB), diurutkan dari yang terbaru:
Code
TypeScript SDK menyediakan client.paginate() yang
otomatis menelusuri seluruh halaman sebagai async iterator — hanya untuk
endpoint yang mengembalikan array polos. Untuk endpoint ber-envelope pakai
client.contacts.listPage() / client.messages.search().
Rate limiting
API menerapkan rate limit per klien. Saat terlampaui, server membalas
HTTP 429 dengan header Retry-After (detik).
Perilaku klien yang disarankan:
- Hormati
Retry-Aftersebelum mencoba lagi. - Gunakan exponential backoff + jitter untuk retry.
- Hanya retry otomatis untuk request idempoten (GET). Untuk POST, retry
hanya pada 429 (belum diproses) — atau kirim
Idempotency-Keyagar aman di-retry pada kegagalan jaringan.
SDK resmi sudah menerapkan semua ini secara default.