> ## Client identification
>
> Requests to this API should include a `Client-Platform` header alongside
> `Authorization`, identifying the application, tool, or model making the
> request. This is used for integration support and analytics.
>
> Use your model or tool name, for example `claude-code` or `chatgpt`.
>
> Example:
>
> ```bash
> curl https://api.salaryboxapp.com/... \
>   -H "Authorization: Api-Key <api-key>" \
>   -H "Client-Platform: claude-code"
> ```

# Errors

An error response has `"status": false` and a `message`. Validation errors also list the problem
for each parameter under `errors`.

```json
{
  "message": "Invalid Data",
  "status": false,
  "errors": { "end_date": ["end_date cannot be before start_date."] }
}
```

## Errors every endpoint can return

| Status | Message                                                                  | Cause                                                                             |
| ------ | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------- |
| `400`  | `"Invalid Data"`                                                         | A parameter is missing, malformed or out of range. See `errors`.                  |
| `400`  | `"Date range cannot exceed N days."`                                     | The date range is longer than the endpoint allows.                                |
| `401`  | `"Authentication credentials were not provided."` or `"Invalid Api-Key"` | See [Authentication](/authentication).                                            |
| `403`  | `"Your subscription is not active."`                                     | Your company has no active subscription.                                          |
| `403`  | See below                                                                | Your plan does not include this endpoint.                                         |
| `404`  | `"Invalid page."`                                                        | The page does not exist. See [Pagination](/conventions#pagination).               |
| `404`  | `"Employee not found"`                                                   | Endpoints that take one `salarybox_id`: no such staff member who can be returned. |
| `429`  | Seconds to wait                                                          | A [rate limit](/rate-limits) was exceeded.                                        |
| `503`  | `"Wallet ledger is temporarily unavailable, please try again"`           | List Wallet Ledger only: a SalaryBox service could not be reached. Retry shortly. |

Errors specific to one endpoint are listed on that endpoint's page.

## Plans and add-ons

| Endpoints                                                                                   | Needs                    | `403` message                                                                |
| ------------------------------------------------------------------------------------------- | ------------------------ | ---------------------------------------------------------------------------- |
| Payroll endpoints, except List Reimbursement Requests and List Reimbursement Approval Flows | Payroll Pro              | `"Payroll Pro is required to access this API. Contact us."`                  |
| Location endpoints                                                                          | Location Tracking add-on | `"The Location Tracking add-on is required to access this API. Contact us."` |
| CRM endpoints                                                                               | Field Force CRM add-on   | `"The Field Force CRM add-on is required to access this API. Contact us."`   |

Attendance automation rules also depend on the plan: without it, List Staff Attendance Settings
returns the default rules.