Developers & agents

API & MCP

Everything Bottally produces for your brand is readable with one key: the articles, the keyword research, and the AI-visibility measurements. Your site pulls it. Your agents read it. Nothing is pushed at you.

1. Get a key

In the dashboard open Integrations and press Onboard your agent to Bottally at the top right. You get an API key, the prompt below with your key already filled in, and the MCP config. The key is shown once; you can rotate it any time from the same place. Works with any framework and any AI agent.

2. One prompt, any agent

Paste this into whatever builds your site — Cursor, Claude Code, v0, Lovable, Bolt, Replit — and it adds the blog index and article pages, styled like the rest of your site, with ISR so new articles appear within an hour of publishing. No webhook, no database, no cron. Paste the same prompt into any other agent and it can read your articles, keywords and AI-visibility data. Replace YOUR_BOTTALLY_API_KEY with your key (the dashboard version has it filled in).

3. Connect any agent over MCP

Claude Desktop, Claude Code, Cursor, and any MCP client. Stateless Streamable HTTP with a bearer key — add this to your client's MCP config (the prompt above already contains it). Tools: get_brand, list_articles, get_article, list_keywords, get_visibility.

{
  "mcpServers": {
    "bottally": {
      "type": "http",
      "url": "https://www.bottally.com/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_BOTTALLY_API_KEY"
      }
    }
  }
}

4. REST reference

Base URL https://www.bottally.com/api/v1. Send Authorization: Bearer btl_…. All endpoints are GET, return JSON, allow CORS, and are limited to 120 requests per minute per key. Only published articles are ever returned.

curl -H "Authorization: Bearer YOUR_BOTTALLY_API_KEY" https://www.bottally.com/api/v1/articles?limit=3
EndpointReturnsQuery
GET /api/v1/brandWho the brand is: name, domain, services, market, logo and colors, blog location, counts.
GET /api/v1/articlesPublished articles, newest first — slug, title, excerpt, tags, cover image, dates, reading time.limit (≤100), offset, updated_since (ISO 8601)
GET /api/v1/articles/{slug}One article with content_markdown, content_html, media and sources.
GET /api/v1/keywordsThe researched keyword pool with volume, difficulty, CPC, intent, priority, status, our Google position.status = pool | planned | published, include_serp = true, limit (≤1000)
GET /api/v1/visibilityPer tracked question and AI engine: mentioned or not, scores, cited sources, competitors named instead — plus a summary.period = 7d | 30d | 90d | 1y | all

GET /api/v1 (no key) lists these endpoints, so an agent given only the base URL can discover them. Errors come back as { error: { status, code, message } }.

How publishing works with a pull channel

Articles are written and scheduled by the autopilot as usual. At the daily publish slot an article becomes visible in /api/v1/articles, and Bottally records its URL as your-site/blog/slug. Your site's ISR pages pick it up on the next revalidation — within an hour, triggered by the first visitor, with no work on your side.

Prefer a plugin, a CMS, or a push webhook instead? Those connectors are in the same Integrations page. Pricing

API & MCP — pull your articles, keywords and AI visibility into any site or agent