> ## 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.

# Status Codes

> HTTP status codes returned by the Jobo Enterprise API.

## Success

| Code  | Label   | Description                                                                                                    |
| ----- | ------- | -------------------------------------------------------------------------------------------------------------- |
| `200` | OK      | Request succeeded. Response body contains the requested data.                                                  |
| `201` | Created | Resource successfully created (e.g., auto-apply profile). The response body contains the newly created object. |

### 200 OK

```json theme={null}
{
  "data": [
    {
      "id": "a1b2c3d4-5678-9abc-def0-123456789abc",
      "title": "Senior Software Engineer",
      "company": { "name": "Acme Corp" }
    }
  ],
  "total": 1,
  "page": 1,
  "page_size": 25
}
```

### 201 Created

Returned when creating new resources such as auto-apply profiles:

```json theme={null}
{
  "id": "f9e8d7c6-5432-1abc-def0-fedcba987654",
  "name": "Default Profile",
  "created_at": "2026-03-03T12:00:00Z"
}
```

## Client Errors

| Code  | Label             | Description                                                        |
| ----- | ----------------- | ------------------------------------------------------------------ |
| `400` | Bad Request       | Invalid request parameters. Check the `message` field for details. |
| `401` | Unauthorized      | Missing or invalid API key. Include `X-Api-Key` header.            |
| `402` | Payment Required  | Insufficient credits. Top up your wallet.                          |
| `403` | Forbidden         | API key doesn't have permission for this resource.                 |
| `404` | Not Found         | The requested resource doesn't exist.                              |
| `429` | Too Many Requests | Rate limit exceeded. Check `Retry-After` header.                   |

### 400 Bad Request

```json theme={null}
{
  "status": 400,
  "error": "Bad Request",
  "message": "Parameter 'page_size' must be between 1 and 100."
}
```

**Common causes:** missing required parameters, invalid enum values, out-of-range numbers, malformed JSON body.

### 401 Unauthorized

```json theme={null}
{
  "status": 401,
  "error": "Unauthorized",
  "message": "Missing or invalid API key. Include 'X-Api-Key' header."
}
```

**Common causes:** missing `X-Api-Key` header, revoked or rotated API key, or calling the wrong API host.

### 402 Payment Required

```json theme={null}
{
  "status": 402,
  "error": "Insufficient credits",
  "credits_required": 10,
  "credits_balance": 3
}
```

**Common causes:** wallet balance too low for the requested operation. Add credits in the [dashboard](https://enterprise.jobo.world/credits).

### 403 Forbidden

```json theme={null}
{
  "status": 403,
  "error": "Forbidden",
  "message": "Your subscription does not include access to the Feed API."
}
```

**Common causes:** attempting to access subscription-only endpoints on a free plan, key restricted to specific endpoint scopes.

### 404 Not Found

```json theme={null}
{
  "status": 404,
  "error": "Not Found",
  "message": "Profile 'f9e8d7c6-5432-1abc-def0-fedcba987654' not found."
}
```

**Common causes:** deleted resource, typo in ID, resource belongs to a different account.

### 429 Too Many Requests

```json theme={null}
{
  "status": 429,
  "error": "Too Many Requests",
  "message": "Rate limit exceeded. Try again in 60 seconds.",
  "retry_after": 60
}
```

**Common causes:** exceeding per-minute, per-hour, or per-day request quotas. See [Rate Limits](/resources/rate-limits).

## Server Errors

| Code  | Label                 | Description                                                 |
| ----- | --------------------- | ----------------------------------------------------------- |
| `500` | Internal Server Error | Something went wrong on our end. Retry the request.         |
| `503` | Service Unavailable   | Service is temporarily down for maintenance. Retry shortly. |

### 500 Internal Server Error

```json theme={null}
{
  "status": 500,
  "error": "Internal Server Error",
  "message": "An unexpected error occurred. Please retry your request."
}
```

### 503 Service Unavailable

```json theme={null}
{
  "status": 503,
  "error": "Service Unavailable",
  "message": "The service is temporarily unavailable for maintenance. Please try again in a few minutes."
}
```

## Retry Strategy

| Status | Retry? | Strategy                       | Details                                                                                                                                            |
| ------ | ------ | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | ❌      | Fix the request parameters     | Read the `message` field — it tells you exactly what's wrong. No amount of retrying will help.                                                     |
| `401`  | ❌      | Check your API key             | Verify the key is active in your dashboard. If you recently rotated keys, ensure you're using the new one.                                         |
| `402`  | ❌      | Add credits                    | Check `credits_required` vs `credits_balance` in the response to see what the request needed.                                                      |
| `403`  | ❌      | Upgrade your plan              | This endpoint requires a higher subscription tier or specific permissions.                                                                         |
| `404`  | ❌      | Verify the resource ID         | Confirm the resource exists and belongs to your account.                                                                                           |
| `429`  | ✅      | Wait for `Retry-After` seconds | Use the exact value from the `Retry-After` header. Implement exponential backoff with jitter for repeated 429s.                                    |
| `500`  | ✅      | Retry with exponential backoff | Start at 1s, double each attempt, cap at 30s. Max 3–5 retries. If persistent, check [jobo.world/status](https://jobo.world/status).                |
| `503`  | ✅      | Retry after 30–60 seconds      | Typically indicates planned maintenance. Check [jobo.world/status](https://jobo.world/status) for updates. Retry up to 5 times with 30–60s delays. |
