# Search

`GET /v1/search` returns jobs whose **title or organization** (company name) contains the term
`q`.

```bash
curl -G -H "X-API-Key: $JOBS_API_KEY" \
  --data-urlencode "q=data engineer" \
  "https://api.jobs-database.de/v1/search"
```

## Parameters

| Parameter | Type | Required | Rules |
| --- | --- | --- | --- |
| `q` | string | yes | At least 3 characters after trimming leading and trailing spaces; at most 200 characters as sent. |
| `limit` | integer | no | `1` to `100`, default `20`. |
| `cursor` | string | no | The `next_cursor` of the previous page. |

The response has the same page shape as `GET /v1/jobs` — see [Pagination](/api-documentation/pagination).

## How matching works

- **Substring match** on `title` **or** `organization`: `q=engineer` finds "Senior Engineer"
  and "Engineering Manager".
- **Case-insensitive.**
- **Literal.** `%` and `_` are matched as ordinary characters, not as wildcards.
- **The whole term is one phrase.** `q=data engineer` matches titles containing "data engineer"
  in that order — it is not split into separate words.
- **No other filters.** There is no filter by location, date, salary or employment type. Filter
  on the returned fields in your own code.
- **Ordered by `id` ascending**, not by relevance.

## Errors specific to search

| Status | Body | Cause |
| --- | --- | --- |
| `422` | `{"error": "q must be at least 3 characters"}` | `q` is shorter than 3 characters after trimming. |
| `422` | `{"detail": [ … ]}` | `q` is missing or longer than 200 characters. |

Search results count against your allowance exactly like list results: one per job returned.
