# Job Search

> Search public Ashby job listings through the authenticated ReplyNodes API.

Source page: https://docs.replynodes.com/docs/guides/jobs

# Job Search

`GET /v1/jobs/search` searches the Ashby snapshot in source order and returns at most 10 normalized job records. The response includes 26 public fields; the stored `raw` provider payload is omitted. This is an authenticated read and uses the gateway's existing organization, rate-limit, and credit authority.

## Filters

The operation accepts `query`, `location`, `company`, `ats`, `remote`, `salary_min`, `salary_max`, `experience_max`, and `limit`. Omit `ats` or set it to `ashby`; other ATS values are rejected. `query` matches a literal, case-insensitive substring of the title. `location` and `company` match literal, case-insensitive substrings in their respective fields. Empty text filters do not filter. `remote=true` matches explicitly remote jobs plus null remote values whose location contains `remote`; explicit false values never match. `remote=false` matches only rows explicitly marked false. Salary bounds use the job's opposite salary bound. `experience_max` is explicitly unsupported because the Ashby snapshot has no experience field, and its presence returns `400 invalid_request`.

`limit` defaults to 10 and accepts integers from 1 through 10. Results retain the source order; the endpoint has no sort or offset option. A valid search with no matches returns `200` and an empty `data` array.

## Billing and retries

Each fresh successful logical search costs 10 credits, including an empty result. Errors cost no credits. The gateway uses a durable hold and idempotency identity. When `X-Idempotency-Key` is omitted, the identity is derived from the canonical endpoint and query, so repeating an identical request replays its original response while the terminal snapshot is available. To run the same query as a fresh logical search, send a new `X-Idempotency-Key`. Replaying a settled identity does not charge again; if its snapshot is unavailable, the gateway returns `409 idempotency_replay_unavailable` without running the search again. A failed call releases its hold but leaves that identity terminal; use a new idempotency key when retrying after a failure.

## Make a request

Store `REPLYNODES_API_KEY` in a secret store, then send it as a bearer credential:

```bash
curl -sS \
  -H "Authorization: Bearer $REPLYNODES_API_KEY" \
  "https://api.replynodes.com/v1/jobs/search?query=engineer&location=remote&remote=false&limit=10"
```

The same operation is exposed by the canonical MCP `job_search` tool and forwards to this REST route. MCP clients can send `X-Idempotency-Key` on the MCP request to select a logical identity; without it, repeated identical tool inputs use the same endpoint-plus-query identity. Send a new key after a failed call because a released identity is not executed again. The [API Reference](https://docs.replynodes.com/reference) contains the complete field and error schemas.
