Introduction
The LightSpot API is a REST interface that lets you launch audits and read results and manage editorial planning from your own code. Nine endpoints, versioned under /v1/, authenticated via a Bearer token. Available on the Eclat and Zenith plans; the competitor analysis endpoint requires Zenith.
Base URL: https://lightspot.ai/v1
curl -X POST https://lightspot.ai/v1/audits \
-H "Authorization: Bearer lspai_live_<your-key>" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com"}'Authentication
Create and manage keys in Integrations. A key is shown in full only once at creation — save it in a secret manager.
Pass the key in the Authorization header on every request:
Authorization: Bearer lspai_live_<your-key>Revoking a key invalidates it immediately. Rotating keys: create a new one, update your integration, then revoke the old one.
Connect LightSpot to Claude
Our remote MCP server lets you use LightSpot from Claude on the web, Claude Desktop, the Claude mobile apps and Claude Code. MCP (Model Context Protocol) is the open standard Claude uses to connect to outside tools. You sign in with your LightSpot account, so there is no API key to create or paste. Server URL: https://mcp.lightspot.ai/mcp
1. Add the connector in Claude
In Claude, open Customize → Connectors, click + Add, then Add custom connector. Name it LightSpot, enter
https://mcp.lightspot.ai/mcpas the server URL and click Continue. Keep the sign-in settings Claude detects and leave request headers empty: LightSpot uses OAuth, so there is no API key to enter. Click Add, then sign in when Claude prompts you. A connector added on the web or in Claude Desktop also appears in the Claude mobile apps.On a Claude Team or Enterprise plan, an Owner first adds the connector under Organization settings → Connectors. Each member then clicks Connect next to LightSpot in Customize → Connectors.
2. Or add it to Claude Code
Run the command below in a terminal. Then type
/mcpin Claude Code, selectlightspotand follow the authentication prompt: your browser opens the LightSpot sign-in page. To make LightSpot available in all your projects, place--scope userbefore the server name:claude mcp add --transport http --scope user lightspot https://mcp.lightspot.ai/mcpclaude mcp add --transport http lightspot https://mcp.lightspot.ai/mcp3. Sign in and choose a workspace
Sign in to LightSpot, or create an account, with a magic link sent by email or with your Google account. If you belong to several workspaces, choose the one Claude should work in: its plan and quotas apply to everything Claude does there. The consent screen lists what Claude will be able to do: view your sites, audits, scores and our AI experts' findings, run audits, and create or update editorial calendars. It also states what Claude cannot do: delete data, publish to your site or see your billing. Click Allow to finish.
To move Claude to another workspace later, revoke the connection in LightSpot, then connect again and choose the other workspace.
4. Ask Claude
Ask in plain language, for example: "Audit https://example.com and tell me what to fix first so AI assistants can cite it." Claude picks the LightSpot tools it needs and answers in the language you write in.
Available tools
| Tool | What it does |
|---|---|
list_sites | Lists the sites in your workspace with their latest score. |
get_site | Returns a site's details and its most recent audits. |
list_site_audits | Returns a site's audit history, with pagination. |
run_audit | Starts an audit of a URL, optionally attached to one of your sites, and returns its id without waiting for the result. |
audit_and_wait | Runs an audit of a URL and returns the score, top actions and main issues. If the audit is still running after about 50 seconds, it returns the audit id so Claude can follow up. |
get_audit_status | Returns an audit's status and progress. |
get_audit | Returns an audit's results: a summary by default, or every page and issue on request. |
get_expert_report | Returns the latest report from our AI experts for a site: prioritized findings, recommended actions with their steps, and ready-to-use fixes such as JSON-LD structured data or a sitemap. Does not start a new analysis. |
get_competitors | Returns a site's latest competitor analysis: detected competitors, citations and recommendations. Zenith plan only. Does not start a new analysis. |
get_editorial_calendar | Reads a site's editorial calendar over a date range: planned slots, content in preparation, scheduled or published, and upcoming autopilot runs. |
create_editorial_calendar | Imports or updates up to 50 dated slots in a site's editorial calendar. It only plans: nothing is generated or published, and none of your credits are used. |
Plans
The connector is included in the Eclat and Zenith plans, including during the free trial. Competitor analysis (get_competitors) requires Zenith. Any LightSpot account can connect, but without an active Eclat or Zenith plan the tools reply with a message and a link to subscribe to Eclat. Audits launched from Claude count toward your plan's monthly audit quota and follow its page limit per audit. When an audit is attached to one of your sites, the rule of one audit per site per day also applies.
Revoke access
In LightSpot, open Integrations → Connected apps and click Revoke next to Claude. If your plan is inactive, the same list is available at lightspot.ai/connected-apps. Access stops immediately, and Claude will have to ask for your authorization again before it can use LightSpot. Each workspace you connected appears separately and can be revoked on its own. You can also remove the connector in Claude, but revoking it in LightSpot is what cancels the authorization on our side.
Using an API key instead
If your MCP client only supports local servers, or if you prefer to authenticate with an API key, the @lightspot/mcp npm package provides the same 11 tools over stdio. Create a key in Integrations → API keys, then add the server to your client's configuration. The same plans apply.
{
"mcpServers": {
"lightspot": {
"command": "npx",
"args": ["-y", "@lightspot/mcp"],
"env": { "LIGHTSPOT_API_KEY": "lspai_live_<your-key>" }
}
}
}Rate limits
Each key has its own request budget, refreshing every minute:
| Plan | Requests / min / key |
|---|---|
| Eclat | 30 |
| Zenith | 300 |
Exceeding the limit returns HTTP 429 with retryAfter (seconds) in the error payload. Audit quota is separate — shared with your dashboard, based on auditsPerMonth of your plan.
Errors
All errors share the same shape:
{ "error": { "code": "quota_exceeded", "message": "Monthly audit quota reached (50/50)." } }| Code | HTTP | Meaning |
|---|---|---|
unauthorized | 401 | Missing, invalid, or revoked API key |
forbidden | 403 | Authenticated but plan does not allow API |
not_found | 404 | Resource does not exist or is not yours |
validation | 400 | Body or query failed schema validation |
unreachable_url | 400 | URL could not be reached for audit |
quota_exceeded | 429 | Monthly audit quota exhausted |
rate_limit_exceeded | 429 | Per-key requests-per-minute cap hit |
server_error | 500 | Unhandled exception |
Endpoints
/v1/auditsLaunch an audit
Creates an audit and returns immediately with a QUEUED status. Poll the status endpoint or fetch the full audit later.
curl -X POST https://lightspot.ai/v1/audits \
-H "Authorization: Bearer lspai_live_<key>" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com","maxPages":10}'{
"id": "cmn_abc123",
"shareToken": "xxxxxxxxxx",
"status": "QUEUED",
"maxPages": 10
}/v1/audits/{id}Full audit
curl https://lightspot.ai/v1/audits/cmn_abc123 \
-H "Authorization: Bearer lspai_live_<key>"{
"id": "cmn_abc123",
"status": "DONE",
"url": "https://example.com",
"score": { "global": 55, "seo": 64, "geo": 50, "grade": "C" },
"issues": [ /* ... */ ],
"topActions": [ /* top 3 */ ],
"pages": [ /* ... */ ],
"keywords": [ /* ... */ ]
}/v1/audits/{id}/statusPolling status
Lightweight endpoint for polling. Returns the current status and a deterministic progress number between 0 and 1.
{ "id": "cmn_abc123", "status": "ANALYZING", "progress": 0.5 }/v1/sitesList sites
Returns sites owned by the caller. Supports limit (max 100, default 50) and offset.
{
"data": [
{
"id": "cmn_xyz",
"name": "Acme",
"url": "https://acme.com",
"createdAt": "2026-04-01T00:00:00Z",
"latestAuditId": "cmn_abc",
"latestScore": 72
}
],
"total": 1,
"limit": 50,
"offset": 0
}/v1/sites/{id}Site detail
Site metadata plus the five most recent audits, any status.
{
"id": "cmn_xyz",
"name": "Acme",
"url": "https://acme.com",
"recentAudits": [ /* up to 5 compact audit summaries */ ]
}/v1/sites/{id}/auditsAudit history for a site
Paginated list of audits for a site. Same limit / offset contract as /v1/sites.
/v1/sites/{id}/competitorsLatest competitor analysis
Returns the latest competitor run already available for the site. This endpoint does not trigger a new analysis. Requires the Zenith plan.
/v1/sites/{id}/expertsLatest expert report
Returns the latest report from our experts for the site: one chapter per expert (technical SEO, content, GEO, structured data, sitemaps, performance, visual, brand authority) with prioritized findings, recommended actions and their steps, limitations, artifacts and evidence. Optional auditId targets the analysis of a given audit; optional expert keeps a single chapter. While the analysis runs, status is PENDING or RUNNING and chapters carry their status only. This endpoint does not trigger a new analysis.
curl "https://lightspot.ai/v1/sites/cmn_xyz/experts?expert=seo-schema" \
-H "Authorization: Bearer lspai_live_<key>"/v1/sites/{id}/editorial-calendarRead an editorial calendar
Requires ISO 8601 from and to query parameters. The range is half-open and limited to 366 days. Results include imported slots, preparing/scheduled/published content, and projected autopilot runs.
curl "https://lightspot.ai/v1/sites/cmn_xyz/editorial-calendar?from=2026-08-01T00%3A00%3A00%2B02%3A00&to=2026-09-01T00%3A00%3A00%2B02%3A00" \
-H "Authorization: Bearer lspai_live_<key>"/v1/sites/{id}/editorial-calendarImport editorial slots
Creates or updates up to 50 future planning slots. Supply a stable externalId to make reimports idempotent. Without one, LightSpot derives an identifier from the type, date, and platforms. This endpoint never generates, schedules, or publishes content and does not consume AI credits.
curl -X POST https://lightspot.ai/v1/sites/cmn_xyz/editorial-calendar \
-H "Authorization: Bearer lspai_live_<key>" \
-H "Content-Type: application/json" \
-d '{
"items": [{
"externalId": "linkedin-2026-w32-01",
"kind": "SOCIAL",
"topic": "Why AI assistants overlook otherwise useful pages",
"platforms": ["LINKEDIN", "X"],
"format": "post",
"notes": "Educational angle, finish with an audit CTA",
"plannedFor": "2026-08-10T09:00:00+02:00"
}]
}'{
"created": 1,
"updated": 0,
"items": [ /* imported slots */ ],
"calendarPath": "/sites/cmn_xyz/calendar"
}Changelog
v1 · 2026-08-03— Editorial calendar read and idempotent slot import endpoints. MCP tools added.v1 · 2026-04-17— Initial release. Six endpoints. Bearer auth. Per-key rate limits.