Documentation Index
Fetch the complete documentation index at: https://docs.qlaud.ai/llms.txt
Use this file to discover all available pages before exploring further.
Built-in tools are handlers qlaud runs inside its own worker. Pick one
from the catalog, paste your provider API key (Brave, OpenAI, Resend,
…), get a tool back you can attach to any thread message — no webhook
endpoint to stand up, no HMAC verification, no deploy.
The trade-off vs. custom webhook tools:
| Built-in | Webhook |
|---|
| Code you write | None | One HTTP handler per tool |
| Deploy required | No | Yes (per tool) |
| Custom logic | What the catalog provides | Anything you can write |
| Use it for | Common patterns (search, images, email) | Your own backend / proprietary actions |
Both kinds register against the same /v1/tools endpoint and live in
the same per-account namespace; the model never sees a difference.
GET /v1/builtins — Catalog
curl https://api.qlaud.ai/v1/builtins
Public — no auth required. Returns the same catalog for every caller.
Use to populate a “Browse the catalog” UI in your dashboard.
Response
{
"object": "list",
"data": [
{
"provider": "qlaud-builtin/web-search",
"display_name": "Web search (Brave)",
"description": "Search the public web for current information…",
"provider_brand": "brave",
"input_schema": { "type": "object", "properties": { "query": { "type": "string" } }, "required": ["query"] },
"config_schema": {
"type": "object",
"properties": {
"brave_api_key": { "type": "string", "format": "password", "description": "Your Brave Search API token (BSA…)." },
"country": { "type": "string", "default": "us" },
"safesearch": { "type": "string", "enum": ["off", "moderate", "strict"], "default": "moderate" }
},
"required": ["brave_api_key"]
}
},
{ "provider": "qlaud-builtin/image-generation", "...": "..." },
{ "provider": "qlaud-builtin/send-email", "...": "..." }
]
}
config_schema is JSON Schema describing what the customer must supply
when registering. Fields with format: "password" should be rendered
as password inputs in your UI — they’re stored AES-GCM encrypted and
never returned in any read path.
POST /v1/tools — Register a built-in
Master-scope only (same as the webhook flow — see the tools reference).
curl https://api.qlaud.ai/v1/tools \
-H "x-api-key: $QLAUD_MASTER_KEY" \
-H "content-type: application/json" \
-d '{
"name": "web_search",
"provider": "qlaud-builtin/web-search",
"config": { "brave_api_key": "BSA…" }
}'
Body
| Field | Type | Required | Default | Description |
|---|
name | string | yes | — | Model-facing function name. Per-account unique among non-revoked tools. Cannot start with qlaud-builtin/ (that namespace is reserved). |
provider | string | yes | — | A slug from GET /v1/builtins. |
auth_mode | string | no | tenant | tenant (developer credentials, all end-users share) or per_user (each end-user supplies their own at runtime via qlaud_manage_connections.connect). The catalog’s authMode field declares which modes are supported (tenant / per_user / either). |
config | object | conditional | — | Required when auth_mode='tenant'; provider-specific keys enforced against the catalog’s config_schema, stored AES-GCM encrypted. Omit when auth_mode='per_user' — credentials come from each end-user inline in chat. |
description | string | no | catalog default | Override the catalog’s description if you want to nudge how the model uses the tool. |
input_schema | JSON Schema | no | catalog default | Override the input schema if you want to constrain the tool further. |
Response (201)
{
"id": "tool_a1b2c3d4...",
"object": "tool",
"name": "web_search",
"description": "Search the public web for current information…",
"input_schema": { "type": "object", "...": "..." },
"provider": "qlaud-builtin/web-search",
"created_at": 1777262997717
}
Notice the absence of secret and webhook_url — built-ins don’t need
either. The config you supplied is encrypted and stored; you can never
read it back through the API. Rotate by PATCH /v1/tools/:id/config
or by revoking + re-registering.
Catalog (current)
We curate tools that give the AI new capabilities the model itself
can’t do — taking actions in third-party systems, accessing live data,
running real code. We don’t ship duplicates of what frontier models
already handle natively (translation, summarization, knowledge lookup,
basic image gen) since you can just route to a capable model directly.
Live data
| Slug | Provider | What it does |
|---|
qlaud-builtin/web-search | Brave Search | Web search. Returns titled results with snippets + URLs. |
Generation
| Slug | Provider | What it does |
|---|
qlaud-builtin/image-generation | OpenAI Images | Generate an image from a text prompt; returns a URL. |
Communication
| Slug | Provider | What it does |
|---|
qlaud-builtin/send-email | Resend | Send a transactional email (subject + body to a recipient). |
qlaud-builtin/slack-post-message | Slack | Post a plain-text message to a Slack channel via chat.postMessage. |
qlaud-builtin/twilio-send-sms | Twilio | Send a text message via the Twilio Messages API. |
Ticketing / project management
| Slug | Provider | What it does |
|---|
qlaud-builtin/linear-create-issue | Linear | File an issue in a Linear team. |
qlaud-builtin/zendesk-create-ticket | Zendesk | Open a Zendesk Support ticket with optional requester. |
qlaud-builtin/github-create-issue | GitHub | Open an issue in a specific GitHub repo (with labels + assignees). |
qlaud-builtin/github-add-comment | GitHub | Post a comment on an existing issue or PR. |
qlaud-builtin/github-search-code | GitHub | Search code in a repo (or org) and return file matches with snippets. |
qlaud-builtin/github-get-file | GitHub | Fetch the contents of a single file at any ref (branch/tag/sha). |
qlaud-builtin/notion-append-page | Notion | Append a new page to a Notion database. |
Code execution
| Slug | Provider | What it does |
|---|
qlaud-builtin/code-execution | E2B | Run Python in a sandboxed cloud VM, return stdout/stderr/result. |
Universal escape hatch
| Slug | Provider | What it does |
|---|
qlaud-builtin/http-call | qlaud | Wrap any REST endpoint with a JSON config — no code, no webhook, no infrastructure on your side. Templated URL/headers/body with auto-injected end-user session context. See the dedicated http-call reference for the full schema and copy-paste recipes. |
More coming. Want one we don’t have? Open an issue.
Errors
| Status | Meaning |
|---|
| 400 | Body malformed: name missing, name in reserved qlaud-builtin/ namespace, unknown provider, or required config field missing for the chosen provider. |
| 401 | Bad / revoked qlk key. |
| 403 | Caller used a per-user (standard-scope) key. All /v1/tools endpoints require a master (admin-scope) key. |
| 409 | A non-revoked tool with the same name already exists in this account. |
| 503 | Gateway is missing the TOOL_CONFIG_ENC_KEY operator secret — built-ins can’t be registered until it’s set. Falls back gracefully; webhook tools still work. |