Try any of 3860 endpoints — live.
Pick an endpoint, load a working example, tweak the params, and send — no signup to try. Results render the way the data deserves; raw JSON, headers & code are one tab away.
Search live Upwork jobs by keyword and Upwork's own filters — category and subcategory, contract type, experience level, project length, weekly workload, client location, how many people the client has hired, client timezone — plus a posted-within-N-hours cut. Returns title, full description, budget, skills, posting timestamp and coarse client signals for each job, with the total match count.
Keyword to search job titles and descriptions. Omit it to browse the whole open board (109k+ jobs) newest-first.
How many jobs to return (1–200). Upwork serves 50 per page, so anything over 50 costs extra page fetches. (1–200)
Skip this many results before returning `limit` (0–5000). (0–5000)
Only jobs in this Upwork category: its name ('Web, Mobile & Software Dev', 'Design & Creative') or its uid. Comma-separated for several (either matches). Call `filters` for all names and uids.
Only jobs in this Upwork subcategory: its name or uid. Comma-separated for several. Call `filters` for the list (each category's `subcategories`).
Contract type. Accepts both, comma-separated.
Experience level the buyer asked for. Comma-separated for several.
Project length: week = less than a month, month = 1–3 months, semester = 3–6 months, ongoing = more than 6 months. The spelled-out labels ('1_to_3_months', 'more_than_6_months') are accepted too.
Hours per week: as_needed (under 30) or full_time (30+).
Where the CLIENT is: a country ('Germany'), a region ('Europe') or a sub-region ('Northern Europe'). Comma-separated for several. Call `filters` for the exact 263 accepted values.
How many freelancers this client has ever hired: 0 (never hired), 1-9, or 10- (ten or more).
Client timezone, as an IANA name. Call `filters` for the 72 values Upwork accepts.
Require a specific Upwork SKILL, by its numeric uid. Take the uid from any job's `skills_detail[].uid` in a previous response — Upwork publishes no skill directory to a logged-out visitor, so that is where the values come from. Comma-separated for several.
Result order. `newest` sorts by posting time.
Only jobs posted in the last N hours. Upwork gives a logged-out visitor no posted-date filter, so this one is applied by us: the search is forced to newest-first and paging stops at the first job older than the window. `filtered_out` in the response says how many rows the cut removed. (1–2160)
curl -X POST https://api.reefapi.com/upwork/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"python","limit":"10"}'Press Send request to see the live result here.
Not sure what to send? Ask Reef AIWhat you can run here, without an account
ReefAPI is one HTTP gateway to 632 live web-data APIs covering 3860 endpoints across 13 categories. Every endpoint answers with the same JSON envelope, so one integration reaches all of them. Each response reports what it cost and when the source was read.
No signup, no API key and no card are required to try an endpoint on this page. Anonymous calls run on a shared demo key, capped at 15 calls per hour per visitor. Pick an API, fill the parameters and the real response comes back from the live source, not from a canned sample. A free account lifts the cap and gives you 1,000 credits and your own key.
Browse every API in the catalog, read an endpoint's fields and example response in the docs, or see per-call credit costs on the pricing page.
Coverage by category
| ecommerce | 350 |
| classifieds | 116 |
| real-estate | 29 |
| media | 25 |
| utilities | 18 |
| jobs | 18 |
| developer-tools | 18 |
| reviews | 15 |
| social | 15 |
| search-seo | 11 |
| travel | 8 |
| other | 5 |
| finance | 4 |