GET /v1/domains and GET /v1/emails/{email_id}/messages accept limit and cursor query parameters.
has_more is true, send next_cursor unchanged as the next request’s cursor. Never decode, modify, cache indefinitely, or construct a cursor. It is an opaque, signed continuation bound to its query context.
Stop when has_more is false or your workflow deadline is reached. A cursor request is a normal authenticated operation and is accounted according to the endpoint contract.
Invalid or context-mismatched cursors return a structured 400 response. Correct the request rather than retrying it unchanged.