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
| Endpoint | Returns | Query |
|---|---|---|
| GET /api/v1/brand | Who the brand is: name, domain, services, market, logo and colors, blog location, counts. | — |
| GET /api/v1/articles | Published 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/keywords | The 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/visibility | Per 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