RemakeCV

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

pageinteger

Page number, starting at 1. Defaults to the first page.

page_sizeintegerdefault: 100

Results 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.

bash
curl "https://app.remakecv.com/api/public/v1/cvs?page=1&page_size=100" \
  -H "Authorization: Bearer $REMAKECV_API_KEY"

Response

json
{
  "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_availableboolean

Always 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.

Warning:

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

javascript
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);
}
Warning:

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.

Errors

StatusCodeCause
401invalid_api_keyKey invalid, revoked or expired
403api_disabledPublic API not enabled
403cv_storage_disabledCV storage is off for this company
429rate_limit_exceededOver 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

Was this page helpful?

Last updated . Still stuck? Email support@remakecv.com or book a call.