Skip to main content
The Keupera Public API gives you programmatic access to every major platform module — Keyword Research, Backlinks, Content, AI Visibility, and Analytics. Every endpoint on the left has a live playground: add your API key and send real requests straight from these docs.

Keywords

Research, enrich, star, and group keywords.

Backlinks

Run campaigns and generate outreach.

Content

Plan, generate, and publish articles.

AI Visibility

Track your brand across LLM answers.

Analytics

Traffic, Search Console, and bot data.

Account

Verify keys and connect a CMS.

Base URL

All resources are served under a single versioned prefix:

Authentication

Every request must include your API key as a Bearer token:
Generate keys from Account → API Keys in your Keupera dashboard. Each key:
  • Belongs to a single user and is bound to one website by default (configurable in the dashboard).
  • Requires a paid subscription tier with API access enabled.
  • Only sees websites within your organization(s).
Your subscription plan must include Public API access. Requests from plans without API entitlement return 403 Forbidden. Never ship a key in a browser — always proxy requests through your own backend.

Make your first request

1

Grab your API key

Open Account → API Keys in the dashboard and copy a key.
2

Verify it works

Call GET /me — it works on any valid key regardless of subscription tier, so it’s the fastest way to confirm authentication.
3

Fetch some data

List your keywords. Use the API Explorer on any endpoint page to try it live and copy the generated code.

Scoping to a specific website

If your key is bound to a website, every request defaults to that website. To target a different website you own, pass website_id as a query parameter:
The website must belong to one of your organizations, otherwise the API returns 403.

Common parameters

Most list endpoints accept pagination, and analytics endpoints accept a date range.
uuid
Override the target website. Defaults to the API key’s website.
integer
Number of results to return. Default varies per endpoint.
integer
default:"1"
Page number for paginated endpoints.
string
default:"30d"
Analytics only. Preset date range — one of 7d, 30d, 90d.
string
Analytics only. Start date (YYYY-MM-DD).
string
Analytics only. End date (YYYY-MM-DD).
When both from and to are provided, range is ignored.

Response format

All responses are JSON and follow a consistent envelope.
List endpoints wrap results in data and add a meta object for pagination. Single-resource endpoints return the object directly under data.

HTTP status codes

Rate limits & usage

Each API call counts against your plan’s limits the same way in-app actions do. When a limit is reached the API responds with 402 Payment Required. Enable metered billing in Account → Billing → Usage to allow overage.

Handling errors

Confirm the Authorization: Bearer <key> header is present and the key is active. Test with GET /me, which bypasses the paid-tier check.
You’ve exhausted a credit bucket (keyword research, backlink research, or AI credits). Enable metered billing under Account → Billing → Usage to allow overage, or wait for the next cycle.
Either your plan doesn’t include Public API access, the key is inactive, or the website_id you passed isn’t in one of your organizations.
POST /keywords/research returns a job_id. Poll GET /keywords/research/{jobId} until status is completed or failed. Avoid sync: true in production — it’s subject to gateway timeouts.

CORS

All endpoints respond with Access-Control-Allow-Origin: *, so they can be called from any origin — but never ship a key in a browser. Always proxy requests through your own backend.

Prefer natural language?

Connect the Keupera MCP Server to run these same operations from Claude, Cursor, or any MCP-compatible client without writing HTTP calls yourself.