Programmatic access to your scan data, MentionShare scores, competitor analysis, and Fix Generator content — plus the ability to trigger new scans directly from your own workflows. Available on Enterprise plans.
All API requests require an API key passed in the Authorization header. Generate your key from Settings → Developer.
curl https://truecite.ai/api/v1/mentionshare \
-H "Authorization: Bearer tc_live_..."⚠️ Keep your API key secret. Never expose it in client-side code or public repositories. Keys are shown only once at creation — store them in a secrets manager. Revoke a compromised key from Settings → Developer.
https://truecite.ai/api/v1All v1 endpoints are served from truecite.ai — there is no separate API subdomain.
requests / hour
per API key — all Enterprise keys share the same limit
When the limit is exceeded, the API returns 429 Too Many Requests with a Retry-After header (seconds until the window resets). The limit resets on a rolling 1-hour window, not at a fixed clock boundary.
/api/v1/scans?limit=50&offset=0Response
{
"data": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"ai_engine": "chatgpt",
"prompt_used": "What is the best AEO tool for B2B SaaS?",
"brand_mentioned": true,
"brand_position": 2,
"brand_sentiment": "positive",
"mention_share_score": 45,
"scanned_at": "2026-06-13T10:00:00Z",
"country": "us",
"language": null
}
],
"meta": {
"total": 150,
"limit": 50,
"offset": 0,
"business_id": "550e8400-e29b-41d4-a716-446655440000"
}
}/api/v1/competitorsResponse
{
"data": [
{
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"name": "Peec AI",
"website": "https://peec.ai",
"mention_count": 12,
"mention_rate": 8
}
],
"meta": {
"total": 3,
"scans_analyzed": 150,
"business_id": "550e8400-e29b-41d4-a716-446655440000"
}
}/api/v1/fixes?limit=50&offset=0Response
{
"data": [
{
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"block_type": "faq_block",
"title": "FAQ: What is the best AEO tool for B2B SaaS?",
"target_prompt": "What is the best AEO tool for B2B SaaS?",
"status": "generated",
"created_at": "2026-06-13T09:00:00Z"
}
],
"meta": {
"total": 12,
"limit": 50,
"offset": 0,
"business_id": "550e8400-e29b-41d4-a716-446655440000"
}
}/api/v1/scansRequest body
{
"prompts": ["What is the best AEO tool for B2B SaaS?"],
"engines": ["chatgpt", "perplexity", "gemini"],
"language": "en",
"region": "us",
"scanName": "Weekly API scan"
}Response
{
"data": {
"jobId": "d4e5f6a7-b8c9-0123-defa-234567890123",
"scanGroupId": "e5f6a7b8-c9d0-1234-efab-345678901234",
"totalTasks": 3,
"promptCost": 1,
"promptsRemaining": 9999
}
}/api/v1/scans/status/{jobId}Response
{
"data": {
"jobId": "d4e5f6a7-b8c9-0123-defa-234567890123",
"status": "complete",
"scanGroupId": "e5f6a7b8-c9d0-1234-efab-345678901234",
"totalTasks": 3,
"tasksCompleted": 3,
"tasksSucceeded": 2,
"tasksFailed": 1,
"overallScore": 38,
"engineResults": {
"chatgpt": "mentioned",
"perplexity": "not_mentioned",
"gemini": "mentioned"
},
"results": [
{
"engine": "ChatGPT",
"engineId": "chatgpt",
"prompt": "What is the best AEO tool for B2B SaaS?",
"brandMentioned": true,
"brandPosition": 2,
"sentiment": "positive",
"competitorsMentioned": ["Peec AI"],
"mentionShareScore": 45
}
],
"error": null
}
}/api/v1/authority?limit=50&offset=0Response
{
"data": [
{
"id": "f6a7b8c9-d0e1-2345-f6a7-b8c9d0e12345",
"source_type": "url",
"source_url": "https://g2.com/products/truecite/reviews",
"original_filename": null,
"transcript_words": 1240,
"status": "done",
"error_message": null,
"blocks_generated": 3,
"blocks_error": null,
"created_at": "2026-06-14T09:00:00Z"
}
],
"meta": {
"total": 5,
"limit": 50,
"offset": 0,
"pendingJobs": []
}
}/api/v1/authorityRequest body
{
"sourceType": "url",
"sourceUrl": "https://g2.com/products/truecite/reviews"
}Response
{
"data": {
"jobId": "g7h8i9j0-k1l2-3456-m7n8-o9p0q1r2s3t4"
}
}/api/v1/authority/status/{jobId}Response
{
"data": {
"jobId": "g7h8i9j0-k1l2-3456-m7n8-o9p0q1r2s3t4",
"status": "complete",
"error": null,
"capture": {
"id": "f6a7b8c9-d0e1-2345-f6a7-b8c9d0e12345",
"source_type": "url",
"source_url": "https://g2.com/products/truecite/reviews",
"original_filename": null,
"transcript_words": 1240,
"status": "done",
"error_message": null,
"blocks_generated": 3,
"blocks_error": null,
"created_at": "2026-06-14T09:00:00Z"
}
}
}/api/v1/authority/{id}/blocksResponse
{
"data": [
{
"id": "h8i9j0k1-l2m3-4567-n8o9-p0q1r2s3t4u5",
"block_type": "faq_block",
"title": "FAQ: What do G2 reviewers say about TrueCite?",
"html_content": "<div class=\"faq-item\"><h3>...</h3><p>...</p></div>",
"plain_text": null,
"json_ld": null,
"status": "generated",
"created_at": "2026-06-14T09:01:00Z"
},
{
"id": "i9j0k1l2-m3n4-5678-o9p0-q1r2s3t4u5v6",
"block_type": "answer_block",
"title": "Answer paragraph for AI engines",
"html_content": null,
"plain_text": "TrueCite users on G2 highlight...",
"json_ld": null,
"status": "generated",
"created_at": "2026-06-14T09:01:00Z"
},
{
"id": "j0k1l2m3-n4o5-6789-p0q1-r2s3t4u5v6w7",
"block_type": "schema_jsonld",
"title": "FAQ Schema markup",
"html_content": null,
"plain_text": null,
"json_ld": "{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[...]}",
"status": "generated",
"created_at": "2026-06-14T09:01:00Z"
}
]
}/api/v1/authority/{id}/regenerateResponse
{
"data": {
"blocksGenerated": 3,
"error": null,
"blocks": [
{
"id": "k1l2m3n4-o5p6-7890-q1r2-s3t4u5v6w7x8",
"block_type": "faq_block",
"title": "FAQ: What do G2 reviewers say about TrueCite?",
"html_content": "<div class=\"faq-item\">...</div>",
"plain_text": null,
"json_ld": null,
"status": "generated",
"created_at": "2026-06-14T09:05:00Z"
}
]
}
}/api/v1/crawler-check?limit=50&offset=0Response
{
"data": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"domain": "https://acmecorp.com",
"score": 75,
"bots_allowed": 7,
"bots_total": 8,
"llms_txt_found": true,
"sitemap_found": true,
"result_json": { "domain": "https://acmecorp.com", "botStatuses": [...], "overallHealthy": false },
"scanned_at": "2026-06-14T10:00:00Z"
}
],
"meta": {
"total": 3,
"limit": 50,
"offset": 0,
"business_id": "550e8400-e29b-41d4-a716-446655440000"
}
}/api/v1/crawler-checkRequest body
{
"url": "https://acmecorp.com"
}Response
{
"data": {
"jobId": "b2c3d4e5-f6a7-8901-bcde-f12345678901"
}
}/api/v1/crawler-check/status/{jobId}Response
{
"data": {
"jobId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"status": "complete",
"error": null,
"result": {
"domain": "https://acmecorp.com",
"robotsFetched": true,
"botStatuses": [
{ "key": "GPTBot", "label": "GPTBot", "company": "OpenAI / ChatGPT", "allowed": true, "explicitly": "allowed" },
{ "key": "ClaudeBot", "label": "ClaudeBot", "company": "Anthropic / Claude", "allowed": false, "explicitly": "blocked" }
],
"blockedCount": 1,
"blockedHighImpact": ["ClaudeBot"],
"crawlSim": { "status": 200, "accessible": true, "blockingSignals": [], "wafDetected": null },
"llms": { "found": true, "contentBytes": 1420 },
"sitemap": { "found": true, "excerpt": "42 URLs indexed" },
"overallHealthy": false
}
}
}/api/v1/llms-check?limit=50&offset=0Response
{
"data": [
{
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"domain_scanned": "https://acmecorp.com",
"score": 62,
"has_llms_txt": true,
"has_llms_full": false,
"ai_bots_allowed": true,
"has_link_tag": false,
"fixes_needed": [
{ "id": "add-llms-full", "title": "Create /llms-full.txt", "severity": "low" }
],
"scanned_at": "2026-06-14T10:00:00Z"
}
],
"meta": {
"total": 5,
"limit": 50,
"offset": 0,
"business_id": "550e8400-e29b-41d4-a716-446655440000"
}
}/api/v1/llms-checkRequest body
{
"url": "https://acmecorp.com"
}Response
{
"data": {
"jobId": "d4e5f6a7-b8c9-0123-defa-234567890123"
}
}/api/v1/llms-check/status/{jobId}Response
{
"data": {
"jobId": "d4e5f6a7-b8c9-0123-defa-234567890123",
"status": "complete",
"error": null,
"result": {
"domain": "https://acmecorp.com",
"score": 62,
"hasLlmsTxt": true,
"hasLlmsFullTxt": false,
"botStatus": { "GPTBot": true, "ClaudeBot": true, "PerplexityBot": true, "anthropic-ai": true },
"hasLinkTag": false,
"signals": { "hasLlmsFullTxt": false, "hasWordCount1000": true, "hasPricingSection": true, "hasFaqSection": false },
"fixes": [
{ "id": "add-llms-full", "title": "Create /llms-full.txt", "severity": "low", "description": "llms-full.txt is the extended version with complete documentation.", "code": "..." }
]
}
}
}/api/v1/schema-audit?limit=50&offset=0Response
{
"data": [
{
"id": "e5f6a7b8-c9d0-1234-efa0-b1c2d3e4f567",
"domain_scanned": "https://acmecorp.com",
"url_scanned": "https://acmecorp.com",
"score": 62,
"schemas_found": ["Organization", "WebSite"],
"schemas_missing": ["FAQPage", "Article", "HowTo"],
"fixes_needed": [
{ "id": "add-faq-schema", "title": "Add FAQPage JSON-LD schema", "severity": "high" }
],
"status": "complete",
"scanned_at": "2026-06-14T11:00:00Z"
}
],
"meta": {
"total": 8,
"limit": 50,
"offset": 0,
"business_id": "550e8400-e29b-41d4-a716-446655440000"
}
}/api/v1/schema-auditRequest body
{
"url": "https://acmecorp.com"
}Response
{
"data": {
"jobId": "e5f6a7b8-c9d0-1234-efa0-b1c2d3e4f567"
}
}/api/v1/schema-audit/status/{jobId}Response
{
"data": {
"jobId": "e5f6a7b8-c9d0-1234-efa0-b1c2d3e4f567",
"status": "complete",
"result": {
"domain": "https://acmecorp.com",
"score": 62,
"schemasFound": ["Organization", "WebSite"],
"schemasMissing": ["FAQPage", "Article", "HowTo"],
"allSchemaTypes": [
{ "type": "Organization", "found": true, "highValue": true },
{ "type": "FAQPage", "found": false, "highValue": true }
],
"ogTags": { "title": "Acme Corp", "description": "AI-driven tools.", "image": "https://acmecorp.com/og.png", "type": "website" },
"twitterCard": { "card": "summary_large_image", "title": "Acme Corp", "description": "" },
"metaTags": { "title": "Acme Corp | AI Tools", "description": "AI-driven...", "canonical": "https://acmecorp.com/" },
"headings": { "h1": 1, "h2": 4, "h3": 6 },
"wordCount": 1420,
"internalLinks": 12,
"fixes": [
{ "id": "add-faq-schema", "severity": "high", "title": "Add FAQPage JSON-LD schema", "description": "...", "code": "<script type=\"application/ld+json\">...</script>" }
],
"scoreBreakdown": { "hasOrg": true, "hasFaq": false, "hasArticleHow": false, "ogComplete": true, "metaComplete": true, "singleH1": true, "hasTwitter": true },
"pageData": { "brandName": "Acme Corp", "description": "AI-driven tools.", "sameAs": [], "logo": "https://acmecorp.com/logo.png", "inLanguage": "en", "favicon": "https://acmecorp.com/favicon.ico", "canonical": "https://acmecorp.com/" }
}
}
}/api/v1/schema-audit/{id}Response
{
"data": {
"id": "e5f6a7b8-c9d0-1234-efa0-b1c2d3e4f567",
"status": "complete",
"url_scanned": "https://acmecorp.com",
"domain_scanned": "https://acmecorp.com",
"scanned_at": "2026-06-14T11:00:00Z",
"result": {
"domain": "https://acmecorp.com",
"score": 62,
"schemasFound": ["Organization", "WebSite"],
"schemasMissing": ["FAQPage", "Article", "HowTo"],
"fixes": [ { "id": "add-faq-schema", "severity": "high", "title": "Add FAQPage JSON-LD schema", "description": "...", "code": "..." } ],
"scoreBreakdown": { "hasOrg": true, "hasFaq": false, "hasArticleHow": false, "ogComplete": true, "metaComplete": true, "singleH1": true, "hasTwitter": true }
}
}
}/api/v1/ai-seo-audit?limit=50&offset=0Response
{
"data": [
{
"id": "f6a7b8c9-d0e1-2345-fab0-c1d2e3f4a567",
"url": "https://acmecorp.com/pricing",
"technical_score": 72,
"content_score": 58,
"ai_seo_score": 45,
"overall_score": 57,
"issues": [
{ "type": "warning", "category": "ai_seo", "message": "No FAQPage schema found", "fix": "Add FAQPage JSON-LD with 3–5 Q&A pairs targeting your brand queries" },
{ "type": "info", "category": "content", "message": "Word count is 480 — aim for 600+", "fix": "Expand the page with additional supporting content" }
],
"audited_at": "2026-06-14T12:00:00Z",
"created_at": "2026-06-14T12:00:00Z"
}
],
"meta": {
"total": 14,
"limit": 50,
"offset": 0
}
}/api/v1/ai-seo-auditResponse
{
"data": {
"jobId": "f6a7b8c9-d0e1-2345-fab0-c1d2e3f4a567",
"totalPages": 14,
"sitemapFound": true
}
}/api/v1/ai-seo-audit/status/{jobId}Response
{
"data": {
"jobId": "f6a7b8c9-d0e1-2345-fab0-c1d2e3f4a567",
"status": "running",
"totalPages": 14,
"pagesCompleted": 9,
"percentComplete": 64,
"currentUrl": "https://acmecorp.com/blog/aeo-guide",
"error": null
}
}/api/v1/ai-seo-audit/{pageId}Response
{
"data": {
"id": "f6a7b8c9-d0e1-2345-fab0-c1d2e3f4a567",
"business_id": "550e8400-e29b-41d4-a716-446655440000",
"url": "https://acmecorp.com/pricing",
"technical_score": 72,
"content_score": 58,
"ai_seo_score": 45,
"overall_score": 57,
"issues": [
{ "type": "warning", "category": "ai_seo", "message": "No FAQPage schema found", "fix": "Add FAQPage JSON-LD with 3–5 Q&A pairs targeting your brand queries" },
{ "type": "critical", "category": "technical", "message": "Missing meta description", "fix": "Add a 120–155 character meta description summarising the page content" }
],
"audited_at": "2026-06-14T12:00:00Z",
"created_at": "2026-06-14T12:00:00Z"
}
}import requests
API_KEY = "tc_live_..."
BASE_URL = "https://truecite.ai/api/v1"
headers = {"Authorization": f"Bearer {API_KEY}"}
# Get MentionShare score
ms = requests.get(f"{BASE_URL}/mentionshare", headers=headers).json()
print(f"MentionShare: {ms['data']['mention_share']}%")
print(f"By engine: {ms['data']['by_engine']}")
# Get recent scans (paginated)
scans = requests.get(f"{BASE_URL}/scans?limit=100&offset=0", headers=headers).json()
print(f"Total scans: {scans['meta']['total']}")
for scan in scans["data"]:
status = "✓" if scan["brand_mentioned"] else "✗"
print(f" {status} {scan['ai_engine']} — {scan['prompt_used'][:50]}")const API_KEY = 'tc_live_...'
const BASE_URL = 'https://truecite.ai/api/v1'
const headers = { 'Authorization': `Bearer ${API_KEY}` }
// Get MentionShare score
const ms = await fetch(`${BASE_URL}/mentionshare`, { headers }).then(r => r.json())
console.log('MentionShare:', ms.data.mention_share + '%')
console.log('By engine:', ms.data.by_engine)
// Get recent scans (paginated)
const scans = await fetch(`${BASE_URL}/scans?limit=100&offset=0`, { headers }).then(r => r.json())
console.log('Total scans:', scans.meta.total)
for (const scan of scans.data) {
const status = scan.brand_mentioned ? '✓' : '✗'
console.log(` ${status} ${scan.ai_engine} — ${scan.prompt_used.slice(0, 50)}`)
}Subscribe to real-time events delivered to your own HTTPS endpoint. Webhooks are registered from Settings → Developer → Webhooks (Enterprise only). Each delivery is signed so you can verify it came from TrueCite.
Fires once when all tasks in a scan job finish processing.
Payload
{
"event": "scan.completed",
"data": {
"jobId": "d4e5f6a7-b8c9-0123-defa-234567890123",
"scanGroupId": "e5f6a7b8-c9d0-1234-efab-345678901234",
"businessId": "550e8400-e29b-41d4-a716-446655440000",
"businessName": "Acme Corp",
"tasksSucceeded": 44,
"tasksFailed": 1,
"sentiment": {
"positive": 12,
"neutral": 8,
"negative": 2,
"not_mentioned": 22
}
},
"timestamp": "2026-06-13T10:00:00.000Z"
}Fires when your 7-day MentionShare average drops more than 10 points vs the prior week.
Payload
{
"event": "mention.dropped",
"data": {
"businessId": "550e8400-e29b-41d4-a716-446655440000",
"businessName": "Acme Corp",
"currentScore": 32,
"previousScore": 51,
"drop": 19
},
"timestamp": "2026-06-13T00:00:00.000Z"
}Fires when AI engines surface a new competitor name that is not already in your competitors list.
Payload
{
"event": "competitor.detected",
"data": {
"businessId": "550e8400-e29b-41d4-a716-446655440000",
"businessName": "Acme Corp",
"newCompetitors": [
{ "name": "Peec AI", "count": 4, "engines": ["chatgpt", "gemini"] }
]
},
"timestamp": "2026-06-13T10:01:00.000Z"
}Fires when an Authority Capture job completes and AEO content blocks have been generated.
Payload
{
"event": "authority.captured",
"data": {
"businessId": "550e8400-e29b-41d4-a716-446655440000",
"businessName": "Acme Corp",
"captureId": "f6a7b8c9-d0e1-2345-f6a7-b8c9d0e12345",
"sourceType": "url",
"sourceUrl": "https://g2.com/products/truecite/reviews",
"blocksGenerated": 3,
"status": "done"
},
"timestamp": "2026-06-14T09:01:00.000Z"
}Fires when an AI bot access audit finishes. Payload includes a summary score and key signals (not the full result_json).
Payload
{
"event": "crawler_check.completed",
"data": {
"businessId": "550e8400-e29b-41d4-a716-446655440000",
"domain": "https://acmecorp.com",
"jobId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"status": "complete",
"score": 75,
"botsAllowed": 7,
"botsTotal": 8,
"llmsTxtFound": true,
"sitemapFound": true
},
"timestamp": "2026-06-14T10:00:30.000Z"
}Fires when an llms.txt audit finishes. Payload includes score and presence signals.
Payload
{
"event": "llms_check.completed",
"data": {
"businessId": "550e8400-e29b-41d4-a716-446655440000",
"domain": "https://acmecorp.com",
"jobId": "d4e5f6a7-b8c9-0123-defa-234567890123",
"status": "complete",
"score": 62,
"hasLlmsTxt": true,
"hasLlmsFullTxt": false
},
"timestamp": "2026-06-14T10:01:00.000Z"
}Fires when a Schema.org audit finishes. Payload includes score, schemas found/missing, and the URL audited.
Payload
{
"event": "schema_audit.completed",
"data": {
"businessId": "550e8400-e29b-41d4-a716-446655440000",
"businessName": "Acme Corp",
"scanId": "e5f6a7b8-c9d0-1234-efa0-b1c2d3e4f567",
"jobId": "e5f6a7b8-c9d0-1234-efa0-b1c2d3e4f567",
"urlScanned": "https://acmecorp.com",
"domainScanned": "https://acmecorp.com",
"score": 62,
"schemasFound": ["Organization", "WebSite"],
"schemasMissing": ["FAQPage", "Article", "HowTo"],
"status": "complete"
},
"timestamp": "2026-06-14T11:00:30.000Z"
}Fires when a full-site AI SEO audit finishes. Payload includes page counts, average score, and a link back to the results list. Note: only fires from the primary completion path (page-worker), not the queue-processor catch-all path.
Payload
{
"event": "ai_seo_audit.completed",
"data": {
"businessId": "550e8400-e29b-41d4-a716-446655440000",
"businessName": "Acme Corp",
"jobId": "f6a7b8c9-d0e1-2345-fab0-c1d2e3f4a567",
"totalPages": 14,
"pagesCompleted": 14,
"avgScore": 63,
"status": "complete"
},
"timestamp": "2026-06-14T12:05:00.000Z"
}Every delivery includes an X-TrueCite-Signature-256 header containing sha256=<HMAC-SHA256 hex> computed over the raw JSON body using the plaintext signing secret shown once at endpoint creation. Verify before processing.
import { createHmac } from 'crypto'
const WEBHOOK_SECRET = process.env.TRUECITE_WEBHOOK_SECRET // tc_whsec_...
export async function POST(req) {
const sig = req.headers.get('x-truecite-signature-256') // "sha256=abc123..."
const body = await req.text()
const expected = 'sha256=' + createHmac('sha256', WEBHOOK_SECRET)
.update(body)
.digest('hex')
if (sig !== expected) {
return new Response('Forbidden', { status: 403 })
}
const { event, data, timestamp } = JSON.parse(body)
if (event === 'scan.completed') {
console.log('Scan done, sentiment:', data.sentiment)
console.log('Tasks:', data.tasksSucceeded, 'succeeded,', data.tasksFailed, 'failed')
} else if (event === 'mention.dropped') {
console.log('Drop alert:', data.drop, 'points')
} else if (event === 'competitor.detected') {
console.log('New competitors:', data.newCompetitors.map(c => c.name))
} else if (event === 'authority.captured') {
console.log('Capture done:', data.captureId, 'blocks:', data.blocksGenerated)
} else if (event === 'crawler_check.completed') {
console.log('Crawler check done — score:', data.score, '| bots allowed:', data.botsAllowed + '/' + data.botsTotal)
} else if (event === 'llms_check.completed') {
console.log('LLMs check done — score:', data.score, '| llms.txt found:', data.hasLlmsTxt)
} else if (event === 'schema_audit.completed') {
console.log('Schema audit done — score:', data.score, '| schemas found:', data.schemasFound)
} else if (event === 'ai_seo_audit.completed') {
console.log('AI SEO audit done —', data.pagesCompleted, 'pages | avg score:', data.avgScore)
}
return new Response('OK')
}Your endpoint must respond with HTTP 200 within 10 seconds. On failure, TrueCite retries up to 3 times with exponential backoff via QStash. Register and manage webhook endpoints from Settings → Developer → Webhooks.
| Code | Meaning | Solution |
|---|---|---|
| 401 | Unauthorized | API key is missing, invalid, or revoked. Check your Authorization header. |
| 402 | Payment required | POST endpoints: subscription is unpaid, incomplete, or paused. Update your payment method. Also returned by POST /scans when scan_prompts are exhausted (code: insufficient_prompts). |
| 403 | Forbidden | This key belongs to a non-Enterprise account. API access requires an Enterprise plan. |
| 429 | Rate Limited | Exceeded 100 requests/hour. Check the Retry-After header for seconds until reset. |
| 500 | Server Error | Something went wrong on our end. Retry after a few seconds. |
Error response shape
{ "error": { "code": "unauthorized", "message": "Invalid or revoked API key" } }API access is available on Enterprise plans. Generate your key from Settings → Developer once on Enterprise.