# Search jobs (v1)

Returns one page of 50 Upwork jobs with the full description, skills, job type, experience level, budget, duration and posting time, plus Upwork's counts by filter. Upwork serves the first 5,050 jobs of a search.

- Platform: Upwork
- Request: `GET https://api.toolzerhub.com/v1/upwork/search`
- Auth: `x-api-key` header
- Cost: 1 credit per successful request. Failed requests are not billed.
- Page: https://docs.toolzerhub.com/reference/upwork/search/get-upwork-search

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| `query` | query | yes | string | Keywords, a skill or a job title, such as python scraping or shopify developer. |
| `page` | query | no | integer | One-based page of 50 jobs. Upwork serves at most 5,050 jobs for one search, which is page 101. Default: 1. |
| `sort` | query | no | enum: newest, relevance, client_spend, client_rating | newest (the default, as on upwork.com), relevance, client_spend (clients who have spent most first) or client_rating. Default: newest. |
| `job_type` | query | no | enum: any, hourly, fixed | hourly or fixed price jobs only; any keeps both. Default: any. |
| `experience_level` | query | no | enum: any, entry, intermediate, expert | The experience level the client asks for: entry, intermediate or expert. Default: any. |

## Example request

```bash
curl "https://api.toolzerhub.com/v1/upwork/search?query=<query>" \
  -H "x-api-key: $TOOLZERHUB_API_KEY"
```

Success responses are wrapped as `{ "data": ... }`. Errors return `{ "error": { "code", "status", "message", "retryable", "details" } }`. See https://docs.toolzerhub.com/docs/responses-and-errors.
