Belgelere geç
Python

Sayfalama

Tek sayfa için `list`, tüm sayfalar için `list_all` ve her seferinde tek öğe için `iterate`.

Tek sayfa: list

list_page.py
cursor: str | None = None while True:    page = client.emails.list(status='failed', limit=50, cursor=cursor)     for email in page['items']:        print(email['id'], email['lastError'])     if not page['hasMore'] or page['nextCursor'] is None:        break     cursor = page['nextCursor']

Bir sayfa {'items': [...], 'hasMore': ..., 'nextCursor': ...} biçimindedir. Sonraki sayfa için nextCursor değerini aynı filtrelerle cursor= olarak geri geçirin.

Son sayfada nextCursor değeri None olur ve hasMore bu sayfanın ötesinde eşleşen başka satır olup olmadığını söyler. openemail.types içinde bir sayfa Page[T] olarak tanımlıdır; bu yüzden emails.list bir Page[EmailResource] döndürür ve bir tür denetleyicisi her öğenin ne taşıdığını bilir.

API, konuşmaları ve taslakları bir pageToken ile sayfalar. İstemci bunu diğer tüm listelerde olduğu gibi size nextCursor olarak verir ve cursor= olarak geri alır; list_all ve iterate bunu sizin için izler. Opaktır: size verileni geri geçirin ve asla kendiniz oluşturmayın.

Tüm sayfalar: list_all

list_all.py
complaints = client.suppressions.list_all(reason='complaint')print(len(complaints), [row['email'] for row in complaints]) book = client.addresses.list_all()print(book['unrestricted'], len(book['addresses']), len(book['domains']))

list_all, nextCursor değerini son sayfaya kadar izler ve tek bir list döndürür. Dönmeden önce her sayfa getirilir; bu yüzden ona sonu olan bir filtre verin.

Başka bir şey döndüren tek metot addresses.list_all'dır: her sayfanın adreslerini içeren adres defterinin tamamı, {'unrestricted': ..., 'addresses': [...], 'domains': [...]}.

Tek tek: iterate

iterate.py
from itertools import islice for email in client.emails.iterate(status='bounced'):    if email['createdAt'] < '2026-09-01':        break     print(email['id'], email['lastError']) first_ten = list(islice(client.threads.iterate(folder='inbox'), 10))print([thread['id'] for thread in first_ten])

iterate bir üreteç döndürür. Onu çağırmak hiçbir şey göndermez: ilk sayfa, döngü ilk öğesini istediğinde getirilir; sonraki her sayfa ise ancak döngü bir öncekinin sonuna ulaştığında. Döngüden çıkmak ya da itertools.islice ile bir dilim almak istekleri durdurur.

list_all ve iterate üzerindeki limit=, getirdikleri her sayfanın boyutudur, kaç öğe alacağınıza dair bir üst sınır değildir; bu yüzden daha büyük bir limit daha az istek demektir. cursor=, gezinmeyi zaten elinizde olan bir sayfadan başlatır. İkisi de hasMore false olduğunda ya da nextCursor None olduğunda durur; ayrıca bir sayfa kendisini getiren cursor'ı gösterdiğinde de durur, böylece hatalı davranan bir sayfa sonsuza dek döngüye giremez.

Bir ad alanının içindeki listeler

list_all ve iterate, yanlarındaki list ile aynı uç noktada sayfa sayfa ilerler; gezindikleri listenin adını taşıyan diğer çiftler de öyle. Her çift, kendi listesiyle aynı filtreleri alır.

Ad alanıTek sayfaTüm sayfalarTek tek
emailslist_eventslist_all_eventsiterate_events
calendarlist_eventslist_all_eventsiterate_events
templateslist_versionslist_all_versionsiterate_versions
templateslist_imageslist_all_imagesiterate_images
trackinglist_openslist_all_opensiterate_opens
trackinglist_clickslist_all_clicksiterate_clicks
ruleslist_runslist_all_runsiterate_runs
audienceslist_contactslist_all_contactsiterate_contacts
broadcastslist_recipientslist_all_recipientsiterate_recipients
contactslist_peoplelist_all_peopleiterate_people
contactslist_threadslist_all_threadsiterate_threads
domainslist_addresseslist_all_addressesiterate_addresses
formslist_submissionslist_all_submissionsiterate_submissions
memberslist_invitationslist_all_invitationsiterate_invitations
fileslist_linkslist_all_linksiterate_links
temp_maillist_messageslist_all_messagesiterate_messages
webhookslist_deliverieslist_all_deliveriesiterate_deliveries
webhookslist_workspace_deliverieslist_all_workspace_deliveriesiterate_workspace_deliveries
webhookslist_activitylist_all_activityiterate_activity
webhookslist_workspace_activitylist_all_workspace_activityiterate_workspace_activity
keyslist_requestslist_all_requestsiterate_requests
keyslist_activitylist_all_activityiterate_activity
keyslist_workspace_requestslist_all_workspace_requestsiterate_workspace_requests
keyslist_workspace_activitylist_all_workspace_activityiterate_workspace_activity

Daha fazlasını taşıyan sayfalar

other_pages.py
people = client.contacts.list_people(sort='recent', limit=50)print(len(people['items']), people['seen'], people['nextCursor']) sends = client.templates.list_sends('order-shipped', page=2, page_size=50)print(sends['total'], sends['page'], sends['pageSize'], len(sends['items']))

Birkaç liste bir sayfadan fazlasını taşır. contacts.list_people, items, hasMore ve nextCursor yanına seen ekler; temp_mail.list_messages expiresAt ekler; addresses.list ise items yerine addresses döndürür, yanında unrestricted, domains, hasMore ve nextCursor bulunur. Her biri yine cursor= ile devam eder ve kendi list_all ve iterate metotlarıyla baştan sona gezilir.

İki liste başka bir şekilde sayfalanır. templates.list_sends sayfaları sayar: page= ve page_size= geçirin ve items yanında total, page ve pageSize değerlerini okuyun. imports.list_failures, API'nin gönderdiği gibi bırakılır, {'object': 'list', 'data': [...], 'nextCursor': ...}, ve nextCursor içindeki sayı olan after= ile devam eder. İkisinin de list_all ya da iterate metodu yoktur.

Sayfa boyutları

Çoğu liste 1 ile 100 arasında bir limit= alır ve varsayılanı 25'tir; bunlar PAGE_LIMITS içindeki iki sayıdır (PAGE_LIMITS.MAX_LIMIT ve PAGE_LIMITS.DEFAULT_LIMIT). contacts.list, audiences.list_contacts, broadcasts.list_recipients ve tracking listeleri varsayılanı 50 olmak üzere en fazla 200 alır; temp_mail.list_messages ise en fazla 50 alır. Aralığın dışındaki bir değer sınıra çekilmez, 422 ile reddedilir.

AsyncOpenEmail üzerinde

Asenkron istemci de aynı şekilde sayfalar. list ve list_all await ile çağrılır; iterate ise çağrının önüne await koymadan async for ile üzerinde döndüğünüz bir asenkron yineleyici döndürür.

async_pages.py
import asyncio from openemail import AsyncOpenEmail  async def main() -> None:    async with AsyncOpenEmail() as client:        page = await client.emails.list(status='failed', limit=50)        print(len(page['items']), page['nextCursor'])         everyone = await client.members.list_all()        print(len(everyone))         async for delivery in client.webhooks.iterate_deliveries('whe_…', status='failed'):            print(delivery['eventType'], delivery['responseCode'])  asyncio.run(main())