Annsa Agents API

The MCP surface — ranked priorities, codebase-aware specs, search.

Operations 1

POST /mcp Call an Annsa MCP tool (JSON-RPC 2.0) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/annsa-ai:annsa-ai-agents-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

annsa-ai-agents-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Annsa Agents API
  version: '2026-08-22'
  summary: Send customer feedback and call transcripts into Annsa, and reach its priorities and specs over MCP.
  description: 'Annsa is the source of direction for your agents. Choose what to build from your customers, roadmap, ideas and agent findings, then direct every agent and learn as you go.


    This document describes only what is public and callable today. Endpoints used by the Annsa web app on a user''s own session are deliberately absent.


    ## Rate limits


    Limits are abuse ceilings, not metering — plan quotas are separate and are enforced on your account, not on the connection. `POST /feedback` and `POST /surface/submit` allow 5000 requests an hour; `POST /transcripts/upload` allows 500, because each call does real work. `POST /mcp` and `GET /health` carry no limit of their own.


    A window is counted per authenticated caller, falling back to the client IP when there is no credential. Limited endpoints report where you stand in it on every response — `RateLimit`, plus the discrete `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` — so you never have to discover a limit by being refused. `RateLimit-Reset` is delta-seconds, not a timestamp. A 429 adds `Retry-After`. The full policy is at https://annsa.ai/api-policy.


    ## Which credential to use


    There are two separate authentication systems, and they are not interchangeable:


    - **`sessionBearer`** — a Supabase session token belonging to a signed-in user. Required by `POST /feedback` and `POST /transcripts/upload`. A survey key sent here returns 401.

    - **`surveyKey`** — the key from Settings → Integrations → Survey. It authenticates `POST /surface/submit` **only**, and travels in the JSON body as `api_key`, not in a header — so it is described on the `WidgetSubmission` schema rather than as a security scheme, because OpenAPI has no way to express a body-field credential. This key is embedded in public web pages by design, so its reach is deliberately narrow.


    For reading priorities, specs and search, use the MCP server rather than REST. It is OAuth 2.0 with PKCE and scoped `read`/`write`, and it is the surface built for agents. See `POST /mcp`.


    ## Errors


    Every error response is `application/json` in the shape `{"detail": "..."}` (the `Error` schema). `detail` is a human-readable string; it is not a stable machine code, so branch on the HTTP status rather than on the text.


    ## Versioning


    This API is unversioned in the path. The `info.version` above is the date this document was published, and this document is the contract. Additive changes — new optional fields, new endpoints — ship without notice, so clients must ignore unknown response fields. Breaking changes are announced at https://annsa.ai/changelog. A formal deprecation window with `Deprecation` and `Sunset` response headers is not yet in force; do not infer one from this document.'
  contact:
    name: Annsa
    url: https://annsa.ai/contact
    email: support@annsa.ai
  license:
    name: Proprietary
    url: https://annsa.ai/terms
  termsOfService: https://annsa.ai/terms
servers:
- url: https://api.annsa.ai
  description: Production
security:
- sessionBearer: []
tags:
- name: Agents
  description: The MCP surface — ranked priorities, codebase-aware specs, search.
paths:
  /mcp:
    post:
      operationId: callMcp
      summary: Call an Annsa MCP tool (JSON-RPC 2.0)
      description: 'The agent surface. A Streamable HTTP MCP endpoint exposing eight tools:


        - `annsa.priorities` — what to work on next: ranked priorities with the evidence behind each

        - `annsa.spec` — the plan for one priority: what to build, files to touch, Done When

        - `annsa.ask` — ask about your feedback, priorities, specs, customers, surveys or Annsa itself

        - `annsa.work` — everyday work on a priority you hold: claim, write, note, verify, ship, escalate

        - `annsa.file` — add new rows: feedback, findings, proposed priorities

        - `annsa.decide` — approve, answer, sign, record a principle

        - `annsa.board` — arrange the board: stage, severity, merge, park, bets

        - `annsa.share` — email the customers who asked; it can''t be unsent


        This is the only Annsa surface with scoped authorization. Obtain a token with OAuth 2.0 authorization code + PKCE (S256); clients may register themselves at the `registration_endpoint`. `read` covers priorities, specs and search; `write` covers state changes and Share Back.


        An unauthenticated request returns 401 with a `WWW-Authenticate: Bearer` header naming the protected-resource metadata document, so a client can discover how to authenticate from one request.


        Note the different host: this endpoint is served from `https://app.annsa.ai`, not `api.annsa.ai`.'
      tags:
      - Agents
      servers:
      - url: https://app.annsa.ai
        description: MCP resource server
      security:
      - oauth2:
        - read
      - oauth2:
        - read
        - write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JsonRpcRequest'
            examples:
              listTools:
                summary: List the available tools
                value:
                  jsonrpc: '2.0'
                  id: 1
                  method: tools/list
              callTool:
                summary: Ask what to build next
                value:
                  jsonrpc: '2.0'
                  id: 2
                  method: tools/call
                  params:
                    name: annsa.priorities
                    arguments: {}
      responses:
        '200':
          description: A JSON-RPC 2.0 response, or an SSE stream when the client accepts `text/event-stream`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonRpcResponse'
        '401':
          description: Missing or invalid bearer token. Carries `WWW-Authenticate` naming the protected-resource metadata.
          headers:
            WWW-Authenticate:
              description: e.g. `Bearer realm="Annsa MCP", resource_metadata="https://app.annsa.ai/.well-known/oauth-protected-resource/mcp"`
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
      parameters:
      - $ref: '#/components/parameters/AnnsaVersion'
