Upwork API
Upwork Jobs API
Search Upwork job postings by keyword, with up to 25 fresh listings per request.
POST/v1/run/upwork.jobs
Uptime
100.00%
30d · 15 calls
Requests
17
30d · weekly, last 12 wks
Response
7.3s
median · 30d
Try it
Make your first request
Sample response
Free runs return only the first 3 results. Fund a key to get the full response.
{
"data": {
"items": [
{
"budget": "example",
"clientLocation": "example",
"clientRating": 4.6,
"clientTotalSpent": 12500,
"createdUtc": 12.5,
"description": "A short example description of this item.",
"experienceLevel": "example",
"hourlyRateMax": 12.5,
"hourlyRateMin": 12.5,
"jobId": "a1b2c3d4",
"jobType": "general",
"paymentVerified": true,
"proposals": 42,
"tags": [
"example"
],
"title": "Example title",
"url": "https://example.com/page"
}
]
},
"found": true
}Response interface
interface UpworkJobsResponse {
data: {
items: {
budget?: string;
clientLocation?: string;
clientRating?: number;
clientTotalSpent?: number;
createdUtc?: number;
description?: string;
experienceLevel?: string;
hourlyRateMax?: number;
hourlyRateMin?: number;
jobId: string;
jobType?: string;
paymentVerified?: boolean | null;
proposals?: number;
tags?: string[] | null;
title: string;
url: string;
}[];
} | null;
found: boolean;
}Full parameter and response reference - every field, type, and example for this endpoint.
Reference
Request, response, and price
Last verified 2026-09-16 · uptime and latency measured over 30dPOST /v1/run/upwork.jobs
curl -X POST https://api.getanyapi.com/v1/run/upwork.jobs \
-H "Authorization: Bearer $ANYAPI_KEY" \
-H "Content-Type: application/json" \
-d '{"jobType":"fixed","limit":10,"query":"web developer"}'| Field | Type | Example value |
|---|---|---|
| Request body | ||
| query | string | "web developer"Keywords to search Upwork jobs for (e.g. react developer). |
| experienceLevel | enum | Filter by required experience level. |
| jobType | enum | "fixed"Filter by payment type: fixed-price or hourly jobs. |
| limit | integer | 10Maximum number of results to return (10-25, default 25). You are billed per result returned, so a lower limit costs less. |
| location | string | Filter by client location - a region, subregion, or country (e.g. United States, Europe). |
| paymentVerified | boolean | When true, only return jobs from clients with a verified payment method. |
| sort | enum | Sort order for listings: newest or relevance (e.g. newest). |
| Response | ||
| data | object | Result payload, or null when nothing was found. |
| data.items | object[] | Job records: title, description, budget or hourly rate, required skills, posted date, and client details. Populated whenever the provider has data for the entity. |
| data.items[].budget | string | Fixed-price budget in USD (e.g. $4000). Absent on hourly jobs, which carry hourlyRateMin and hourlyRateMax. |
| data.items[].clientLocation | string | Client country or location. |
| data.items[].clientRating | number | Client average rating. |
| data.items[].clientTotalSpent | number | Client lifetime spend (USD). |
| data.items[].createdUtc | number | UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. |
| data.items[].description | string | Full job posting description text. Populated whenever the provider has data for the entity. |
| data.items[].experienceLevel | string | Required experience level (e.g. Entry, Intermediate, Expert). |
| data.items[].hourlyRateMax | number | Upper bound of the client's hourly rate range in USD. Absent on fixed-price jobs. |
| data.items[].hourlyRateMin | number | Lower bound of the client's hourly rate range in USD. Absent on fixed-price jobs. |
| data.items[].jobId | string | Upwork job identifier. Populated whenever the provider has data for the entity. |
| data.items[].jobType | string | Fixed or Hourly. |
| data.items[].paymentVerified | boolean | Whether the client's payment method is verified; null when Upwork reports it as unknown. |
| data.items[].proposals | integer | Number of proposals submitted. |
| data.items[].tags | string[] | Skill tags. |
| data.items[].title | string | Job posting title. Populated whenever the provider has data for the entity. |
| data.items[].url | string | Upwork job posting URL. Populated whenever the provider has data for the entity. |
| found | boolean | Whether any jobs were found for the search. |
| Price | ||
| Price per request (ceiling) | USD | $0.0286 |
| Price /1k results | USD | $1.14 |
FAQ
About the Upwork Jobs API
The AnyAPI Upwork Jobs API returns Upwork jobs data as normalized JSON from one POST call to /v1/run/upwork.jobs. Search Upwork job postings by keyword, with up to 25 fresh listings per request. AnyAPI returns one normalized schema whichever source serves it. It costs $1.14 per 1,000 results, and never more than $0.0286 for a single request, in US dollars with no subscription and no monthly minimum. Over the last 30 days, 100.0% of Upwork jobs calls through AnyAPI succeeded, with a median response time of 7.3 seconds across 15 measured calls.
It costs $1.14 per 1,000 results, and never more than $0.0286 for a single request, in US dollars with no subscription and no monthly minimum. You fund one USD wallet, each call draws it down, and a failed request costs $0.
Search Upwork job postings by keyword, with up to 25 fresh listings per request. The response is normalized JSON with the same envelope every AnyAPI endpoint returns, so parsing a second endpoint is a change of URL and nothing else.
Over the last 30 days, 100.0% of Upwork jobs calls through AnyAPI succeeded, with a median response time of 7.3 seconds across 15 measured calls. These are AnyAPI's own measurements of traffic through the gateway, recomputed continuously, not a published service-level target.