GET /usage
Get usage Read
Your plan’s limits and what this billing period has used: clients, prompts, pitches and audit pages.
curl https://api.useverte.com/v1/usage \
-H "Authorization: Bearer $VERTE_API_KEY"
How AI answer engines (ChatGPT, Gemini, Google AI Overviews and AI Mode) mention your clients. Send an API key from Settings → API and MCP as Authorization: Bearer vrt_live_…. Keys can read, or read and write. Each key gets 60 reads and 10 writes a minute. Lists take cursor and limit (1–100); dates are YYYY-MM-DD in UTC.
https://api.useverte.com/v1Authorization: Bearer vrt_live_… with a key from Settings → API and MCP. Read keys can call the read endpoints; read and write keys can call all of them.Retry-After header in seconds.{"error": {"code": "…", "message": "…"}}. Messages are safe to show people.{"data": […], "next_cursor": "…"}. Pass cursor to get the next page and limit (1–100, default 50).from and to and default to the last 30 days.Your plan and this period’s usage.
Get usage Read
Your plan’s limits and what this billing period has used: clients, prompts, pitches and audit pages.
curl https://api.useverte.com/v1/usage \
-H "Authorization: Bearer $VERTE_API_KEY"
The client brands you track.
List clients Read
The client brands your agency tracks, with their ids. Use a client id with the other client endpoints.
| Name | Type | Description |
|---|---|---|
include_archived | boolean | string | Include archived clients (default false). |
cursor | string | From the previous page’s next_cursor. |
limit | integer | Items per page, 1–100 (default 50). |
curl https://api.useverte.com/v1/clients \
-H "Authorization: Bearer $VERTE_API_KEY"
Create a client Read + write
Adds a client brand to track. Counts against your plan’s clients. Add prompts to it next.
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
name required | string | The brand’s name, as AI answers would write it. |
domain required | string | The brand’s website, e.g. example.com. |
brand_aliases | string[] | Other names for the brand (up to 20). |
location_code | integer | Default 2840 (United States). |
language_code | string | Default en. |
curl -X POST https://api.useverte.com/v1/clients \
-H "Authorization: Bearer $VERTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"…","domain":"…"}'
Visibility, share of voice and sentiment over a date range.
Get visibility Read
How often AI answers mention the client: visibility % with "X of Y checks", over a date range, with a point per day or week. Filter by engine.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
engine | all | chatgpt | gemini | google_aio | google_ai_mode | all (default), chatgpt, gemini, google_aio or google_ai_mode. |
from | string | First day, YYYY-MM-DD (default: 29 days before to). |
to | string | Last day, YYYY-MM-DD (default: today, UTC). |
group_by | string | day or week (default day up to 90 days, else week). |
curl https://api.useverte.com/v1/clients/{client_id}/visibility \
-H "Authorization: Bearer $VERTE_API_KEY"
Get share of voice Read
The brand’s share of mentions against its tracked competitors over a date range: brand mentions ÷ (brand + competitor mentions).
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
engine | all | chatgpt | gemini | google_aio | google_ai_mode | all (default), chatgpt, gemini, google_aio or google_ai_mode. |
from | string | First day, YYYY-MM-DD (default: 29 days before to). |
to | string | Last day, YYYY-MM-DD (default: today, UTC). |
curl https://api.useverte.com/v1/clients/{client_id}/share-of-voice \
-H "Authorization: Bearer $VERTE_API_KEY"
Get sentiment Read
Positive, neutral and negative mentions of the brand over a date range.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
engine | all | chatgpt | gemini | google_aio | google_ai_mode | all (default), chatgpt, gemini, google_aio or google_ai_mode. |
from | string | First day, YYYY-MM-DD (default: 29 days before to). |
to | string | Last day, YYYY-MM-DD (default: today, UTC). |
curl https://api.useverte.com/v1/clients/{client_id}/sentiment \
-H "Authorization: Bearer $VERTE_API_KEY"
The questions checked daily, and what AI answered.
List prompts Read
The questions tracked for a client, oldest first, with how often each mentioned the brand in its last 7 daily checks, per engine.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
include_inactive | boolean | string | Include deactivated prompts (default false). |
cursor | string | From the previous page’s next_cursor. |
limit | integer | Items per page, 1–100 (default 50). |
curl https://api.useverte.com/v1/clients/{client_id}/prompts \
-H "Authorization: Bearer $VERTE_API_KEY"
Add prompts Read + write
Adds questions to check daily for a client (up to 500 at a time). Each uses one place in your plan’s prompt pool; wording the client already tracks is skipped. Or give generate to have Verte write up to 20: one AI call, needing an active subscription (402) and sharing the org’s 10 AI setup steps a minute (429). A direct call checks first that that many fit in the pool, and a new subcategory named among the client’s 25 (402 before the AI call).
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
prompts | string[] | The questions, as a buyer would ask them. Give these or generate. |
generate | object | Or have Verte write them, for the subcategory given (none of them one the client tracks). |
subcategory_id | string | One of the client’s subcategories for all of them (see list_subcategories). |
subcategory | string | Or a subcategory by name, e.g. Pricing: created when the client has none by that name (up to 25 a client). |
curl -X POST https://api.useverte.com/v1/clients/{client_id}/prompts \
-H "Authorization: Bearer $VERTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Edit a prompt Read + write
Changes a prompt’s wording, moves it to another of its client’s subcategories (null: “Other prompts”), or deactivates or reactivates it (within the pool). New wording for a Super prompt writes its other wordings again: it needs an active subscription and a plan with Super prompts (402), and takes one of the org’s 50 Super prompt wordings a minute (429).
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
prompt_id required | string | The prompt's id. |
| Name | Type | Description |
|---|---|---|
text | string | New wording (up to 500 characters). |
subcategory_id | string,null | A subcategory of the same client. |
is_active | boolean |
curl -X PATCH https://api.useverte.com/v1/prompts/{prompt_id} \
-H "Authorization: Bearer $VERTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Deactivate a prompt Read + write
Stops checking a prompt and frees its place in the pool. Its history is kept.
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
prompt_id required | string | The prompt's id. |
curl -X DELETE https://api.useverte.com/v1/prompts/{prompt_id} \
-H "Authorization: Bearer $VERTE_API_KEY"
Deactivate prompts Read + write
Stops checking up to 50 prompts at once, freeing their places in the pool (a Super prompt frees 5). Their history is kept; ones already stopped are left as they are. If any id isn't one of your prompts, nothing changes (404).
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
prompt_ids required | string[] | Prompt ids from list_prompts, 1–50. |
curl -X POST https://api.useverte.com/v1/prompts/deactivate \
-H "Authorization: Bearer $VERTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt_ids":["…"]}'
Reactivate prompts Read + write
Starts checking up to 50 stopped prompts again, all or none: each needs a place in the pool, a Super prompt 5 and a plan with Super prompts (402), and comes back with its latest wordings. Ones already checked are left as they are; an archived client's prompts are refused (409). If any id isn't one of your prompts, nothing changes (404).
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
prompt_ids required | string[] | Prompt ids from list_prompts, 1–50. |
curl -X POST https://api.useverte.com/v1/prompts/reactivate \
-H "Authorization: Bearer $VERTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt_ids":["…"]}'
Get prompt answers Read
What the AI engines answered to one prompt, newest first: whether and where the brand was mentioned, sentiment, competitors, other brands named, the answer text (kept 90 days) and the cited sources.
| Name | Type | Description |
|---|---|---|
prompt_id required | string | The prompt's id. |
| Name | Type | Description |
|---|---|---|
engine | all | chatgpt | gemini | google_aio | google_ai_mode | all (default), chatgpt, gemini, google_aio or google_ai_mode. |
from | string | First day, YYYY-MM-DD (default: 29 days before to). |
to | string | Last day, YYYY-MM-DD (default: today, UTC). |
cursor | string | From the previous page’s next_cursor. |
limit | integer | Items per page, 1–100 (default 50). |
answer_chars | integer | Cut each answer text to this many characters (default: whole answers). |
curl https://api.useverte.com/v1/prompts/{prompt_id}/answers \
-H "Authorization: Bearer $VERTE_API_KEY"
Each client’s ordered groups of prompts, such as “Pricing and value”.
List subcategories Read
A client’s subcategories (groups of prompts such as “Pricing and value”), in order, with how many prompts each holds. Prompts in none are “Other prompts”.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
cursor | string | From the previous page’s next_cursor. |
limit | integer | Items per page, 1–100 (default 50). |
curl https://api.useverte.com/v1/clients/{client_id}/subcategories \
-H "Authorization: Bearer $VERTE_API_KEY"
Add a subcategory Read + write
Adds a subcategory at the end of a client’s list (up to 25 a client), with the prompts given, or with generate_prompts written by Verte: one AI call, needing an active subscription (402) and sharing the org’s 10 AI setup steps a minute (429). Its prompts use places in the prompt pool, all or none (402); a direct call checks the 25 and the pool before the AI call.
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
name required | string | 1 to 60 characters, unique per client (ignoring case). |
description | string,null | Up to 200 characters. |
generate_prompts | integer | Prompts for Verte to write for it, 0–20 (default 0). |
prompts | string[] | Or its prompts, up to 20, as a buyer would ask them. |
curl -X POST https://api.useverte.com/v1/clients/{client_id}/subcategories \
-H "Authorization: Bearer $VERTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"…"}'
Rename a subcategory Read + write
Renames or redescribes a subcategory; its prompts and their history stay with it.
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
subcategory_id required | string | The subcategory's id. |
| Name | Type | Description |
|---|---|---|
name | string | 1 to 60 characters, unique per client (ignoring case). |
description | string,null | Up to 200 characters. |
curl -X PATCH https://api.useverte.com/v1/subcategories/{subcategory_id} \
-H "Authorization: Bearer $VERTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Delete a subcategory Read + write
Removes a subcategory. Its prompts stop being checked (freeing places in the pool) and move to “Other prompts”, keeping their history.
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
subcategory_id required | string | The subcategory's id. |
curl -X DELETE https://api.useverte.com/v1/subcategories/{subcategory_id} \
-H "Authorization: Bearer $VERTE_API_KEY"
Prompts tracked in 5 wordings, rotated through the day (Pro and up; 5 prompt slots each), and what the wording and the time of day changed.
List Super prompts with their findings Read
A client’s Super prompts (each tracked in 5 wordings, rotated through the day) with what the wording and the time of day changed: each wording’s checks, visibility and position per engine; the spread between the best and worst wording (clear when significant with ≥ 20 checks each); visibility in five bands of the local day; the day of week from 28 days. Clearest differences first.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
days | 7 | 30 | 90 | The last 7, 30 (default) or 90 days. |
sort | clearest | spread | visibility | checks | |
cursor | string | From the previous page’s next_cursor. |
limit | integer | Items per page, 1–100 (default 50). |
curl https://api.useverte.com/v1/clients/{client_id}/super-prompts \
-H "Authorization: Bearer $VERTE_API_KEY"
Make a prompt a Super prompt Read + write
Tracks a prompt in 5 wordings, rotated through the day (Pro and up). It uses 5 prompt slots instead of 1, so it needs 4 free: a shortage is refused with how many to free (deactivate prompts first). It needs an active subscription (402) and takes one of the org’s 50 Super prompt wordings a minute (429).
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
prompt_id required | string | The prompt's id. |
curl -X POST https://api.useverte.com/v1/prompts/{prompt_id}/super \
-H "Authorization: Bearer $VERTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Make a Super prompt normal Read + write
It goes back to one wording and 1 prompt slot (4 freed); the other wordings’ history is kept.
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
prompt_id required | string | The prompt's id. |
curl -X DELETE https://api.useverte.com/v1/prompts/{prompt_id}/super \
-H "Authorization: Bearer $VERTE_API_KEY"
The competitors tracked for each client.
List competitors Read
The competitors tracked for a client, by name.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
cursor | string | From the previous page’s next_cursor. |
limit | integer | Items per page, 1–100 (default 50). |
curl https://api.useverte.com/v1/clients/{client_id}/competitors \
-H "Authorization: Bearer $VERTE_API_KEY"
Add a competitor Read + write
Tracks a competitor for a client (up to 25 per client; 402 past them).
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
name required | string | The competitor’s name, as AI answers would write it. |
domain | string | Its website, e.g. rival.com. |
aliases | string[] | Other names for it (up to 20). |
curl -X POST https://api.useverte.com/v1/clients/{client_id}/competitors \
-H "Authorization: Bearer $VERTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"…"}'
Delete a competitor Read + write
Stops tracking a competitor and deletes its mention history.
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
competitor_id required | string | The competitor's id. |
curl -X DELETE https://api.useverte.com/v1/clients/{client_id}/competitors/{competitor_id} \
-H "Authorization: Bearer $VERTE_API_KEY"
The sites AI answers cite, and citation gaps.
Get citations Read
The sites AI answers cited for a client over a date range, most cited first, with who owns each one. gap=true keeps the citation gaps: third-party sites cited for competitors but not for the brand.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
engine | all | chatgpt | gemini | google_aio | google_ai_mode | all (default), chatgpt, gemini, google_aio or google_ai_mode. |
from | string | First day, YYYY-MM-DD (default: 29 days before to). |
to | string | Last day, YYYY-MM-DD (default: today, UTC). |
gap | boolean | string | Only citation gaps (default false). |
cursor | string | From the previous page’s next_cursor. |
limit | integer | Items per page, 1–100 (default 50). |
curl https://api.useverte.com/v1/clients/{client_id}/citations \
-H "Authorization: Bearer $VERTE_API_KEY"
AI-readiness audits of client websites (uses audit pages).
List audits Read
A client’s audits, newest first.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
cursor | string | From the previous page’s next_cursor. |
limit | integer | Items per page, 1–100 (default 50). |
curl https://api.useverte.com/v1/clients/{client_id}/audits \
-H "Authorization: Bearer $VERTE_API_KEY"
Start an audit Read + write
Starts an AI-readiness audit of the client’s website: robots.txt for AI crawlers, llms.txt, and per-page checks. Each page checked uses one audit page of your monthly quota; unchanged pages are free.
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
max_pages | integer | 1–500 pages (default 50), within your quota. |
curl -X POST https://api.useverte.com/v1/clients/{client_id}/audits \
-H "Authorization: Bearer $VERTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Get an audit Read
An audit’s status, score, site findings (AI crawlers, llms.txt), issues with fix hints, and pages. Pass audit_id, or client_id for the client’s latest audit.
| Name | Type | Description |
|---|---|---|
audit_id required | string | The audit’s id. |
| Name | Type | Description |
|---|---|---|
client_id | string | A client id: its latest audit. |
curl https://api.useverte.com/v1/audits/{audit_id} \
-H "Authorization: Bearer $VERTE_API_KEY"
White-labelled share links and PDFs.
Create a report Read + write
A white-labelled client report: a share link to its live report over a trailing period (kind link, the default), or a PDF rendered in the background (kind pdf; read its status with GET /report-exports/{id}).
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
client_id required | string | The client's id. |
| Name | Type | Description |
|---|---|---|
kind | link | pdf | link (default) or pdf. |
period | 7d | 30d | 90d | 12m | 7d, 30d (default), 90d or 12m. |
expires_in_days | number | link: stop working after 7, 30 or 90 days (default: never). |
curl -X POST https://api.useverte.com/v1/clients/{client_id}/reports \
-H "Authorization: Bearer $VERTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Get a PDF report Read
A PDF report’s status, and its download URL once it is ready.
| Name | Type | Description |
|---|---|---|
export_id required | string | The report export's id. |
curl https://api.useverte.com/v1/report-exports/{export_id} \
-H "Authorization: Bearer $VERTE_API_KEY"
Download a PDF report Read
The finished PDF, once GET /report-exports/{export_id} says it is ready.
| Name | Type | Description |
|---|---|---|
export_id required | string |
curl https://api.useverte.com/v1/report-exports/{export_id}/pdf \
-H "Authorization: Bearer $VERTE_API_KEY"
Show a prospect their AI visibility before they sign (uses pitch prompts).
List pitch projects Read
Your pitch projects, newest first, with the prospect’s visibility so far.
| Name | Type | Description |
|---|---|---|
cursor | string | From the previous page’s next_cursor. |
limit | integer | Items per page, 1–100 (default 50). |
curl https://api.useverte.com/v1/pitch-projects \
-H "Authorization: Bearer $VERTE_API_KEY"
Create a pitch project Read + write
Shows a prospect their AI visibility before they sign. Give the prospect's name and website (and, if you like, up to 5 competitors and 2–4 subcategories); Verte researches it and writes 25 prompts a person would ask (they stay hidden), then checks each on every engine in your plan, twice, an hour apart. Uses one pitch of your monthly allowance now; if the pitch can't be prepared it's refunded. Answers 202 with the pitch preparing: read it with GET /pitch-projects/{id}. The project and its share link expire after 30 days.
Needs an API key with write access.
| Name | Type | Description |
|---|---|---|
prospect_name required | string | The prospect’s brand name. |
domain required | string | The prospect’s website, like prospect.com. |
location_code | integer | DataForSEO location (default 2840, US). |
language_code | string | Language (default en). |
competitors | object[] | Up to 5 competitors; research finds them otherwise. |
subcategories | string[] | 2–4 subcategories for the prompts; proposed by research otherwise. |
curl -X POST https://api.useverte.com/v1/pitch-projects \
-H "Authorization: Bearer $VERTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prospect_name":"…","domain":"…"}'
Get a pitch project Read
A pitch project’s report: how often answers mention the prospect and each competitor, per engine and per subcategory, the biggest gaps (with at most 4 example prompts; the 25 prompts stay hidden), site readiness, what to do, and the share link.
| Name | Type | Description |
|---|---|---|
project_id required | string | The pitch project's id. |
curl https://api.useverte.com/v1/pitch-projects/{project_id} \
-H "Authorization: Bearer $VERTE_API_KEY"
Changes proposed through MCP or the Verte Engine, which wait for a confirmation. REST writes are direct, so here you only read them.
Get a proposal Read
A change proposed through MCP or the Verte Engine: what it does, whether it is waiting, applied, cancelled, expired or failed, who proposed and decided it, and its result once applied.
| Name | Type | Description |
|---|---|---|
proposal_id required | string | The proposal's id. |
curl https://api.useverte.com/v1/proposals/{proposal_id} \
-H "Authorization: Bearer $VERTE_API_KEY"