# Kwork project exchange API — live BUYER project requests from kwork.ru in clean JSON: description, buyer budget in roubles, deadline, category, offers already received and coarse buyer history. No login, and no detail call (every field is in the search result). Russian-language marketplace.

> Search live BUYER project requests on the Kwork exchange. Returns the full description, the buyer's budget cap in roubles, the deadline, the category, how many offers the request has already received, and coarse buyer signals (projects posted, hire rate, purchase-level badges). No second call is needed: Kwork publishes no project detail page and every field is already here. Cost is bounded by `max_pages`, and the response states how many pages were read.
> ReefAPI engine `kwork` · 3 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/kwork/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/kwork/v1/search — 1 credit
Search live BUYER project requests on the Kwork exchange. Returns the full description, the buyer's budget cap in roubles, the deadline, the category, how many offers the request has already received, and coarse buyer signals (projects posted, hire rate, purchase-level badges). No second call is needed: Kwork publishes no project detail page and every field is already here. Cost is bounded by `max_pages`, and the response states how many pages were read.

**Parameters:**
- `query` (string, optional) — Free-text search, applied by Kwork itself across BOTH the title and the body of the request (measured: for 'telegram', 7 of the first 12 matches were in the title and 5 matched only in the body). The exchange is Russian-language, so Russian terms match far more than English ones.
- `category` (string, optional) — Restrict to one Kwork category, by slug ('script-programming') or numeric id ('41'). Validated against the live category tree: Kwork itself does NOT reject an unknown category, it silently returns the whole exchange, so we reject it here instead of answering a narrow question with everything. [one of: writing-translations, translations, creative-writing, business-copywriting, typing, resumes-and-letters, textgeneration, audio-video, audio, music, animation, intro, editing-media, editing-audio, videogeneration, programming, website-development, website-repair, mobile-apps, game-dev, script-programming, frontend, software, usability-testing, server-administration, design, web-plus-mobile-design, logo, graphic-design, illustrations, vector-tracing, interior-exterior-design, packaging, presentations-infographics, outdoor-advertising, e-commerce-social-network, imagegeneration, seo, optimization, audit, analytics, links, keywords, traffic, integrated-promotion, promotion, smm, marketing, context, email-marketing, bulletin-boards, information-bases, training-consulting, lawyer-consulting, financial-consulting, engineering, business, personal-assistant, sites-for-sale, calls-sales, recruitment]
- `budget_min` (number, optional) — Keep only projects whose buyer budget is at least this many roubles. Kwork does not offer this over HTTP, so it is applied on our side to the pages covered by `max_pages` — see `budget_exhausted` in the response.
- `budget_max` (number, optional) — Keep only projects whose buyer budget is at most this many roubles. Applied on our side, like `budget_min`.
- `max_offers` (integer, optional) — Keep only projects that have received at most this many offers, for finding requests that are still winnable. Of 657 open projects measured, 102 had no offers at all. Applied on our side.
- `limit` (integer, optional, default 24) — How many projects to return (1–120). The page budget still applies, so a heavily filtered request can return fewer.
- `offset` (integer, optional, default 0) — Skip this many projects before returning `limit` (0–660; the exchange is about 55 pages of 12).
- `max_pages` (integer, optional, default 3) — Hard cap on how many exchange pages this one call may read (1–10, default 3). This is the cost control: the call reads at most this many pages whatever the filters, and the response reports `pages_read` and `budget_exhausted` so you can tell a truncated result from an exhausted one.

**Returns:** projects[]{id, title, description, budget, budget_ceiling, currency, offers_received, views, category, category_slug, delivery_days_max, status, status_label, is_active, time_left, created_at, expires_at, attachments, buyer{id, projects_posted, hire_rate_percent, badges[]}}, total_count, returned, offset, pages_read, page_budget, budget_exhausted, filters_applied

**Example request body:**
```json
{
  "limit": 10
}
```

### POST https://api.reefapi.com/kwork/v1/categories — 1 credit
The Kwork exchange category tree with the number of OPEN buyer projects in each one right now. Use it to pick a `category` value for `search`, or on its own as a demand signal showing which kinds of work buyers are asking for today.

**Parameters:** none

**Returns:** categories[]{id, slug, name, parent_id, parent, open_projects}, total_open_projects

### POST https://api.reefapi.com/kwork/v1/stats — 1 credit
Kwork's own 30-day exchange statistics as the marketplace publishes them: buyer projects posted, orders completed, and the total rouble value of those orders. A market-size signal, not a scrape of individual rows.

**Parameters:** none

**Returns:** stats{period_days, projects_posted, orders_completed, orders_value, currency}, open_projects_now

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=kwork
- Human docs page: https://reefapi.com/docs/kwork
- Overview page: https://reefapi.com/kwork-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
