Converting a file
One endpoint does the work. POST a file and a target format, get back a job — finished if it was quick, queued if it was not.
Authentication
Every endpoint except the format catalogue needs an API key, sent as a bearer token. Create one on the Automate page in your account; it is shown once and stored only as a hash, so a key you lose cannot be recovered — issue a new one instead.
API access is part of the Plus plan. A key belonging to an account without it is rejected with NOT_ENTITLED.
Authorization: Bearer rlv_your_key_hereThe request
POST https://rework.live/api/v1/convert, as multipart/form-data, with exactly two fields: the target format and the file itself. Field order does not matter.
curl -X POST https://rework.live/api/v1/convert \
-H "Authorization: Bearer rlv_your_key_here" \
-F "to=webp" \
-F "file=@photo.png"| Field | Type | Description |
|---|---|---|
| to | string | Target format id, for example pdf, webp, mp4 |
| file | file | The file to convert. One per request. |
The response
Always JSON, never raw bytes, and always the same shape whether the conversion finished or was queued. A client that had to branch on the content type to know what it received is a client that will eventually get it wrong.
200 means the job is done and download is ready. 202 means it was queued: status_url is where to poll and download is null until it finishes.
{
"job": {
"id": "6a84860000000000000000ab",
"status": "done",
"from": "png",
"to": "webp",
"bytes": 48213,
"durationMs": 412,
"notes": [],
"expiresAt": "2026-09-03T10:22:31.000Z",
"download": "https://rework.live/api/v1/jobs/6a84860000000000000000ab/download",
"status_url": null,
"queuePosition": null,
"estimateMs": null
}
}Getting the bytes directly
Add ?download=1 if you would rather have the file than a link. A conversion that finishes inline then returns the bytes; one that queues still returns 202 with JSON, because there is nothing to send yet.