# Upwork job detail: `POST /v1/upwork/job`

Cost: 2 credits (2 (an unknown job and failed requests are free)). Docs: https://scrapercompany.com/docs/reference/upwork-job

One Upwork job in full, by `ciphertext` or its Upwork link.

The signed-out job page (`/freelance-jobs/apply/<ciphertext>/`,
which Upwork redirects to `/freelance-jobs/apply/<slug>_<ciphertext>/`). `/jobs/<ciphertext>` is the logged-in app and is
accepted only as an id, not fetched. The search
row plus category and category group, the budget currency, the
workload and engagement duration in weeks, the contract-to-hire
flag, and client activity (applicants, hired, interviews).

The signed-out job page does not embed the job's skill list (the
payload's skill objects belong to the similar-jobs rail), so
`skills` is empty here; search rows carry the skills. A closed or
unknown job is a 404 and is not billed. A block or a spent time
budget is 503 with `Retry-After` and is not billed.

Request body (JSON):

- `ciphertext` (string | null; optional; pattern ^~0[0-9a-zA-Z]{10,40}$): Upwork's job ciphertext: `ciphertext` of a row from `POST /v1/upwork/jobs`.
- `url` (string | null; optional; min length 12, max length 2000): An Upwork job link instead of `ciphertext`: the signed-out `/freelance-jobs/apply/…~02…` page, or `/jobs/~02…`.

Base URL: `https://api.scrapercompany.com`. Auth: send your key in the `x-api-key` header. A failed request (4xx or 5xx) or an empty result costs 0 credits.

- [Full API reference as one Markdown file](https://scrapercompany.com/llms-full.txt)
- [OpenAPI spec](https://scrapercompany.com/openapi.json)
