واجهة السحب
ترقيم الصفحات
تُرقَّم نقطة نهاية المعاملات بمؤشر معتم. مرر next_cursor مع المرشحات نفسها حتى تصبح has_more خاطئة. لا سجلات متخطاة ولا مكررة.
للتنقل بين النتائج، كرر الطلب مع cursor=<next_cursor> والمرشحات نفسها حتى تصبح has_more هي false. المؤشر معتم ومبني على مجموعة المفاتيح، لذا لا تسبب المعاملات الجديدة الواصلة أثناء المزامنة أي تخطٍّ أو تكرار.
تستخدم نقطة نهاية المعاملات ترقيم صفحات بالمؤشر (keyset). تتضمن كل استجابة كائن pagination:
{
"pagination": {
"limit": 100,
"has_more": true,
"next_cursor": "eyJ0IjoiMjAyNi0wOS0yMFQwODo1OTozNi4zNDBaIiwiaWQiOjE4NTQzMn0"
}
}| الحقل | الوصف |
|---|---|
limit | حجم الصفحة المطبق. |
has_more | true إذا وُجدت صفحة أخرى. |
next_cursor | رمز معتم للصفحة التالية. null عندما تكون has_more هي false. |
كيف أتنقل بين الصفحات؟
- نفّذ الطلب الأول بمرشحاتك دون
cursor. - طالما
has_moreهيtrue، كرر الطلب بالمرشحات نفسها وcursor=<next_cursor>. - توقف عندما تصبح
has_moreهيfalse.
تُرتَّب النتائج الأحدث أولًا حسب created_at ثم id. ولأن المؤشر يشفّر موضع آخر سجل لا إزاحة رقمية، فإن المعاملات الواصلة أثناء التنقل لا تسبب تخطي سجلات أو تكرارها.
القواعد
- تعامل مع المؤشر كقيمة معتمة. قد تتغير صيغته؛ لا تحلّله ولا تبنِه.
- مرر دائمًا قيم
fromوtoوcorporate_idوcorporate_group_idوstatusنفسها مع كل صفحة. المؤشر لا معنى له إلا للاستعلام الذي أنتجه. - استخدم
limit=100للمزامنات الكبيرة لتقليل عدد الطلبات مقابل حد المعدل.
مثال: جلب نطاق كامل
async function* transactions(apiKey, filters) {
const base = 'https://prod-app.octanetech-api.com/api/v1/integration/transactions';
let cursor;
do {
const url = new URL(base);
for (const [k, v] of Object.entries(filters)) url.searchParams.set(k, String(v));
url.searchParams.set('limit', '100');
if (cursor) url.searchParams.set('cursor', cursor);
const res = await fetch(url, { headers: { 'X-API-Key': apiKey } });
if (!res.ok) throw new Error(`Octane API ${res.status}: ${await res.text()}`);
const { data, pagination } = await res.json();
yield* data;
cursor = pagination.has_more ? pagination.next_cursor : undefined;
} while (cursor);
}
for await (const tx of transactions(process.env.OCTANE_API_KEY, {
from: '2026-09-01T00:00:00Z',
to: '2026-09-30T23:59:59Z',
})) {
console.log(tx.id, tx.status, tx.fees.total_amount);
}كيف أجلب أكثر من 31 يومًا؟
يغطي الطلب الواحد 31 يومًا كحد أقصى. لمزامنة فترة أطول، قسّمها إلى نوافذ متتالية وتنقّل عبر كل واحدة:
function* windows(from, to, days = 31) {
let start = new Date(from);
const end = new Date(to);
while (start < end) {
const next = new Date(Math.min(start.getTime() + days * 86_400_000, end.getTime()));
yield [start.toISOString(), next.toISOString()];
start = next;
}
}

