# GET /cvs/{cvId}/file

> Get a short-lived signed URL for a stored CV file. Fetch a fresh URL each time rather than storing the one you were given.

Source: https://www.remakecv.com/help/api-reference/endpoints/get-cv-file
Last updated: 2026-08-21

---
`GET /cvs/{cvId}/file` returns a signed URL for the stored CV, valid for **one hour**. The file is always served as a **PDF** — Word uploads are converted. It is the source CV you uploaded, not a document rendered into your template. Request a fresh URL each time rather than persisting one.

## Request

`GET /cvs/{cvId}/file` · **Authentication required**

- `cvId` _integer_ (required) — 
The stored CV's identifier.

```bash
curl "https://app.remakecv.com/api/public/v1/cvs/1234/file" \
  -H "Authorization: Bearer $REMAKECV_API_KEY"
```

## Response

```json
{
  "data": {
    "url": "https://storage.googleapis.com/...",
    "expires_in": 3600
  },
  "pagination": null,
  "error": null
}
```

- `url` _string_ — 
Signed download URL for the stored CV, always a PDF. In practice this is never `null` on a 200 response — a genuinely missing file surfaces as `500 internal_error` instead.

- `expires_in` _integer_ — 
Seconds until the URL stops working. Currently `3600`.

> **Note:** 
The file is the **source CV**, converted to PDF where it was uploaded as Word. RemakeCV's public API does not render CVs into your template — see [`POST /cvs/process`](https://www.remakecv.com/help/api-reference/endpoints/process-a-cv.md).

## How should I use it?

### Store the id, not the URL

Persist `cvId` in your own system. Signed URLs are ephemeral by design.

### Fetch on demand

Call this endpoint at the moment a user asks for the file, then redirect or stream.

### Download server-side where you can

Fetching the file on your server and serving it through your own authenticated route keeps the signed URL out of browsers, logs and referrer headers.

> **Warning:** 
A signed URL grants access to a candidate's CV to anyone holding it, with no authentication. Do not put one in an email, a shared document, a client-side log or a support ticket.

## Related

- [`GET /cvs`](https://www.remakecv.com/help/api-reference/endpoints/list-cvs.md) — find the `cvId` to pass here
- [Sync formatted CVs back to your ATS](https://www.remakecv.com/help/api-reference/recipes/sync-to-your-ats.md) — where this endpoint is normally used

## 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 |
| `404` | `not_found` | No such CV for this company |
| `429` | `rate_limit_exceeded` | Over the rate limit |

## Frequently asked questions

### How long is the URL valid?

One hour, reported as expires_in: 3600. Fetch a fresh URL rather than storing one.

### What format is the file?

Always PDF. Word uploads are converted. It is the source CV you uploaded, not a template-rendered document.

### Can I share the signed URL with a client?

Technically it works until expiry, but it is a bad idea — it grants unauthenticated access to candidate personal data. Download the file and send it through your normal channel.
