Paginating Behance Project Collections with the Deprecated v1 API
Behance API v1 caps project results at 12 items per page. Learn how to paginate safely despite deprecation, privacy limits, and rate constraints.
02 Oct 2026, 04:35 UTC

Desired Outcome: A Complete Project List from a 12-Item API
Behance’s v1 /projects endpoint returns at most 12 records per page. If you need to collect every project in a portfolio, you must paginate—request page 1, then page 2, and so on—until the API returns an empty or partial page. Because v1 is deprecated, the pagination contract may change without notice, so treat the response shape as something to verify on every run rather than a fixed guarantee.
Prerequisites
- A Behance API key or OAuth 2.0 access token. The API key is sufficient for public project data; OAuth 2.0 is required when the target data belongs to a protected user account.
- An HTTP client capable of sending GET requests and reading response headers (cURL, Postman, or a language-specific library).
- Awareness that the endpoint is version 1 and may be discontinued. Treat this integration as temporary and plan for a migration path.
Focused Procedure
Run the following from your terminal or from within your application’s HTTP layer. Replace YOUR_API_KEY with your credential.
curl -s -D - \
"https://api.behance.net/v1/projects?api_key=YOUR_API_KEY&page=1&per_page=12" \
-o page1.json
The page parameter starts at 1. The per_page parameter accepts a maximum of 12. If you omit per_page, the API applies its own default, so always set it explicitly.
After the first request, increment page and repeat until the response contains fewer than 12 projects or zero projects. Store each page’s array locally before requesting the next one. If you need to scope results to a specific creator, consult the current API reference for the exact filter parameter name, because undocumented parameters may be ignored or rejected.
Expected Checks
Before trusting the collected data, verify three things:
- Field presence: Each project object should contain
id,name,description,url,images,tags,likes,views,created_time, andmodified_time. If a field is missing, your parser should skip the record rather than crash. - Pagination completeness: Compare the count of unique project IDs across pages. If page 2 returns the same IDs as page 1, the pagination cursor may have reset or the endpoint may have changed behavior.
- Rate limit headers: Authenticated requests are limited to 20,000 per hour. Inspect response headers for remaining quota. If you approach the ceiling, pause and wait before retrying—back off—rather than hammering the endpoint.
Recovery Options
Because this is a read-only retrieval operation, there is no state to roll back. However, you should handle these failure modes:
- Empty or partial collections: A user’s privacy settings can hide projects from the public API. If a page returns zero items but you know the portfolio is larger, the missing records are likely private and cannot be recovered through this endpoint.
- Broken image URLs: The
imagesarray contains cover art at multiple resolutions. These URLs are not permanent. If a project is updated or deleted, previously returned image links may fail. Download and cache images immediately if you need long-term access. - Endpoint drift: If the response structure changes—for example, if
per_pageis ignored or new error codes appear—stop the sync, log the raw response, and verify the current API documentation before proceeding.
Practical Verification
After your script finishes, open the first and last page files and confirm that the id values do not overlap. Then request a single known project to ensure the base endpoint still responds. If the API has been discontinued, you will receive an HTTP error or an empty payload; treat that as a signal to halt the integration and seek an alternative data source.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.