# Making a request

One URL per platform, one body shape for every op. The op picks the operation; the rest of the request is that op's fields.

## The call

**POST**

```
POST https://api.zomler.com/api/v1/platforms/{platform}

{
  "request": { "op": "<op>", ... },
  "estimateOnly": false,
  "maxCredits": null
}
```

-   `request.op`names the operation. Each platform page lists its ops; the fields that follow are that op's own.
-   `estimateOnly: true` quotes the exact cost and coverage and spends nothing. The quote runs the same plan the real call runs.
-   `maxCredits` is a hard budget for the call. When it cannot cover everything asked, the least valuable items are left out and named in `coverage` with the reason `budget_exhausted`.

Field names are camelCase on the wire (`postedWithin`, `maxCredits`). Enum values are lower snake\_case codes (`rating_high`, `full_time`).

## Subjects

The things an op is about are its `subjects` — a list of one to ten — or a single `subject`for ops that go deep on one thing. What a subject is depends on the platform: a username, a product id, a URL, a subreddit. The op's description says which, and pasted URLs are accepted wherever they make sense.

Handles come from evidence — a page you saw, a URL you were given, a prior answer — never from guessing. A handle typed from a person's name bills real credits and can return a different person.

## The shared vocabulary

Fields below mean the same thing, take the same type and the same values on every platform that has them. A platform keeps its own filters too — those are marked ◆ on its page. Anything else you find there is a platform's own.

| Field | Meaning | Values |
| --- | --- | --- |
| `subjects` / `subject` | what the op is about — handles, ids or URLs; the op says which | list of 1-10 strings, or one string |
| `limit` | rows this call may bill | integer, per-op ceiling |
| `query` | keyword search text | string |
| `hashtag` | a hashtag, with or without `#` | string |
| `sort` | ordering | `relevance` `newest` `oldest` `top` `hot` `rising` `rating_high` `rating_low` `most_reviewed` `most_commented` `helpful` `threaded` `price_low` `price_high` `distance` — each op lists its subset |
| `postedWithin` | relative recency | `1h` `1d` `3d` `7d` `15d` `30d` `3m` `6m` `1y` `any` — each op lists its subset |
| `since` / `until` | absolute date bounds | `YYYY-MM-DD` |
| `stay` | the nights a price is for | object with `checkIn`, `checkOut` (`YYYY-MM-DD`) plus what the platform prices on |
| `location` / `locations` | free-text place(s) | string / list of strings |
| `country` | ISO 3166-1 alpha-2, upper | `US` `IN` `GB` … |
| `language` | BCP-47 | `en` `en-US` … |
| `currency` | ISO 4217 | `USD` `INR` … |
| `priceMin` / `priceMax`, `salaryMin` / `salaryMax`, `hourlyMin` / `hourlyMax`, `budgetMin` / `budgetMax` | money bounds in the platform's unit | integers |
| `minRating` / `minStars` | quality floor on the platform's scale | number |
| `direction` | which side of a follow graph | `followers` `following` |
| `workplace` | where the job is done | `remote` `hybrid` `onsite` (+ platform extras) |
| `employmentType` | contract kind | `full_time` `part_time` `contract` `internship` `temporary` |
| `include` | facets fetched alongside a card in the same call | object (`include.posts`, `include.videos`) |
| `metric` / `days` | a stored history series | per-platform metric names; 1-730 days |

## Machine-readable schema

`GET https://api.zomler.com/api/v1/platforms/{platform}/schema` returns the JSON Schema of `request` for that platform — the same union these pages are generated from — with no key required. Use it to validate requests before sending, or to generate types.

Ready to send one? Pick a platform under [Platforms](https://zomler.com/docs/api/platforms).

---

Source: https://zomler.com/docs/api/requests
