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

# Platform model

> Applications, connections, tools, and toolsets - how the pieces fit.

## The four building blocks

* **Application** - an integrable product (monday.com, Gmail, Salesforce, Priority...). Identified by a **slug**. Browse via `GET /v1/applications`; the detail view lists the application's authentication methods and whether it supports object selection.
* **Connection** - your authenticated instance of an application (an OAuth grant, an API key, DB credentials...). Identified by an **integer id**. Tools execute *through* a connection. You can mark one connection per application as your **default**.
* **Tool** - a single executable action (create an item, send an email, query records). Identified by a **slug**. The detail view embeds the tool's `inputSchema` and `outputSchema` (JSON Schema) plus capability flags (`supportsFilters`, `supportsSort`, `supportsTopOffset`).
* **Toolset** - a named bundle of connections plus an allow-list of tools, identified by a **GUID**. Toolsets scope what an LLM agent is allowed to call and which connection each application uses.

## How a tool finds its connection

When you `POST /v1/tools/{toolSlug}/execute`, the connection is resolved in this order:

1. **Explicit** `?connectionId=` - must belong to you and to the tool's application. If `?toolsetId=` is also present, the connection must be in that toolset.
2. **Toolset** `?toolsetId=` - uses the toolset's connection for the tool's application, and enforces the toolset's tool allow-list.
3. **Default** - your per-application default connection (`PUT /v1/connections/{id}/Default`). If you have exactly one connection for the application, it's used and recorded as the default automatically.
4. Otherwise the call fails with `409 NO_DEFAULT_CONNECTION`.

Applications that don't require a connection (`connectionRequirement: "None"`) skip all of this.

## Object selection

Some applications (mostly databases) expose **objects** (tables, entities) that you choose from: refresh the catalog (`RefreshObjects`), poll `RefreshStatus` until it leaves `InProgress`, browse `Objects`, then `SelectObjects` with the ids to activate. Only applications with `supportsObjectSelection: true` use this - the CLI's `engini connect` walks you through it.
