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

# API overview

> Base URL, authentication, pagination, errors, and execution semantics - everything the endpoint pages assume you know.

## Base URL

```
https://api.engini.io/v1
```

## Authentication

Send **one** of:

* `x-api-key: eng_...` - Developer API key (recommended; bound to your account)
* `Authorization: Bearer <jwt>` - Engini-issued JWT

Don't send both - Bearer wins. Verify a credential with [`GET /v1/auth/whoami`](/api-reference). Full details: [Authentication](/concepts/authentication).

## Pagination

List endpoints take `offset` (default `0`) and `top` (default `100`; connections list `25`) and return:

```json theme={null}
{ "items": [...], "totalCount": 137, "offset": 0, "top": 100 }
```

Page until `offset + items.length >= totalCount`. Full contract: [Pagination, errors & rate limits](/concepts/pagination-and-errors).

## Errors

Every non-200 response uses one envelope:

```json theme={null}
{ "errorCode": "...", "message": "...", "requestId": "...", "timestamp": "...", "path": "...", "details": [...] }
```

`400` validation failures carry field-level `details`. On `429`, honor the `Retry-After` header (seconds).

## Tool execution semantics

`POST /v1/tools/{toolSlug}/execute` is the one endpoint where **HTTP 200 does not mean success**: tool-runtime failures return `200` with `isSuccess: false` + `errorMessage`. Branch on `isSuccess`.

The executing connection resolves in this order: explicit `?connectionId=` → the `?toolsetId=`'s connection for the tool's application → your per-application default → otherwise `409 NO_DEFAULT_CONNECTION`. Details: [Platform model](/concepts/platform-model).

## Identifiers

Applications and tools are identified by **slugs** (`monday`, `monday_create_item`); connections by **integer ids**; toolsets by **GUIDs**. JSON is camelCase throughout.
