Skip to main content

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-inWebhook
Code you writeNoneOne HTTP handler per tool
Deploy requiredNoYes (per tool)
Custom logicWhat the catalog providesAnything you can write
Use it forCommon 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

FieldTypeRequiredDefaultDescription
namestringyesModel-facing function name. Per-account unique among non-revoked tools. Cannot start with qlaud-builtin/ (that namespace is reserved).
providerstringyesA slug from GET /v1/builtins.
auth_modestringnotenanttenant (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).
configobjectconditionalRequired 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.
descriptionstringnocatalog defaultOverride the catalog’s description if you want to nudge how the model uses the tool.
input_schemaJSON Schemanocatalog defaultOverride 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

SlugProviderWhat it does
qlaud-builtin/web-searchBrave SearchWeb search. Returns titled results with snippets + URLs.

Generation

SlugProviderWhat it does
qlaud-builtin/image-generationOpenAI ImagesGenerate an image from a text prompt; returns a URL.

Communication

SlugProviderWhat it does
qlaud-builtin/send-emailResendSend a transactional email (subject + body to a recipient).
qlaud-builtin/slack-post-messageSlackPost a plain-text message to a Slack channel via chat.postMessage.
qlaud-builtin/twilio-send-smsTwilioSend a text message via the Twilio Messages API.

Ticketing / project management

SlugProviderWhat it does
qlaud-builtin/linear-create-issueLinearFile an issue in a Linear team.
qlaud-builtin/zendesk-create-ticketZendeskOpen a Zendesk Support ticket with optional requester.
qlaud-builtin/github-create-issueGitHubOpen an issue in a specific GitHub repo (with labels + assignees).
qlaud-builtin/github-add-commentGitHubPost a comment on an existing issue or PR.
qlaud-builtin/github-search-codeGitHubSearch code in a repo (or org) and return file matches with snippets.
qlaud-builtin/github-get-fileGitHubFetch the contents of a single file at any ref (branch/tag/sha).
qlaud-builtin/notion-append-pageNotionAppend a new page to a Notion database.

Code execution

SlugProviderWhat it does
qlaud-builtin/code-executionE2BRun Python in a sandboxed cloud VM, return stdout/stderr/result.

Universal escape hatch

SlugProviderWhat it does
qlaud-builtin/http-callqlaudWrap 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

StatusMeaning
400Body malformed: name missing, name in reserved qlaud-builtin/ namespace, unknown provider, or required config field missing for the chosen provider.
401Bad / revoked qlk key.
403Caller used a per-user (standard-scope) key. All /v1/tools endpoints require a master (admin-scope) key.
409A non-revoked tool with the same name already exists in this account.
503Gateway 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.