UpHunt API
API Endpoints

Applied Jobs

Paginated list of jobs you have applied to.

GET
/api/auto-apply-v2/applied-jobs

List all job applications for your account with pagination and optional status filtering.

Query parameters

ParameterTypeDescription
limitnumber

Number of results per page. Default 50, max 200.

offsetnumber

Number of results to skip for pagination. Default 0.

statusstring

Filter by application status: applied, failed, processing, not_available, not_eligible, not_enough_connects. Returns all statuses if omitted.

Example

cURL
curl "https://uphunt.io/api/auto-apply-v2/applied-jobs?limit=10&status=applied" -H "x-api-key: YOUR_API_KEY"

Response

{
  "jobs": [
    {
      "jobId": "~01abc123def456",
      "processedJobId": "550e8400-e29b-41d4-a716-446655440000",
      "title": "React Developer needed",
      "url": "https://www.upwork.com/jobs/~01abc123def456",
      "platform": "upwork",
      "applicationStatus": "applied",
      "applicationStatusMessage": "Successfully applied via auto-apply",
      "matchingScore": 8,
      "queueId": "queue_abc123",
      "appliedAt": 1732204800000,
      "processedAt": 1732204790000,
      "errorMessage": null,
      "coverLetter": "Hi, I have 5+ years of experience with...",
      "proposalStatus": {
        "viewed": true,
        "replied": false,
        "viewedAt": null,
        "lastCheckedAt": 1732294800000
      },
      "createdAt": 1732204700000
    }
  ],
  "total": 142,
  "limit": 10,
  "offset": 0
}

proposalStatus object

Client-side engagement with your submitted proposal, synced from Upwork after apply runs.

ParameterTypeDescription
viewedboolean

The client has viewed your proposal. Sticky: once true, it never reverts.

repliedboolean

Upwork moved your proposal to Active — "proposals that you are discussing with a client". Sticky, and the most reliable engagement signal.

viewedAtstring | null

Upwork's timestamp for the view, when available. Usually null.

lastCheckedAtnumber | null

Epoch ms of UpHunt's most recent sync of this proposal's status. Interpret viewed/replied relative to this time.

proposalStatus: null means the proposal has not been synced yet — not that the client ignored it. Syncs ride along with apply activity on your agency, so fresh applications typically get their first sync within an hour. viewed: false can also lag behind reality: Upwork only exposes view state for recent proposals, so a late view may go unrecorded. replied does not have this limitation.

Paginating through all jobs

Node.js
let offset = 0
const limit = 50
const allJobs = []
 
while (true) {
  const res = await fetch(
    `https://uphunt.io/api/auto-apply-v2/applied-jobs?limit=${limit}&offset=${offset}&status=applied`,
    { headers: { 'x-api-key': process.env.UPHUNT_API_KEY! } }
  )
  const data = await res.json()
  allJobs.push(...data.jobs)
 
  if (allJobs.length >= data.total) break
  offset += limit
}
 
console.log(`Total applied: ${allJobs.length}`)

On this page