Enterprise API Pagination
When retrieving paginated results, always navigate sequentially (page 1 → 2 → 3, etc.). Jumping arbitrarily to non-sequential pages may return inconsistent results or use different backend search modes.
Sequential Pagination
Always move through pages in order. Use the has_more / hasMore flag to know when to stop.
page = 1
while True:
results = client.search_videos(
q="nature",
page=page,
per_page=50
)
for video in results.videos:
process_video(video)
if not results.has_more:
break
page += 1
let page = 1;
while (true) {
const results = await client.searchVideos({
q: 'nature',
page,
perPage: 50
});
for (const video of results.videos) {
processVideo(video);
}
if (!results.hasMore) break;
page++;
}
Page Size
Adjust per_page / perPage based on your needs (1–80 results per page).
- Small pages (10–20): For interactive UI with quick response times
- Large pages (50–80): For bulk operations and data exports
Keep the page size consistent while paginating. Changing it mid-pagination can cause duplicate or missing results.
# ✓ Correct: Keep per_page consistent
for page in range(1, 11):
results = client.search_videos(q="test", page=page, per_page=50)
# ... process results
# ✗ Incorrect: Changing per_page mid-pagination
for page in range(1, 11):
per_page = 10 if page == 1 else 50 # DON'T DO THIS
results = client.search_videos(q="test", page=page, per_page=per_page)
// ✓ Correct: Keep perPage consistent
for (let page = 1; page <= 10; page++) {
const results = await client.searchVideos({ q: 'test', page, perPage: 50 });
// ... process results
}
// ✗ Incorrect: Changing perPage mid-pagination
for (let page = 1; page <= 10; page++) {
const perPage = page === 1 ? 10 : 50; // DON'T DO THIS
const results = await client.searchVideos({ q: 'test', page, perPage });
}
Use Search ID for Analytics
Each search returns a search_id / searchId. Keep this consistent across all pages from the same search to track the complete user journey:
first_page = client.search_videos(q="nature", page=1, per_page=50)
search_id = first_page.search_id
# Later, download videos from this search
download = client.download_video(
video_id="video_xyz",
search_id=search_id # Track back to original search
)
const firstPage = await client.searchVideos({ q: 'nature', page: 1, perPage: 50 });
const searchId = firstPage.searchId;
// Later, download videos from this search
const download = await client.downloadVideo('video_xyz', {
searchId // Track back to original search
});
Handling Empty Results
If no results match your query:
results = client.search_videos(q="nonexistent_query_xyz")
if not results.videos:
print("No videos found for this query.")
else:
print(f"Found {len(results.videos)} videos.")
const results = await client.searchVideos({ q: 'nonexistent_query_xyz' });
if (results.videos.length === 0) {
console.log('No videos found for this query.');
} else {
console.log(`Found ${results.videos.length} videos.`);
}
Collecting All Results
To collect all results from a search into a single list:
all_videos = []
page = 1
while True:
results = client.search_videos(
q="nature",
page=page,
per_page=80 # Max page size
)
all_videos.extend(results.videos)
if not results.has_more:
break
page += 1
print(f"Total videos: {len(all_videos)}")
const allVideos = [];
let page = 1;
while (true) {
const results = await client.searchVideos({
q: 'nature',
page,
perPage: 80 // Max page size
});
allVideos.push(...results.videos);
if (!results.hasMore) break;
page++;
}
console.log(`Total videos: ${allVideos.length}`);
Limiting Results
To stop after a certain number of results:
all_videos = []
limit = 1000
page = 1
while len(all_videos) < limit:
results = client.search_videos(
q="nature",
page=page,
per_page=min(80, limit - len(all_videos))
)
all_videos.extend(results.videos)
if not results.has_more:
break
page += 1
print(f"Collected {len(all_videos)} videos (limited to {limit})")
const allVideos = [];
const limit = 1000;
let page = 1;
while (allVideos.length < limit) {
const results = await client.searchVideos({
q: 'nature',
page,
perPage: Math.min(80, limit - allVideos.length)
});
allVideos.push(...results.videos);
if (!results.hasMore) break;
page++;
}
console.log(`Collected ${allVideos.length} videos (limited to ${limit})`);
Key Rules:
1. Always paginate sequentially (page 1 → 2 → 3)
2. Keep per_page/perPage consistent while paginating
3. Check has_more/hasMore to know when to stop
4. Preserve search_id/searchId for analytics