components:
  schemas:
    JsonRpcRequest:
      type: object
      title: JsonRpcRequest
      required:
      - jsonrpc
      - method
      properties:
        jsonrpc:
          type: string
          const: '2.0'
        id:
          type:
          - string
          - integer
        method:
          type: string
          examples:
          - initialize
          - tools/list
          - tools/call
        params:
          type: object
          additionalProperties: true
    JsonRpcResponse:
      type: object
      title: JsonRpcResponse
      required:
      - jsonrpc
      properties:
        jsonrpc:
          type: string
          const: '2.0'
        id:
          type:
          - string
          - integer
        result:
          type: object
          additionalProperties: true
        error:
          type: object
          properties:
            code:
              type: integer
            message:
              type: string
    Error:
      type: object
      title: Error
      description: The single error shape every endpoint returns. `detail` is human-readable and may change; branch on the HTTP status code instead.
      required:
      - detail
      properties:
        detail:
          type: string
          description: What went wrong, in plain language.
          examples:
          - Invalid API key
  responses:
    Forbidden:
      description: The credential is valid but lacks the scope for this call.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Rate limit exceeded.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimitLimit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimitRemaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimitReset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  headers:
    RateLimitLimit:
      description: Requests permitted in the window.
      schema:
        type: integer
        example: 5000
    RateLimitRemaining:
      description: Requests left in the current window.
      schema:
        type: integer
        example: 4999
    RateLimitReset:
      description: Seconds until the window resets. Delta-seconds, per the IETF draft — not an absolute timestamp.
      schema:
        type: integer
        example: 3599
    RateLimit:
      description: Your position in the current window, as the combined field from the later IETF drafts. Present on any response where the limit was actually evaluated.
      schema:
        type: string
        example: limit=5000, remaining=4999, reset=3599
  parameters:
    AnnsaVersion:
      name: Annsa-Version
      in: header
      required: false
      description: Pin the dated API contract. Omit it to use the current version. An unrecognised value is refused with 400 rather than downgraded. The version that served the request is echoed back in the same header. See https://annsa.ai/api-policy.
      schema:
        type: string
        enum:
        - '2026-08-22'
        example: '2026-08-22'
  securitySchemes:
    sessionBearer:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: A Supabase session token for a signed-in user. Grants that user's own workspace scope and nothing wider. This is not the survey key — sending a survey key here returns 401.
    oauth2:
      type: oauth2
      description: OAuth 2.0 for the MCP resource `https://app.annsa.ai/mcp`. PKCE with S256 is required. Clients may register themselves dynamically (RFC 7591); server metadata is published per RFC 8414 at `/.well-known/oauth-authorization-server` and protected-resource metadata per RFC 9728 at `/.well-known/oauth-protected-resource/mcp`.
      flows:
        authorizationCode:
          authorizationUrl: https://app.annsa.ai/mcp/auth
          tokenUrl: https://app.annsa.ai/mcp/token
          refreshUrl: https://app.annsa.ai/mcp/token
          scopes:
            read: Read priorities, specs, survey results and search.
            write: Change state — start building, mark shipped, share back with customers.
externalDocs:
  description: 'Versioning, deprecation and rate limits: how the version header works, what counts as a breaking change, the 90 days of notice before anything is removed, and the ceilings each endpoint carries.'
  url: https://annsa.ai/api-policy