> ## Documentation Index
> Fetch the complete documentation index at: https://jobo.world/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Response headers

> Every header the API sets, grouped by purpose, with which endpoints emit each one.

Headers carry metering, pagination, and diagnostic state so you rarely need to parse the body to make a routing decision. This page is the canonical reference — other pages link here instead of repeating the tables.

***

## Rate limiting

Set on **every authenticated response**, with one exception noted below.

| Header                  | Meaning                                                                                                                                                                                                                                                                                    |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `X-RateLimit-Limit`     | Maximum requests allowed in the current window.                                                                                                                                                                                                                                            |
| `X-RateLimit-Remaining` | Requests remaining in the current window. Never negative.                                                                                                                                                                                                                                  |
| `X-RateLimit-Used`      | Requests already consumed in the current window.                                                                                                                                                                                                                                           |
| `X-RateLimit-Reset`     | Unix epoch seconds when the current window resets. **Only present when a reset time is known** — typically once you are being tracked against a window, and always on `429`. Do not assume it is on every response; fall back to `Retry-After`, or to your own backoff, when it is absent. |
| `X-RateLimit-Group`     | Which [rate-limit group's](/docs/rate-limits) budget applied — `Default`, `JobSearch`, `JobFeed`, `Geocode`, `AutoApply`, or `AutoApplyManagement`.                                                                                                                                             |
| `Retry-After`           | Seconds to wait before retrying. Set on `429` and `503` only.                                                                                                                                                                                                                              |

## Wallet

Set only when metering is relevant — omitted on unmetered endpoints and on zero-debit responses.

| Header               | Set on                                                                             |
| -------------------- | ---------------------------------------------------------------------------------- |
| `X-Credits-Deducted` | A wallet debit. Credits consumed by this specific request.                         |
| `X-Credits-Balance`  | A wallet debit, and on `402`. Your balance after the debit or the failed precheck. |
| `X-Credits-Required` | `402` only. Credits the request would have needed to succeed.                      |

See [Billing](/docs/billing) for how debits and precharges work.

## Subscription quota

Set when a package with an included allowance applies to the request.

| Header              | Meaning                                                 |
| ------------------- | ------------------------------------------------------- |
| `X-Quota-Limit`     | The package's included allowance for this request type. |
| `X-Quota-Remaining` | Allowance left in the current period.                   |

## Page-based pagination

Set on `GET /api/jobs`, `POST /api/jobs/search`, `GET /api/companies/{id}/jobs`.

| Header          | Meaning                                           |
| --------------- | ------------------------------------------------- |
| `X-Total-Count` | Total matching records across all pages.          |
| `X-Total-Pages` | Total number of pages at the current `page_size`. |
| `X-Page`        | The page returned.                                |
| `X-Page-Size`   | The page size used.                               |

See [Pagination](/docs/pagination) for request parameters and limits.

## Cursor pagination

Set on `POST /api/jobs/feed`, `POST /api/jobs/feed/managed`, `GET /api/jobs/expired`.

| Header       | Meaning                                                            |
| ------------ | ------------------------------------------------------------------ |
| `X-Has-More` | `true` if another page is available via `next_cursor` in the body. |

## Idempotency

| Header                | Meaning                                                                                                        |
| --------------------- | -------------------------------------------------------------------------------------------------------------- |
| `X-Idempotent-Replay` | Present when the response was replayed from a stored result rather than executed. Absent on a fresh execution. |

See [Idempotency](/docs/idempotency) for the full contract.

## Diagnostics

| Header             | Set on                                                                                      |
| ------------------ | ------------------------------------------------------------------------------------------- |
| `x-correlation-id` | Every response. The id to quote in support requests. See [Errors](/docs/errors#getting-support). |
| `WWW-Authenticate` | `401` only. `ApiKey realm="api.jobo.world"`.                                                |

## Caching

Set only on `GET /api/companies/{id}`.

| Header                         | Meaning                                                                           |
| ------------------------------ | --------------------------------------------------------------------------------- |
| `Cache-Tag`                    | An opaque tag used for targeted CDN invalidation when the company record changes. |
| `Cloudflare-CDN-Cache-Control` | A long CDN TTL on a hit; 60s on a `404`.                                          |
| `Cache-Control: no-store`      | Tells browsers not to retain the response locally.                                |

This is why the endpoint is fast and does not deduct wallet credits — most requests are served from the CDN edge, not your quota. See [Rate limits](/docs/rate-limits) for the free-but-uncharged note.

<Note>
  `X-RapidAPI-Billing` appears only on requests routed through the RapidAPI marketplace. It is not part of the direct `connect.jobo.world` contract — ignore it unless you sell through that channel.
</Note>

***

## Worked example

A metered search response, paginated, under a subscription package:

```
HTTP/1.1 200 OK
Content-Type: application/json
X-RateLimit-Limit: 360
X-RateLimit-Remaining: 358
X-RateLimit-Used: 2
X-RateLimit-Reset: 1753564800
X-RateLimit-Group: JobSearch
X-Credits-Deducted: 25
X-Credits-Balance: 4975
X-Quota-Limit: 10000
X-Quota-Remaining: 9998
X-Total-Count: 214
X-Total-Pages: 9
X-Page: 1
X-Page-Size: 25
x-correlation-id: 989f012bca1b4a0a994aa583efaa8f5d
```
