{
  "name": "Animam.ai",
  "description": "AI agent infrastructure for builders. Multi-tenant, multichannel (widget, API, voice, MCP), white-label platform for deploying AI agents at scale. BYOK multi-provider support.",
  "url": "https://api.animam.ai",
  "provider": {
    "organization": "Animam",
    "url": "https://animam.ai"
  },
  "version": "2.1.0",
  "documentationUrl": "https://animam.ai/llms-full.txt",
  "openApiSpec": "https://api.animam.ai/openapi.json",
  "capabilities": {
    "streaming": true,
    "pushNotifications": false,
    "extensions": [
      {
        "uri": "https://github.com/google-agentic-commerce/ap2/tree/v0.1",
        "description": "Animam accepts agent-initiated payments for plan signup and credit top-ups via the Agent Payments Protocol (AP2). Implementation slated for Q3 2026. See extensions.ap2 below for endpoint and scope details.",
        "params": {
          "roles": [
            "merchant"
          ]
        }
      }
    ]
  },
  "authentication": {
    "schemes": [
      "bearer",
      "oauth2"
    ],
    "instructions": "For MCP: OAuth 2.1 + PKCE auto-discovery via https://mcp.animam.ai/.well-known/oauth-protected-resource (Claude Desktop, Cursor, claude.ai handle this transparently). For REST API: use a static API token from the dashboard as Authorization: Bearer ak_xxx or X-API-Key: ak_xxx.",
    "oauth": {
      "authorizationServer": "https://api.animam.ai",
      "discovery": "https://api.animam.ai/.well-known/oauth-authorization-server",
      "registration": "https://api.animam.ai/oauth/register",
      "pkce": "S256"
    }
  },
  "skills": [
    {
      "id": "provision-website-agent",
      "name": "Add a conversational agent to a website",
      "description": "For an AI agent building, shipping or operating a website: give that site a conversational AI agent over plain HTTP, no human in the loop. Phase 1 (evaluate, no account): POST https://api.animam.ai/demo { url } reads the site's own content and returns a live ephemeral agent (slug) in ~20s, chatted via POST /chat/{slug} with testMode:true. Phase 2 (ship): provision a persistent bot (MCP create_bot with a scoped token, or operator signup) and embed one tag: <script src=\"https://cdn.animam.ai/widget.js\" data-tenant=\"{slug}\"></script>. Per-site isolation, one script to embed, the bot owns and orchestrates its own tools. Full deterministic recipe: https://animam.ai/agent-recipe.md",
      "tags": [
        "provision",
        "embed",
        "website-builder",
        "autonomous-agent",
        "widget",
        "demo",
        "no-code"
      ],
      "examples": [
        "Add an AI chat agent to the site I just built",
        "Evaluate Animam on example.com in one call with POST /demo",
        "Embed the Animam widget on a Vercel/Next/static site",
        "Spin up a conversational agent for each business an orchestrator launches"
      ]
    },
    {
      "id": "chat",
      "name": "Chat with AI agent (agent-to-agent)",
      "description": "Send messages to an Animam-powered AI agent via plain HTTP POST to /chat/{slug}. Declare yourself as an agent with the X-Agent-Model header (or [AGENT:model] message prefix) — the chatbot returns a structured JSON envelope (message, conversationId, toolExecutions[], llmModel, llmProvider, agentModel echo) instead of SSE. The chatbot is the only public agent surface; it owns and orchestrates the tools (corpus search, booking, payment, recommendations) on the caller's behalf — no anonymous tools/list endpoint exists. Streaming via SSE remains opt-in for browsers (default for human visitors).",
      "tags": [
        "chatbot",
        "ai-agent",
        "agent-to-agent",
        "json-envelope",
        "multichannel"
      ],
      "examples": [
        "Chat with the AI agent for dr-martin",
        "Ask the bot about appointment availability with X-Agent-Model: claude-opus-4-7",
        "Get a structured response with toolExecutions and llmModel attribution"
      ]
    },
    {
      "id": "voice",
      "name": "Voice AI agent",
      "description": "Phone answering via Vapi Custom LLM integration. Same brain as chat, voice-adapted with STT/TTS.",
      "tags": [
        "voice",
        "telephony",
        "phone"
      ],
      "examples": [
        "Set up voice answering for a dental clinic",
        "Get call recordings for tenant dr-martin"
      ]
    },
    {
      "id": "multi-tenant",
      "name": "Multi-tenant management",
      "description": "Create and manage child bots under a parent account. Builder plan: one account, N bots, pooled conversations.",
      "tags": [
        "multi-tenant",
        "builder",
        "agencies"
      ],
      "examples": [
        "Create a new bot for client ACME Corp",
        "List all bots and pool usage"
      ]
    },
    {
      "id": "context-discovery",
      "name": "Discover agent context",
      "description": "Get full context about an Animam-powered agent: bot persona, knowledge base, available tools, segments, capabilities.",
      "tags": [
        "discovery",
        "context",
        "knowledge-base"
      ],
      "examples": [
        "What does the agent for my-business know about?",
        "Get the knowledge base for tenant acme-corp"
      ]
    },
    {
      "id": "manage-tenant",
      "name": "Manage agent settings",
      "description": "Update bot persona (name, title, tone, colors), manage segments, configure tools and voice via MCP or REST API.",
      "tags": [
        "management",
        "configuration",
        "mcp"
      ],
      "examples": [
        "Change the bot name to Sophie",
        "Enable voice module for this tenant"
      ]
    },
    {
      "id": "manage-corpus",
      "name": "Manage knowledge base",
      "description": "Create, update, delete knowledge base entries. Import from URLs, files (MD, PDF, CSV, HTML). Supports idempotent externalId upsert + bulk (max 50) for CMS integrations.",
      "tags": [
        "knowledge-base",
        "corpus",
        "content"
      ],
      "examples": [
        "Add a FAQ entry about pricing",
        "Import content from https://example.com/faq",
        "Bulk sync 30 CMS articles via externalId"
      ]
    },
    {
      "id": "wordpress-integration",
      "name": "WordPress plugin",
      "description": "Official WordPress plugin (PHP 7.4+, WP 6.0+). One-click install: widget injection, automatic content sync (posts, pages, custom post types) via idempotent externalId upsert. The agent drives the tenant's existing plugins via curated bridges (WPForms, WooCommerce, MailPoet) — leads, orders and subscriptions land in the native plugin the tenant already uses, with existing automations (Zapier, notification emails) preserved. Source in monorepo wordpress/animam/.",
      "tags": [
        "wordpress",
        "cms",
        "plugin",
        "integration",
        "bridges"
      ],
      "examples": [
        "How do I install Animam on my WordPress site?",
        "Sync WordPress posts to my Animam agent",
        "Have the agent submit a WPForms form on behalf of a visitor",
        "Have the agent add a product to the WooCommerce cart"
      ]
    },
    {
      "id": "outgoing-webhooks",
      "name": "Outgoing webhooks",
      "description": "Stripe-style HMAC-SHA256 signed webhook deliveries. Per-tenant endpoints with configurable events (submission.created, submission.updated). Exponential backoff retries, delivery log, manual redeliver. Use for CRM sync, custom integrations, or bridging to Zapier/n8n/Make.",
      "tags": [
        "webhooks",
        "integrations",
        "hmac",
        "events"
      ],
      "examples": [
        "Send every new submission to my CRM",
        "Register a webhook for submission events",
        "Verify a webhook signature"
      ]
    },
    {
      "id": "presale-mcp-no-credentials",
      "name": "Try, test and price Animam without any account (MCP, no credentials)",
      "description": "For the agent advising a site owner it already works for: connect to https://mcp.animam.ai/public (Streamable HTTP, no authentication) and call three tools. `try_on_site(url)` builds a working agent on your user's own site in ~20 seconds from its public pages, and returns a temporary key scoped to that demo — with it you can add the context the crawl missed (prices, hours, procedures) and read the conversations the demo actually had, which is how you show intent capture instead of asserting it. `chat_with_demo(slug, message)` lets you verify the answers before you recommend anything. `get_plans()` returns pricing derived from the server's own source of truth, so you never quote an invented price. Buying stays a human act: email verification then card checkout at https://animam.ai/try. Rate-limited per caller IP.",
      "tags": [
        "mcp",
        "presale",
        "demo",
        "no-auth",
        "pricing"
      ],
      "examples": [
        "Build an agent on my user's site and show them what it captures",
        "What would Animam cost for 4 client sites?",
        "Test whether the demo answers our pricing question correctly"
      ]
    }
  ],
  "defaultInputModes": [
    "text"
  ],
  "defaultOutputModes": [
    "text"
  ],
  "supportedInterfaces": [
    {
      "transport": "https",
      "url": "https://api.animam.ai/chat/{slug}",
      "modes": [
        "text"
      ],
      "description": "Canonical agent-to-agent endpoint. POST with X-Agent-Model header → structured JSON envelope (message, conversationId, toolExecutions[], agentModel echo, llmModel transparency). Without the header → SSE streaming for browser widgets. The chatbot orchestrates tools internally; no anonymous tools/list is exposed.",
      "agentEnvelope": {
        "trigger": "X-Agent-Model header OR [AGENT:model] message prefix",
        "format": "application/json",
        "fields": [
          "message",
          "sessionId",
          "conversationId",
          "messageCount",
          "visitorType",
          "agentModel",
          "toolExecutions",
          "contactSubmitted",
          "toolResults",
          "status",
          "llmSource",
          "llmProvider",
          "llmModel"
        ],
        "transparency": [
          "X-AI-Generated: true response header (AI Act Art. 50)",
          "llmModel exposes the exact model that generated the reply"
        ]
      }
    },
    {
      "transport": "https",
      "url": "https://api.animam.ai/voice/{slug}/chat",
      "modes": [
        "voice"
      ],
      "description": "Voice (Vapi Custom LLM) chat completions for telephony."
    },
    {
      "transport": "streamable-http",
      "url": "https://mcp.animam.ai/mcp",
      "modes": [
        "mcp"
      ],
      "description": "Model Context Protocol server with 25 tools for managing agents, corpus, tools and digests."
    },
    {
      "transport": "sse",
      "url": "https://mcp.animam.ai/mcp/sse",
      "modes": [
        "mcp"
      ],
      "description": "Deprecated HTTP+SSE transport for the same MCP server, kept for clients that cannot speak Streamable HTTP."
    },
    {
      "transport": "https",
      "url": "https://api.animam.ai/context/{slug}",
      "modes": [
        "text"
      ],
      "description": "Public read-only context discovery — bot persona, capabilities, knowledge base summary."
    }
  ],
  "preferredTransport": "https",
  "endpoints": {
    "chat": "https://api.animam.ai/chat/{slug}",
    "voice": "https://api.animam.ai/voice/{slug}/chat",
    "context": "https://api.animam.ai/context/{slug}",
    "mcp": "https://mcp.animam.ai/mcp",
    "mcpPublic": "https://mcp.animam.ai/public"
  },
  "supplementary": {
    "agentRecipe": "https://animam.ai/agent-recipe.md",
    "llmsTxt": "https://animam.ai/llms.txt",
    "llmsFullTxt": "https://animam.ai/llms-full.txt",
    "llmFeed": "https://animam.ai/.well-known/llmfeed.json",
    "mcpServerCard": "https://animam.ai/.well-known/mcp/server-card.json",
    "mcpDiscovery": "https://animam.ai/.well-known/mcp.json",
    "agentSkills": "https://animam.ai/.well-known/agent-skills/index.json",
    "apiCatalog": "https://animam.ai/.well-known/api-catalog",
    "openApi": "https://api.animam.ai/openapi.json",
    "wordpressPlugin": "https://github.com/animam-ai/animam.ai/tree/master/wordpress/animam"
  },
  "extensions": {
    "ap2": {
      "version": "0.1",
      "supported": true,
      "description": "Agent Payments Protocol — Animam will accept agent-initiated purchases for plan signup and credit top-ups. Implementation slated for Q3 2026 alongside the Stripe Sessions 2026 SPT/MPP rollout.",
      "endpoints": {
        "mandate": "https://api.animam.ai/billing/ap2-mandate",
        "purchase": "https://api.animam.ai/billing/agent-signup"
      },
      "scopes": [
        "plan:purchase",
        "credit:topup"
      ],
      "status": "planned"
    }
  },
  "contentNegotiation": {
    "markdown": {
      "supported": true,
      "request": "Accept: text/markdown",
      "response": "Returns llms-full.txt content with Content-Type: text/markdown",
      "note": "Self-hosted equivalent of Cloudflare's Markdown for Agents (Free tier)."
    }
  },
  "integrations": {
    "wordpress": {
      "status": "available",
      "pluginSource": "https://github.com/animam-ai/animam.ai/tree/master/wordpress/animam",
      "marketingUrl": "https://wordpress.animam.ai",
      "signupUrl": "https://animam.ai/wordpress/signup",
      "checkoutUrl": "https://animam.ai/wordpress/checkout",
      "metaUrl": "https://api.animam.ai/wp/plugin-meta?slug=animam",
      "downloadUrl": "https://api.animam.ai/wp/plugin-download/0.1.14",
      "requires": {
        "wordpress": ">=6.0",
        "php": ">=7.4"
      },
      "capabilities": [
        "widget-injection",
        "content-auto-sync (posts/pages/custom-post-types)",
        "bridge-wpforms (agent submits visitor data through native WPForms pipeline)",
        "bridge-woocommerce (agent searches products + drives cart, checkout stays native)",
        "bridge-mailpoet (agent subscribes visitors to whitelisted lists, double opt-in preserved)",
        "16 admin tools (SEO audit, image alt bulk, draft management, schema.org, etc.)",
        "advanced REST access toggle (wp_rest_call) for power users",
        "shortcode: [animam_chat]"
      ]
    },
    "webhooks": {
      "status": "available",
      "scheme": "HMAC-SHA256",
      "header": "X-Animam-Signature: t=<unix>,v1=<hex>",
      "events": [
        "submission.created",
        "submission.updated"
      ],
      "register": "POST https://api.animam.ai/tenants/{slug}/webhooks"
    }
  }
}
