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

# Global search across your company (agents, teams, people, projects, cards, wiki pages, sessions, cron jobs, webhook endpoints, files, integrations)

> One query, twelve kinds, one flat list — what the application's ⌘K bar calls on every keystroke. Case- and accent-insensitive substring match on each kind's display name, at most 8 rows per kind, then `limit` overall. Scope is exactly what the caller can already list, kind by kind: agents (completed ones included, flagged `archived`), teams and members of your company; your OWN chat sessions only; webhook endpoints and cron jobs of your company's agents; projects (archived flagged), non-archived cards and wiki pages of your company; your OWN file library; integration connections of your company or created by you. Admin-only surfaces (audit log, dashboard) are never searched, so admin and member get the same shape. 404 (not 403) when you have no company.



## OpenAPI

````yaml /api-reference/openapi.json get /search
openapi: 3.1.0
info:
  title: Atako API
  version: 0.1.0
  description: >-
    The Atako customer API — manage AI agents, their files, integrations,
    billing, and your company/team, programmatically.


    ## Authentication


    Every non-public endpoint takes a Bearer token that is either:

    - a **programmatic API key** (`aik_…`) — create one at
    [app.atako.ai](https://app.atako.ai) → Settings → API keys (company-admin
    only), or

    - a **Supabase session JWT** — what the web app itself sends; not practical
    to obtain outside a browser session.


    ```bash

    curl https://api.atako.ai/agents -H "Authorization: Bearer aik_..."

    ```


    An API key acts as its owning user, with all of that user's permissions —
    there is no separate key scope in this release.


    ## Other Atako HTTP surfaces (not covered by this spec)


    - **Atako MCP server** — `POST /mcp` (auth: same Bearer token as above)
    exposes a read-only Model Context Protocol tool catalogue for AI clients
    (Claude Code, Claude Desktop, Cursor, ChatGPT). See
    [docs.atako.ai/developers/mcp/overview](https://docs.atako.ai/developers/mcp/overview).

    - **Content API** (`cak_…` key, `/content/*`) — a separate, more restricted
    key type for headless CMS-style access to blog/news/use-case content. Not
    documented here.


    ## Errors


    Errors use a JSON envelope: `{ "error": string, "code"?: string }`. `error`
    is either a short human-readable message or a SCREAMING_SNAKE_CASE code,
    depending on the route — treat it as an opaque string to match against, not
    a stable enum across the whole API.


    ## Rate limits


    Authenticated routes: 6000 requests/min per user (`authRateLimit`). Public
    GET routes: 60/min per IP. A handful of sensitive public POST routes
    (newsletter signup, email-exists, invitation preview) are limited to 10
    requests / 15 min per IP.


    ## Pagination


    List endpoints use either simple `limit`/`offset` query params (marketing
    content — a plain JSON array response, capped at the documented max) or
    `page`/`limit` (credit transactions). Neither returns a total count today;
    fetch until a page comes back shorter than `limit`.
servers:
  - url: https://api.atako.ai
    description: Production
security: []
tags:
  - name: Agents
  - name: Messages
  - name: Activity
  - name: Agent Options
  - name: API Keys
  - name: Files
  - name: Cron Jobs
  - name: Sub-Agents
  - name: Interagent Messages
  - name: Integrations
  - name: Subscriptions
  - name: Users
  - name: Company
  - name: Teams
  - name: Floor
  - name: Search
  - name: Notices
  - name: Organization
  - name: Projects
  - name: Public
  - name: Marketing Content
paths:
  /search:
    get:
      tags:
        - Search
      summary: >-
        Global search across your company (agents, teams, people, projects,
        cards, wiki pages, sessions, cron jobs, webhook endpoints, files,
        integrations)
      description: >-
        One query, twelve kinds, one flat list — what the application's ⌘K bar
        calls on every keystroke. Case- and accent-insensitive substring match
        on each kind's display name, at most 8 rows per kind, then `limit`
        overall. Scope is exactly what the caller can already list, kind by
        kind: agents (completed ones included, flagged `archived`), teams and
        members of your company; your OWN chat sessions only; webhook endpoints
        and cron jobs of your company's agents; projects (archived flagged),
        non-archived cards and wiki pages of your company; your OWN file
        library; integration connections of your company or created by you.
        Admin-only surfaces (audit log, dashboard) are never searched, so admin
        and member get the same shape. 404 (not 403) when you have no company.
      operationId: searchEverything
      parameters:
        - name: q
          in: query
          required: true
          description: >-
            What to look for. Folded (lower-case, accents stripped) before
            matching.
          schema:
            type: string
            minLength: 1
            maxLength: 80
        - name: limit
          in: query
          required: false
          description: >-
            Overall cap on the returned list, applied after the per-kind cap of
            8.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 60
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        kind:
                          type: string
                          enum:
                            - agent
                            - team
                            - member
                            - session
                            - webhookEndpoint
                            - cronJob
                            - project
                            - card
                            - wikiPage
                            - file
                            - folder
                            - integration
                        id:
                          type: string
                          format: uuid
                        label:
                          type: string
                          description: The object's own name, never translated.
                        context:
                          type: string
                          nullable: true
                          description: >-
                            A readable parent: the agent's team, a session's
                            agent, a card's project and column.
                        status:
                          type: string
                          nullable: true
                          description: >-
                            An enum value for the client to translate (agent
                            status, project status, `blocked`,
                            `enabled`/`disabled`, connection status).
                        agentId:
                          type: string
                          format: uuid
                          description: sessions, webhook endpoints, cron jobs
                        projectId:
                          type: string
                          format: uuid
                          description: cards, wiki pages
                        archived:
                          type: boolean
                          description: completed agent, archived session or project
                        updatedAt:
                          type: string
                          format: date-time
                          nullable: true
                      required:
                        - kind
                        - id
                        - label
                        - context
                        - status
                        - updatedAt
                required:
                  - results
        '400':
          description: >-
            `q` missing, empty or longer than 80 characters; `limit` out of
            1..100.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing, malformed, or invalid bearer token / API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found, or the caller is not authorized to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
components:
  schemas:
    Error:
      type: object
      description: >-
        Atako's standard error envelope. `error` is either a short
        human-readable message or a SCREAMING_SNAKE_CASE code (routes are
        inconsistent about which — treat it as an opaque string and match on it
        exactly if you need to branch on error type). Some routes add extra
        fields alongside `error` (see the operation's own error responses).
      properties:
        error:
          type: string
        code:
          type: string
          description: >-
            Present on some routes; a stable machine-readable code duplicating
            or refining `error`.
      required:
        - error
      additionalProperties: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        An `aik_…` programmatic API key (app.atako.ai → Settings → API keys) or
        a Supabase session JWT.

````