# Upwork Jobs

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

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

**Endpoint:** `POST /api/v1/agents/upwork/jobs/run`

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

## Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `inputs` | array | Yes | Search keywords to find Upwork job postings (e.g. 'python developer'). One per line. A job URL also works as a seed but returns similar/related jobs, not that exact posting; bare numeric job IDs return nothing. |
| `limit` | integer | No | Jobs to return per query. 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 by client's country (e.g. 'United States'). One per line. |

## Example

```bash
curl -X POST https://api.mindcase.co/api/v1/agents/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/api/v1/agents/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/api/v1/jobs/JOB_ID \
  -H "Authorization: Bearer mk_live_YOUR_API_KEY"

# 2) when status == completed, fetch the rows
curl https://api.mindcase.co/api/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 |
| `clientFirstPosting` | Client First Posting | boolean |
| `positionsToHire` | Positions To Hire | number |
| `applicants` | Applicants | number |
| `interviewing` | Interviewing | number |
| `invitesSent` | Invites Sent | number |
| `unansweredInvites` | Unanswered Invites | number |
| `hired` | Hired | number |
| `lastClientActivity` | Last Client Activity | text |
| `clientLastSeen` | Client Last Seen | text |
| `paymentVerified` | Payment Verified | boolean |
| `clientCountry` | Client Country | text |
| `clientCity` | Client City | text |
| `clientTimezone` | Client Timezone | text |
| `clientIndustry` | Client Industry | text |
| `clientCompanySize` | Client Company Size | number |
| `clientMemberSince` | Client Member Since | text |
| `clientRating` | Client Rating | number |
| `clientReviews` | Client Reviews | number |
| `clientTotalSpent` | Client Total Spent | currency |
| `clientTotalHires` | Client Total Hires | number |
| `clientJobsWithHires` | Client Jobs With Hires | number |
| `clientActiveContracts` | Client Active Contracts | number |
| `clientHoursBilled` | Client Hours Billed | number |
| `clientOpenJobs` | Client Open Jobs | number |
| `clientOtherOpenPostings` | Client Other Open Postings | object_array |
| `similarJobs` | Similar Jobs | object_array |
| `minJobSuccessScore` | Min Job Success Score | number |
| `englishLevel` | English Level | text |
