Browse documentation+
BeVisible API
Read the evidence behind your AI visibility, connect it to internal tools, and automate the work that follows.
01 / Quickstart
Make your first request
Create an account access token, store it in a server-side environment variable, and use it to list the projects available to your integration.
- 01
Create a token
Choose only the permissions your integration needs.
- 02
Store it securely
Save the token as BEVISIBLE_API_KEY. It is shown only once.
- 03
List projects
Use GET /projects to discover the project IDs you can access.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
200 OK{
"data": {
"primaryProjectId": "project_2x9m4q",
"projects": [
{
"id": "project_2x9m4q",
"name": "Acme",
"url": "https://acme.com",
"domain": "acme.com",
"isPrimary": true,
"scopes": [
"project:read",
"visibility:overview"
]
}
],
"count": 1
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}Playground
Try the API
Send a real request with your access token and inspect the response without leaving the documentation.
Response
Choose an endpoint and send a request to inspect the live response.
02 / Access
Authentication and scopes
Every API request requires a BeVisible access token in theAuthorizationheader. New tokens start withbv_live_.
In account settings, choose either all projects with one permission set or selected projects with permissions set per project. All-project access also covers projects added later. OAuth tokens remain limited to the projects approved during authorization.
Keep tokens server-side.
Do not put a token in browser code, a public repository, or logs. BeVisible stores only its hash and cannot show it again.
project:readRead projects and their tracked context.
articles:readRead generated, scheduled, and published articles.
search:readRead connected Google Search Console analytics.
visibility:overviewRead visibility overview metrics.
visibility:promptsRead tracked prompts and prompt tags.
visibility:prompts:writeAdd, remove, rename, and delete prompt tags.
visibility:responsesRead AI responses and answer evidence.
visibility:citationsRead citations and citation gaps.
visibility:brandsRead owned and competing brands.
visibility:actionsRead recommended actions and action briefs.
crawlers:readRead AI crawler analytics and request logs.
03 / Collections
Pagination
Paginated collections return an opaquenextCursor and ahasMore flag. Pass the cursor back unchanged. Do not parse it or construct one yourself.
GET /prompts?limit=20&cursor=bv-v1%3AeyJpZCI6Ii4uLiJ904 / Limits
Rate limits
Each token can make 120 requests every 60 seconds. A429 response includes Retry-After. Wait for that many seconds before retrying.
RateLimit-Policy: 120;w=60
Retry-After: 1705 / Failures
Errors and request IDs
Errors useapplication/problem+jsonwith a stable machine-readable code. Log therequestId from every response so support can trace a failed request.
Every endpoint includes the complete response set in its response dropdown. The OpenAPI document defines the same status codes for generated clients.
400invalid_requestInvalid parameters or JSON body403insufficient_scopeToken lacks the required scope404endpoint_not_foundAPI endpoint does not exist404not_foundProject or resource does not exist405method_not_allowedHTTP method is not supported429rate_limit_exceededToken exceeded its request limit500internal_errorUnexpected server errorResponse
400 Bad Request{
"type": "https://bevisible.app/docs/api#invalid_request",
"title": "Invalid request",
"status": 400,
"detail": "The limit parameter is invalid.",
"instance": "/api/v1/projects/project_2x9m4q/prompts",
"code": "invalid_request",
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6",
"errors": [
{
"path": "limit",
"message": "The supplied value is not valid for this parameter."
}
]
}Reference
Endpoints
All request and response bodies use JSON. URL paths use kebab-case; query parameters and JSON fields use camelCase.
Resource
Projects
Discover projects and retrieve their tracked context.
listProjects
List projects
/api/v1/projectsList all BeVisible projects available to this connection, including project IDs, domains, scopes, and the primary project.
project:readParameters
This endpoint does not accept any parameters.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"primaryProjectId": "project_2x9m4q",
"projects": [
{
"id": "project_2x9m4q",
"name": "Acme",
"url": "https://acme.com",
"domain": "acme.com",
"isPrimary": true,
"scopes": [
"project:read",
"visibility:overview"
]
}
],
"count": 1
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}getProject
Get project context
/api/v1/projects/{projectId}Return one BeVisible project, tracked brands, visibility platforms, prompt count, latest run, and open action counts.
project:readParameters
projectIdrequiredAuthorized project ID or domain.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"project": {
"id": "project_2x9m4q",
"name": "Acme",
"domain": "acme.com",
"blogUrl": "https://acme.com/blog",
"businessDescription": "AI visibility software for SaaS teams.",
"targetAudience": "B2B SaaS marketing teams",
"niche": "AI visibility",
"language": "en",
"targetCountryCode": "US",
"timezone": "America/New_York"
},
"visibility": {
"count": 1,
"providers": [
"chatgpt",
"perplexity",
"gemini"
],
"promptCount": 48,
"latestRunAt": "2026-08-28T03:14:22.000Z"
},
"brands": [
{
"id": "brand_1k9v",
"name": "Acme",
"domain": "acme.com",
"aliases": [
"Acme AI"
],
"relation": "own",
"tags": [],
"logoUrl": "https://acme.com/icon.png",
"isActive": true,
"isIgnored": false,
"createdAt": "2026-08-01T08:00:00.000Z",
"updatedAt": "2026-08-28T03:14:22.000Z"
}
],
"actions": {
"open": 7,
"highPriorityOpen": 2
},
"latestResponseAt": "2026-08-28T03:14:22.000Z"
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}Resource
Articles
Read generated, scheduled, and published content.
listArticles
List articles
/api/v1/projects/{projectId}/articlesList generated, scheduled, published, draft, or failed articles for one project with publication status and timestamps. Use the returned cursor to continue through older articles.
articles:readParameters
projectIdrequiredAuthorized project ID or domain.
statusOptional article status filter.
limitMaximum number of articles to return. Defaults to 15.
min 1, max 50
cursorOpaque pagination cursor returned by the previous page.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/articles?limit=20&status=published' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"filters": {
"status": "published"
},
"articles": [
{
"id": "article_8k2d1p",
"title": "How to evaluate AI visibility platforms",
"slug": "evaluate-ai-visibility-platforms",
"status": "published",
"wordCount": 1640,
"scheduledAt": null,
"generatedAt": "2026-08-20T15:12:00.000Z",
"publishedAt": "2026-08-21T09:30:00.000Z",
"createdAt": "2026-08-20T14:58:00.000Z",
"updatedAt": "2026-08-21T09:30:00.000Z",
"error": null
}
],
"count": 1,
"hasMore": true,
"nextCursor": "bv-v1:eyJpZCI6Ii4uLiJ9"
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}getArticle
Get article
/api/v1/projects/{projectId}/articles/{articleId}Return one article from one project with its full content, metadata, publication status, and timestamps.
articles:readParameters
projectIdrequiredAuthorized project ID or domain.
articleIdrequiredArticle document id returned by list_articles.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/articles/article_8k2d1p' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"article": {
"id": "article_8k2d1p",
"title": "How to evaluate AI visibility platforms",
"slug": "evaluate-ai-visibility-platforms",
"status": "published",
"wordCount": 1640,
"scheduledAt": null,
"generatedAt": "2026-08-20T15:12:00.000Z",
"createdAt": "2026-08-20T14:58:00.000Z",
"updatedAt": "2026-08-21T09:30:00.000Z",
"error": null,
"metaTitle": "How to evaluate AI visibility platforms",
"metaDescription": "A practical framework for comparing AI visibility platforms.",
"content": "# How to evaluate AI visibility platforms\n\n...",
"contentFormat": "markdown",
"featuredImageUrl": "https://assets.bevisible.app/featured-images/evaluate-ai-visibility-platforms.png",
"featuredImageAlt": "AI visibility platform evaluation dashboard",
"publishedAt": "2026-08-21T09:30:00.000Z"
}
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}Resource
Search analytics
Access connected Google Search Console performance.
getSearchAnalytics
Get search analytics
/api/v1/projects/{projectId}/search-analyticsReturn Google Search Console totals, comparison totals, traffic trend, leading queries, and leading pages for one project.
search:readParameters
projectIdrequiredAuthorized project ID or domain.
rangeGoogle Search Console time range. Defaults to 28d.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/search-analytics?range=7d' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"available": true,
"range": "7d",
"totals": {
"clicks": 1842,
"impressions": 68410,
"avgCtr": 0.0269,
"avgPosition": 12.4
},
"comparisonTotals": {
"clicks": 1607,
"impressions": 62118,
"avgCtr": 0.0259,
"avgPosition": 13.1
},
"topQueries": [
{
"query": "ai visibility tools",
"clicks": 94,
"impressions": 2310
}
],
"topPages": [
{
"page": "https://acme.com/ai-visibility",
"clicks": 181,
"impressions": 4420
}
]
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}Resource
Visibility
Read high-level AI visibility and citation metrics.
getVisibilityOverview
Get visibility overview
/api/v1/projects/{projectId}/visibilityReturn brand visibility, responses, citations, citation share, top cited domains, and recent actions for one project. Defaults to the same organic visibility scope used in BeVisible.
visibility:overviewParameters
projectIdrequiredAuthorized project ID or domain.
rangeTime range for visibility analytics. Defaults to 7d.
fromOptional ISO start date.
toOptional ISO end date.
providerOptional AI platform filter: chatgpt, gemini, perplexity, ai-mode, or ai-overviews.
metricScopeorganic excludes branded alternative/comparison/review prompts; all includes every prompt.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/visibility?range=30d&provider=chatgpt' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"filters": {
"range": "30d",
"provider": null,
"metricScope": "organic"
},
"metrics": {
"visibility": 62.5,
"responses": 240,
"citations": 318,
"citationShare": 21.7
},
"sampledResponses": 240,
"includedPromptCount": 48,
"topDomains": [
{
"domain": "acme.com",
"citations": 69,
"examples": []
}
]
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}Resource
Crawlers
Inspect verified AI crawler traffic and request logs.
getCrawlerAnalytics
Get AI Crawler Analytics
/api/v1/projects/{projectId}/crawler-analyticsReturn AI crawler visits, categories, providers, top pages, missing pages, and recent activity for one project.
crawlers:readParameters
projectIdrequiredAuthorized project ID or domain.
rangeTime range for visibility analytics. Defaults to 7d.
fromOptional ISO start date.
toOptional ISO end date.
providerOptional crawler provider key from a previous overview.
categoryOptional AI crawler category filter.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/crawler-analytics?range=30d&provider=chatgpt' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"project": {
"id": "project_2x9m4q",
"name": "Acme",
"domain": "acme.com"
},
"filters": {
"range": "30d",
"provider": null,
"category": null
},
"metrics": {
"visits": 1248,
"providers": 8,
"pages": 96,
"missingPages": 3
},
"providers": [
{
"key": "openai",
"name": "OpenAI",
"visits": 412
}
],
"topPages": [
{
"path": "/pricing",
"visits": 118,
"missingVisits": 0
}
]
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}listCrawlerLogs
List AI Crawler Logs
/api/v1/projects/{projectId}/crawler-logsList recent AI crawler requests for one project, including bot, provider, category, requested path, HTTP status, and verification state.
crawlers:readParameters
projectIdrequiredAuthorized project ID or domain.
rangeTime range for visibility analytics. Defaults to 7d.
fromOptional ISO start date.
toOptional ISO end date.
providerOptional crawler provider key.
categoryOptional AI crawler category filter.
pathOptional exact request path, for example /pricing.
statusCodeOptional HTTP status code filter.
min 100, max 599
limitMaximum number of rows to return.
min 1, max 100
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/crawler-logs?range=30d&limit=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"filters": {
"range": "30d",
"provider": null,
"statusCode": null
},
"events": [
{
"id": "crawler_event_3d8k",
"provider": "openai",
"category": "answer_fetch",
"path": "/pricing",
"statusCode": 200,
"verificationStatus": "verified",
"timestamp": "2026-08-28T06:24:10.000Z"
}
],
"count": 1,
"hasMore": false
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}Resource
Prompts
Read tracked prompts and maintain their taxonomy.
listPromptTags
List prompt tags
/api/v1/projects/{projectId}/prompt-tagsList the complete prompt-tag catalog for one project with total and active prompt counts. Supports search and pagination.
visibility:promptsParameters
projectIdrequiredAuthorized project ID or domain.
searchOptional case-insensitive tag-name search.
limitMaximum number of rows to return.
min 1, max 100
cursorOpaque pagination cursor returned by the previous page.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/prompt-tags?limit=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"filters": {
"search": null
},
"tags": [
{
"name": "comparison",
"promptCount": 12,
"activePromptCount": 10
}
],
"count": 1,
"totalCount": 6,
"hasMore": false,
"nextCursor": null,
"totalPrompts": 48,
"activePrompts": 44,
"untaggedPrompts": 3,
"activeUntaggedPrompts": 2
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}renamePromptTag
Rename a prompt tag
/api/v1/projects/{projectId}/prompt-tags/{tag}Rename or delete a tag everywhere in one project. Renaming merges duplicates when the replacement already exists. Requires prompt-tag write access.
visibility:prompts:writeParameters
projectIdrequiredAuthorized project ID or domain.
tagrequiredExisting tag to manage.
newTagrequiredRequired replacement tag when operation is rename.
Request
curl --request PATCH \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/prompt-tags/commercial' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"newTag": "buyer-intent"
}'Response
{
"data": {
"operation": "rename",
"tag": "commercial",
"newTag": "buyer-intent",
"matched": 8,
"updated": 8,
"totalPrompts": 48
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}deletePromptTag
Delete a prompt tag
/api/v1/projects/{projectId}/prompt-tags/{tag}Rename or delete a tag everywhere in one project. Renaming merges duplicates when the replacement already exists. Requires prompt-tag write access.
visibility:prompts:writeParameters
projectIdrequiredAuthorized project ID or domain.
tagrequiredExisting tag to manage.
Request
curl --request DELETE \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/prompt-tags/commercial' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"operation": "delete",
"tag": "commercial",
"newTag": null,
"matched": 8,
"updated": 8,
"totalPrompts": 48
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}listPrompts
List prompts
/api/v1/projects/{projectId}/promptsList tracked prompts for one project with taxonomy, AI platform, public 1-5 Prompt Volume score, status, run count, and latest run timestamps.
visibility:promptsParameters
projectIdrequiredAuthorized project ID or domain.
limitMaximum number of rows to return.
min 1, max 100
providerOptional AI platform filter, for example ai-mode.
activeOnlySet false to include inactive prompts.
tagsOptional prompt tags to match.
tagMatchMatch any selected tag or require all. Defaults to any.
untaggedOnlyReturn only prompts without tags.
cursorOpaque pagination cursor returned by the previous page.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/prompts?limit=20&provider=chatgpt' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"filters": {
"provider": "chatgpt",
"activeOnly": true,
"tags": [],
"tagMatch": "any"
},
"prompts": [
{
"id": "prompt_6h4s9v",
"monitorId": "monitor_2j7q",
"prompt": "What are the best AI visibility tools for SaaS teams?",
"provider": "chatgpt",
"status": "active",
"type": "comparison",
"questionFrame": "comparison",
"brandScope": "category",
"intent": "commercial",
"tags": [
"comparison"
],
"isActive": true,
"volumeScore": 4,
"volumeStatus": "estimated",
"difficulty": 42,
"runCount": 10,
"lastRunAt": "2026-08-28T03:14:22.000Z",
"nextRunAt": "2026-08-29T03:14:22.000Z",
"createdAt": "2026-08-01T08:00:00.000Z",
"updatedAt": "2026-08-28T03:14:22.000Z"
}
],
"count": 1,
"totalCount": 48,
"hasMore": true,
"nextCursor": "bv-v1:eyJpZCI6Ii4uLiJ9"
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}updatePromptTags
Update tags on prompts
/api/v1/projects/{projectId}/prompts/tagsAdd, remove, or replace all tags on one or many tracked prompts. Supports up to 500 prompts per call and requires prompt-tag write access.
visibility:prompts:writeParameters
projectIdrequiredAuthorized project ID or domain.
promptIdsrequiredOne to 500 tracked prompt document ids.
operationrequiredHow to apply the supplied tags to every prompt.
tagsrequiredUp to 12 prompt tags.
Request
curl --request PATCH \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/prompts/tags' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"promptIds": [
"prompt_6h4s9v",
"prompt_3n8c2w"
],
"operation": "add",
"tags": [
"comparison",
"buyer-intent"
]
}'Response
{
"data": {
"operation": "add",
"requested": 2,
"updated": 2,
"unchanged": 0,
"prompts": [
{
"promptId": "prompt_6h4s9v",
"tags": [
"comparison",
"buyer-intent"
],
"changed": true
}
]
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}getPrompt
Get prompt
/api/v1/projects/{projectId}/prompts/{promptId}Return a tracked prompt from one project with recent responses, mentioned brands, citations, and prompt-level metrics.
visibility:promptsParameters
projectIdrequiredAuthorized project ID or domain.
promptIdrequiredTracked prompt document id.
rangeTime range for visibility analytics. Defaults to 7d.
providerOptional AI platform filter, for example ai-overviews.
limitMaximum number of rows to return.
min 1, max 100
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/prompts/prompt_6h4s9v?range=30d&limit=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"prompt": {
"id": "prompt_6h4s9v",
"prompt": "What are the best AI visibility tools for SaaS teams?",
"provider": "chatgpt",
"tags": [
"comparison"
]
},
"metrics": {
"responses": 10,
"visibility": 70,
"citations": 18
},
"responses": [
{
"id": "response_7f3m2k",
"ownBrandMentioned": true,
"visibilityScore": 82
}
]
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}Resource
Responses
Retrieve AI answers, mentions, sentiment, and evidence.
listResponses
List responses
/api/v1/projects/{projectId}/responsesList recent AI responses for one project with prompt text, brand mentions, citations, sentiment, and visibility scores.
visibility:responsesParameters
projectIdrequiredAuthorized project ID or domain.
rangeTime range for visibility analytics. Defaults to 7d.
fromOptional ISO start date.
toOptional ISO end date.
providerOptional AI platform filter, for example chatgpt.
promptIdOptional tracked prompt id filter.
limitMaximum number of rows to return.
min 1, max 100
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/responses?range=30d&limit=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"responses": [
{
"id": "response_7f3m2k",
"runId": "run_2m8j",
"promptId": "prompt_6h4s9v",
"prompt": "What are the best AI visibility tools for SaaS teams?",
"provider": "chatgpt",
"model": "gpt-5",
"answer": "Several platforms help SaaS teams track their presence...",
"ownBrandMentioned": true,
"ownBrandPosition": 2,
"visibilityScore": 82,
"sentimentScore": 0.74,
"mentionedBrands": [],
"citationCount": 1,
"citations": [
{
"id": "citation_5w2n",
"url": "https://acme.com/ai-visibility",
"domain": "acme.com",
"title": "AI visibility for SaaS teams",
"snippet": "Track how AI systems describe and cite your brand.",
"position": 1,
"sourceName": "Acme",
"createdAt": "2026-08-28T03:14:22.000Z"
}
],
"receivedAt": "2026-08-28T03:14:22.000Z",
"createdAt": "2026-08-28T03:14:20.000Z"
}
],
"count": 1
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}getResponse
Get response
/api/v1/projects/{projectId}/responses/{responseId}Return one AI response from one project with full citations, mentioned brands, prompt, and run status.
visibility:responsesParameters
projectIdrequiredAuthorized project ID or domain.
responseIdrequiredvisibility_responses document id.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/responses/response_7f3m2k' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"response": {
"id": "response_7f3m2k",
"provider": "chatgpt",
"prompt": "What are the best AI visibility tools for SaaS teams?",
"answer": "Several platforms help SaaS teams track their presence...",
"ownBrandMentioned": true,
"citations": [
{
"domain": "acme.com",
"url": "https://acme.com/ai-visibility"
}
]
},
"run": {
"id": "run_2m8j",
"provider": "chatgpt",
"status": "completed"
}
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}Resource
Citations
Inspect cited sources and discover citation gaps.
listCitations
List citations
/api/v1/projects/{projectId}/citationsList cited URLs and domains from one project's AI responses, filterable by domain, prompt, or response.
visibility:citationsParameters
projectIdrequiredAuthorized project ID or domain.
domainOptional cited domain filter.
promptIdOptional tracked prompt id filter.
responseIdOptional response id filter.
limitMaximum number of rows to return.
min 1, max 100
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/citations?limit=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"citations": [
{
"id": "citation_5w2n",
"domain": "acme.com",
"url": "https://acme.com/ai-visibility",
"title": "AI visibility for SaaS teams",
"snippet": "Track how AI systems describe and cite your brand.",
"position": 1,
"sourceName": "Acme",
"createdAt": "2026-08-28T03:14:22.000Z"
}
],
"count": 1
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}getCitationGaps
Get citation gaps
/api/v1/projects/{projectId}/citation-gapsFind recent responses for one project where the brand is missing, competitors are mentioned, or the brand appears without the owned domain being cited.
visibility:citationsParameters
projectIdrequiredAuthorized project ID or domain.
rangeTime range for visibility analytics. Defaults to 7d.
providerOptional AI platform filter, for example perplexity.
limitMaximum number of rows to return.
min 1, max 100
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/citation-gaps?range=30d&limit=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"project": {
"id": "project_2x9m4q",
"name": "Acme",
"domain": "acme.com"
},
"gaps": [
{
"type": "own_domain_missing",
"responseId": "response_7f3m2k",
"promptId": "prompt_6h4s9v",
"reason": "Acme was mentioned, but acme.com was not cited.",
"citedDomains": [
"example.com"
]
}
],
"count": 1
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}Resource
Brands
Read the owned brand and tracked competitors.
listBrands
List brands
/api/v1/projects/{projectId}/brandsList the owned brand and competitors BeVisible tracks for one project.
visibility:brandsParameters
projectIdrequiredAuthorized project ID or domain.
relationOptional relation filter such as own or direct_competitor.
includeIgnoredInclude ignored brands.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/brands' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"brands": [
{
"id": "brand_1k9v",
"name": "Acme",
"domain": "acme.com",
"aliases": [
"Acme AI"
],
"relation": "own",
"tags": [],
"logoUrl": "https://acme.com/icon.png",
"isActive": true,
"isIgnored": false,
"createdAt": "2026-08-01T08:00:00.000Z",
"updatedAt": "2026-08-28T03:14:22.000Z"
},
{
"id": "brand_8c4q",
"name": "Example",
"domain": "example.com",
"aliases": [],
"relation": "direct_competitor",
"tags": [
"enterprise"
],
"logoUrl": null,
"isActive": true,
"isIgnored": false,
"createdAt": "2026-08-02T08:00:00.000Z",
"updatedAt": "2026-08-27T03:14:22.000Z"
}
],
"count": 2
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}Resource
Actions
Turn visibility evidence into prioritized work.
listActions
List actions
/api/v1/projects/{projectId}/actionsList BeVisible actions generated from one project's visibility evidence.
visibility:actionsParameters
projectIdrequiredAuthorized project ID or domain.
statusOptional action status filter.
priorityOptional priority filter.
typeOptional action type filter.
limitMaximum number of rows to return.
min 1, max 100
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/actions?limit=20&status=open' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"actions": [
{
"id": "action_4p9v6j",
"title": "Earn citations for the AI visibility guide",
"type": "content_update",
"priority": "high",
"status": "open",
"description": "Add first-party evidence and earn relevant citations.",
"targetUrl": "https://acme.com/ai-visibility",
"articleId": "article_8k2d1p",
"evidenceResponseIds": [
"response_7f3m2k"
],
"evidenceCitationIds": [
"citation_5w2n"
],
"targetPromptIds": [
"prompt_6h4s9v"
],
"createdAt": "2026-08-28T03:30:00.000Z",
"updatedAt": "2026-08-28T03:30:00.000Z"
}
],
"count": 1
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}getActionBrief
Get action brief
/api/v1/projects/{projectId}/actions/{actionId}/briefCreate an agent-ready brief for one project's visibility action, including project context, objective, and source evidence.
visibility:actionsParameters
projectIdrequiredAuthorized project ID or domain.
actionIdrequiredVisibility action document id.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/actions/action_4p9v6j/brief' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"project": {
"id": "project_2x9m4q",
"name": "Acme",
"domain": "acme.com"
},
"objective": "Earn citations for the AI visibility guide",
"instructions": [
"Use the included prompts, responses, and citation evidence as the source of truth.",
"Do not claim live publishing access through the API."
],
"action": {
"id": "action_4p9v6j",
"priority": "high",
"status": "open"
}
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}getAction
Get action
/api/v1/projects/{projectId}/actions/{actionId}Return one visibility action from one project with evidence prompts, responses, citations, and linked article status.
visibility:actionsParameters
projectIdrequiredAuthorized project ID or domain.
actionIdrequiredVisibility action document id.
Request
curl --request GET \
--url 'https://bevisible.app/api/v1/projects/project_2x9m4q/actions/action_4p9v6j' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $BEVISIBLE_API_KEY'Response
{
"data": {
"action": {
"id": "action_4p9v6j",
"title": "Earn citations for the AI visibility guide",
"type": "content_update",
"priority": "high",
"status": "open",
"description": "Add first-party evidence and earn relevant citations.",
"targetUrl": "https://acme.com/ai-visibility",
"articleId": "article_8k2d1p",
"targetPromptIds": [
"prompt_6h4s9v"
],
"evidenceResponseIds": [
"response_7f3m2k"
],
"evidenceCitationIds": [
"citation_5w2n"
],
"createdAt": "2026-08-28T03:30:00.000Z",
"updatedAt": "2026-08-28T03:30:00.000Z",
"article": {
"id": "article_8k2d1p",
"title": "How to evaluate AI visibility platforms",
"slug": "evaluate-ai-visibility-platforms",
"status": "published",
"scheduledAt": null,
"publishedAt": "2026-08-21T09:30:00.000Z"
},
"prompts": [],
"responses": [],
"citations": []
}
},
"meta": {
"requestId": "req_01J6F2Q8M7S4V3K9W1X5Y0Z2A6"
}
}