GET /cvs
List CVs stored for your company, with pagination and creation-date filters. Requires CV storage to be enabled.
GET /cvs returns a paginated list of the CVs RemakeCV has stored for your company, each with the candidate name, latest employer, latest role and processing method. Supports page, page_size and created_from / created_to date filters. Requires CV storage to be enabled.
Request
GET /cvs · Authentication required
pageintegerPage number, starting at 1. Defaults to the first page.
page_sizeintegerdefault: 100Results per page. Maximum 1000. Out-of-range values are silently clamped, not rejected.
created_fromstring (date-time)Only return CVs created at or after this timestamp. ISO 8601.
created_tostring (date-time)Only return CVs created at or before this timestamp. ISO 8601.
curl "https://app.remakecv.com/api/public/v1/cvs?page=1&page_size=100" \
-H "Authorization: Bearer $REMAKECV_API_KEY"Response
{
"data": [
{
"id": 1234,
"created_at": "2026-08-14T09:12:33.000Z",
"updated_at": "2026-08-14T09:15:02.000Z",
"candidate_name": "Alex Morgan",
"latest_company": "Northwind Logistics",
"latest_role": "Operations Manager",
"processing_method": "text",
"file_available": true
}
],
"pagination": {
"page": 1,
"page_size": 100,
"total": 842,
"total_pages": 9
},
"error": null
}file_availablebooleanAlways true on this endpoint — it does not currently reflect real file availability. Do not branch on it here. On GET /cvs/{cvId} it is genuine.
This endpoint and GET /cvs/{cvId} differ in how they report missing data. GET /cvs substitutes the strings "Unknown" for a missing candidate name and "N/A" for a missing employer or role. GET /cvs/{cvId} returns null for the same fields. Handle both, or you will treat "Unknown" as a real candidate.
Results are ordered by created_at descending.
Paging through everything
async function* allCvs(fetchPage) {
let page = 1;
let totalPages = 1;
do {
const { data, pagination } = await fetchPage(page, 1000);
totalPages = pagination.total_pages;
yield* data;
page += 1;
} while (page <= totalPages);
}Each page is one request against your rate limit of 30 per minute. A 9-page export is fine; a nightly full sync of a large archive should use created_from to fetch only what changed.
Because ordering is newest-first, a CV processed mid-export shifts every subsequent row by one and you can miss records. For a consistent snapshot, bound the export with created_to.
Related
GET /cvs/{cvId}— one record in detail- CV history — the same data in the web app
Errors
| Status | Code | Cause |
|---|---|---|
401 | invalid_api_key | Key invalid, revoked or expired |
403 | api_disabled | Public API not enabled |
403 | cv_storage_disabled | CV storage is off for this company |
429 | rate_limit_exceeded | Over the rate limit |
Frequently asked questions
- What is the maximum page size?
- 1000. For a full export, page through rather than requesting everything at once.
- Why do I get 403 cv_storage_disabled?
- Your company has CV storage turned off, so there is nothing stored to list. Enable storage or capture download_url at processing time instead.
- Can I filter by candidate name?
- Not directly. Filter by date range and match on candidate_name client-side.
- Can I see which consultant processed each CV?
- Not through the public API. The listing is company-scoped and does not return or filter by user.
Related articles
Last updated . Still stuck? Email support@remakecv.com or book a call.