# GET /cvs

> List CVs stored for your company, with pagination and creation-date filters. Requires CV storage to be enabled.

Source: https://www.remakecv.com/help/api-reference/endpoints/list-cvs
Last updated: 2026-08-21

---
`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**

- `page` _integer_ — 
Page number, starting at 1. Defaults to the first page.

- `page_size` _integer_ — 
Results per page. Maximum 1000. Out-of-range values are **silently clamped**, not rejected.

- `created_from` _string (date-time)_ — 
Only return CVs created at or after this timestamp. ISO 8601.

- `created_to` _string (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_available` _boolean_ — 
Always `true` on this endpoint — it does not currently reflect real file availability. Do not branch on it here. On [`GET /cvs/{cvId}`](https://www.remakecv.com/help/api-reference/endpoints/get-cv.md) 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`.

## Related

- [`GET /cvs/{cvId}`](https://www.remakecv.com/help/api-reference/endpoints/get-cv.md) — one record in detail
- [CV history](https://www.remakecv.com/help/formatting-cvs/cv-history.md) — 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.
