UpHunt API
API Endpoints

Get Job

Fetch a single archived Upwork job by its ciphertext slug.

GET
/api/jobs/by-ciphertext

Returns the full archived RawUpworkJob document for one Upwork job, identified by its ciphertext slug (the ~02xxx... portion of an Upwork job URL).

The legacy /api/v1/jobs/:ciphertext and /api/v2/jobs/:ciphertext paths still work — they forward to this endpoint and behave identically (same x-api-key auth).

Authentication

This endpoint uses the same x-api-key header as the auto-apply endpoints — the key scoped to your UpHunt account. Generate it from Dashboard → Auto-Apply → API & Webhooks.

x-api-key: <your-key>

Query parameters

ParameterTypeDescription
cipherstringrequired

Upwork job ciphertext, e.g. ~022053140178050136031. URL-encode the leading tilde (%7E).

Example

cURL
curl "https://uphunt.io/api/jobs/by-ciphertext?cipher=~022053140178050136031" -H "x-api-key: YOUR_API_KEY"

Response

The full RawUpworkJob document is returned: top-level fields like title, description, ontologySkills[], jobTile.job.*, plus optional nested jobDetailsResponse (public details: budget, qualifications, buyer location/stats) and authJobDetailsResponse (auth-only enrichment: screening questions, attachments, buyer work history, applicant bid stats). When the auth-enriched scrape captured screening questions, they're also surfaced at the top level as screeningQuestions so you can pass position values directly to the apply endpoint's questionAnswers.

{
  "id": "2053140178050136031",
  "title": "LONG-TERM! Only Experienced Video Editor for YTA Channel",
  "description": "Are YOU an experienced video editor for YouTube automation channels?...",
  "ontologySkills": [
    { "uid": "1031626793223176192", "prefLabel": "Video Editing" }
  ],
  "jobTile": {
    "job": {
      "id": "2053140178050136031",
      "ciphertext": "~022053140178050136031",
      "jobType": "HOURLY",
      "publishTime": "2026-05-09T15:53:59.413Z"
    }
  },
  "exploredAt": 1778344861000,
  "screeningQuestions": [
    { "position": 0, "question": "How many years of React experience do you have?" },
    { "position": 1, "question": "Have you worked on a similar project before?" }
  ],
  "jobDetailsResponse": { "data": { "jobPubDetails": { /* ... */ } } },
  "authJobDetailsResponse": { "data": { "jobAuthDetails": { /* ... */ } } }
}

Errors

Our archive goes back several years, but very old or never-scraped jobs may not be present.

StatusWhen
400Missing cipher query parameter
401x-api-key missing or invalid
404Ciphertext doesn't match any archived job

On this page