--- title: "Using the API" description: "Create Reactive Resume API keys, authenticate REST requests with bearer tokens, and integrate resume data into your own scripts, apps, or automations." --- Head over to [https://rxresu.me](https://rxresu.me) and sign in with your account credentials. In the dashboard sidebar on the left, under Settings, click the API Keys link. On the API Keys page, click API Documentation to open the API reference. You can also open it directly here: [API Reference](https://docs.rxresu.me/api-reference). Click Create a new API key. Fill in: - **Name**: A label to help you identify what you use this key for - **Expires in**: How long the key should remain valid The secret key is shown once, right after you create it. Copy it and store it somewhere safe. For security reasons, your API key is only displayed once. If you lose it, you must create a new one. To authenticate API requests, include your key in the x-api-key header. If you're self-hosting, replace https://rxresu.me with your instance URL. The API is served under /api/openapi. ```bash curl "https://rxresu.me/api/openapi/resumes" \ -H "x-api-key: YOUR_API_KEY" ``` In the API Keys list, click the trash icon next to a key and confirm deletion. Deleted API keys stop working immediately, and the action cannot be undone. ## Cover-letter REST endpoint migration Cover-letter REST operations now use `/cover-letters` resource paths and HTTP methods instead of the automatically generated `/coverLetters/*` POST endpoints. This is a **breaking change for REST clients**: the old REST URLs are no longer served and return `404`. There are no compatibility aliases. All paths below are relative to `/api/openapi` on your instance. Authentication with `x-api-key` is unchanged. | Previous endpoint | Replacement endpoint | | --- | --- | | `POST /coverLetters/list` | `GET /cover-letters` | | `POST /coverLetters/getById` | `GET /cover-letters/{id}` | | `POST /coverLetters/create` | `POST /cover-letters` | | `POST /coverLetters/update` | `PUT /cover-letters/{id}` | | `POST /coverLetters/refreshStyle` | `POST /cover-letters/{id}/refresh-style` | | `POST /coverLetters/duplicate` | `POST /cover-letters/{id}/duplicate` | | `POST /coverLetters/delete` | `DELETE /cover-letters/{id}` | | `POST /coverLetters/copyEmbedded` | `POST /cover-letters/from-resume` | | `POST /coverLetters/export` | `GET /cover-letters/{id}/export` | | `POST /coverLetters/import` | `POST /cover-letters/import` | Update request inputs as well as the URL and method: - Move `id` from the JSON body into the URL path wherever `{id}` appears. URL-encode the ID as a single path segment. - For listing, send `search`, `resumeId`, `applicationId`, `limit`, and `offset` as query parameters, not a JSON body. The get-by-ID and export operations also have no request body. - Keep the remaining inputs as JSON for POST, PUT, and DELETE requests, with `Content-Type: application/json`. In particular, `expectedRevision` remains required in the JSON body for update, refresh-style, and delete; refreshing style also requires `resumeId`. - Create, copy-from-resume, and import keep their existing JSON inputs. Update still modifies only the supplied fields; it does not replace the entire document. - Successful operations return `200`, including create and delete. Delete has an empty response body; do not expect `204` or parse a JSON document from it. Other response shapes are unchanged. For example, list cover letters with query parameters: ```bash curl --get "https://rxresu.me/api/openapi/cover-letters" \ -H "x-api-key: YOUR_API_KEY" \ --data-urlencode "search=Engineer" \ --data-urlencode "limit=20" ``` If you generate an SDK, regenerate it from your instance's `/api/openapi/spec.json` after upgrading: operation IDs have changed too (for example, `coverLetters.getById` is now `getCoverLetter`). Self-hosted clients should use the spec from the version they are running. This migration applies only to REST under `/api/openapi`. Existing oRPC clients under `/api/rpc` continue to use the same `coverLetters.*` procedure names and RPC protocol; do not apply the REST path or payload changes to them.