# Upwork Jobs API

Extract Upwork job postings with their title, description, budget, required skills, and client details

**Pricing:** $3 / 1k jobs

**Endpoint:** `POST /v1/data/upwork/jobs/run`

**Auth:** `Authorization: Bearer mk_live_...`

## Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `inputs` | string | Yes | Search keyword or phrase to find Upwork job postings (e.g. 'python developer'). |
| `limit` | integer | No | Number of jobs to return. Use 0 for all. |
| `sortBy` | string | No | Sort order for results. |
| `isHourly` | boolean | No | Include jobs with hourly pricing. |
| `hourlyMinPrice` | integer | No | Lowest hourly rate. Only applies when "Include Hourly Jobs" is on. |
| `hourlyMaxPrice` | integer | No | Highest hourly rate. Only applies when "Include Hourly Jobs" is on. |
| `isFixed` | boolean | No | Include jobs with a fixed total budget. |
| `fixedMinPrice` | integer | No | Lowest fixed budget. Only applies when "Include Fixed-Price Jobs" is on. |
| `fixedMaxPrice` | integer | No | Highest fixed budget. Only applies when "Include Fixed-Price Jobs" is on. |
| `experienceLevel` | array | No | Filter by required experience level. |
| `clientHistory` | array | No | Filter by the client's hiring history on Upwork. |
| `projectLength` | array | No | Filter by project duration. |
| `hoursPerWeek` | array | No | Filter by required commitment. |
| `location` | array | No | Filter results by the client's country (e.g. 'United States'). |

## Example

```bash
curl -X POST https://api.mindcase.co/v1/data/upwork/jobs/run \
  -H "Authorization: Bearer mk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"params":{"inputs":"..."}}'
```

```python
import requests

resp = requests.post(
    "https://api.mindcase.co/v1/data/upwork/jobs/run",
    headers={"Authorization": "Bearer mk_live_YOUR_API_KEY"},
    json={"params": {
    "inputs": "..."
}},
)
data = resp.json()
```

## Get the results

`run` is async and returns a `job_id`. Poll until `status` is `completed`, then read the rows:

```bash
# 1) check status
curl https://api.mindcase.co/v1/jobs/JOB_ID \
  -H "Authorization: Bearer mk_live_YOUR_API_KEY"

# 2) when status == completed, fetch the rows
curl https://api.mindcase.co/v1/jobs/JOB_ID/results \
  -H "Authorization: Bearer mk_live_YOUR_API_KEY"
```

Full API reference (auth, jobs, balance, endpoints): https://mindcase.co/skills.md

## Response columns

| Field | Display name | Type |
|-------|--------------|------|
| `searchInput` | Search Input | text |
| `jobTitle` | Job Title | text |
| `jobUrl` | Job URL | url |
| `jobDescription` | Job Description | text |
| `jobAccess` | Job Access | text |
| `jobStatus` | Job Status | text |
| `posted` | Posted | text |
| `jobType` | Job Type | text |
| `fixedBudget` | Fixed Budget | currency |
| `hourlyRateMin` | Hourly Rate Min | currency |
| `hourlyRateMax` | Hourly Rate Max | currency |
| `experienceLevel` | Experience Level | text |
| `projectLength` | Project Length | text |
| `weeklyWorkload` | Weekly Workload | text |
| `category` | Category | text |
| `categoryGroup` | Category Group | text |
| `occupation` | Occupation | text |
| `skills` | Skills | object_array |
| `skillGroups` | Skill Groups | object_array |
| `projectType` | Project Type | text |
| `featuredJob` | Featured Job | boolean |
| `contractToHire` | Contract To Hire | boolean |
| `positionsToHire` | Positions To Hire | number |
| `applicants` | Applicants | number |
| `interviewing` | Interviewing | number |
| `invitesSent` | Invites Sent | number |
| `unansweredInvites` | Unanswered Invites | number |
| `hired` | Hired | number |
| `client` | Client | object |
| `clientOtherOpenPostings` | Client Other Open Postings | object_array |
| `similarJobs` | Similar Jobs | object_array |
| `minJobSuccessScore` | Min Job Success Score | number |
| `englishLevel` | English Level | text |
| `risingTalentOk` | Rising Talent OK | boolean |
| `freelancerType` | Freelancer Type | text |
| `localMarketJob` | Local Market Job | boolean |
| `locationCheckRequired` | Location Check Required | boolean |
| `requiredCountries` | Required Countries | array |
| `requiredRegions` | Required Regions | array |
| `requiredLanguages` | Required Languages | array |
| `requiredTimezones` | Required Timezones | array |
| `deadline` | Deadline | text |
| `hourlyBudgetSource` | Hourly Budget Source | text |
| `resultRank` | Result Rank | number |
