The Developer API gives you the same data and actions you use in the app: run reports, read Visibility scores, fetch citations, generate and publish articles, manage shares and more. Use it to build your own dashboards, automate work or connect Rank Prompt to the tools you already use.
Every plan includes API access, Free included. Each account has one monthly request allowance set by its plan, shared by every key made in it. Endpoints that spend credits in the app (running a report, generating an article) spend the same credits over the API. For a bigger allowance there are standalone API plans.
Open Settings, then API under Developers
On the API keys tab, click Create key
Give it a name (for example "Production server") and pick its scopes. You can also restrict it to one brand and give it an expiry date
Copy the key. It is shown only once
curl https://api.rankprompt.com/v1/brands \
-H "Authorization: Bearer rp_live_xxx"The full reference is at rankprompt.com/docs/v1/.
Every request carries the key as a Bearer token:
Authorization: Bearer rp_live_xxxThere are no cookies or sessions: every request must include the key.
Keep the key in an environment variable, never in source code
Use separate keys for development, staging and production
Rotate secret gives a key a new secret; Revoke turns it off for good. Both are on the API keys tab
Every key has a burst limit of 120 requests a minute. Past it, the API answers 429 Too Many Requests; wait and retry.
The monthly allowance belongs to the account, not to the key: your keys and the keys your team members made in your account share one pool. Rotating a key never resets it.
Access | Requests a month | Credits |
|---|---|---|
Free | 1,000 | 10 welcome credits for most new accounts, then top-ups |
Starter | 10,000 | Your plan credits |
Pro | 25,000 | Your plan credits |
Agency | 50,000 | Your plan credits |
Agency Plus | 100,000 | Your plan credits |
API Starter (standalone, $99 a month) | 50,000 | 500 a month, added to your plan's |
API Pro (standalone, $299 a month) | 200,000 | 2,000 a month, added to your plan's |
Over the monthly allowance, requests get 429 until the period resets or the pool grows.
On Free there are no monthly credits. Most new accounts get 10 welcome credits once, when they confirm their email, though not every signup qualifies; after that you top up before you run anything that costs credits. Audits, content (generating, handing over and publishing articles), publishing connections and webhooks need Starter or a standalone API plan. All six AI platforms run on every plan, Free included, and brand facts can be filled in by hand on any plan, which is enough to run a report.
Choose one on Plans > API plan. They are billed alongside your app plan. Upgrades apply at once (prorated); downgrades take effect at the end of the billing period. The included credits work like any other credits: reports, articles, audits and the rest.
A key a team member makes while working in your account acts in your account: it draws on your pool and your credits. When the pool runs out, their calls get 429 with a message that the account owner raises it. Only you can: in a team account the API plan tab names the owner of the pool instead of offering plans. A key a member makes in their own account uses their own pool.
Resource | What you can do |
|---|---|
Brands | List and read your brands |
Reports | Run reports and read their results |
Citations | Fetch the citations behind your brands' answers |
Shares | Create and manage share links |
Jobs | Check long-running jobs |
Exports | Export a brand's whole citation and answer history to files |
Scheduled Reports | List and manage Scheduled Reports, and copy one into another brand you edit |
Places and markets | The brand's real places (add, import from Business Profile or a CSV, archive) and each report's markets (add cities or places, pause, archive) |
Content | Generate articles, hand over ones you wrote, and run the client review loop |
CMS connections | Connect WordPress sites, list every connected destination (WordPress, Ghost, Shopify, Webflow, Wix, a webhook) and publish articles to them |
When you need every citation or every answer of a brand, ask for an export instead of paging through the lists. POST /v1/brands/{brand_id}/exports starts it and answers right away with its id; GET /v1/brands/{brand_id}/exports/{export_id} tells you its progress and, once it is done, gives a download link per file: gzipped NDJSON, one line per citation or per answer. Links work for 15 minutes (read the export again for fresh ones) and the files are kept for 24 hours. One export per brand runs at a time: asking again while it runs returns it. Exports are free on every plan; the citations file needs the read:citations scope. The MCP server has the same export, and in the app the Sources Citations and Domains tables have Export history.
The whole content flow runs over the API:
POST /v1/brands/{brand_id}/cms-connections: connect the WordPress site once (site URL, username and a WordPress application password). The credentials are checked against the live site before anything is stored, and stored encrypted.
POST /v1/brands/{brand_id}/content-briefs/generations: queue an article. It returns a job_id at once; poll GET /v1/jobs/{job_id} until it completes. POST /v1/brands/{brand_id}/content-briefs/manual hands over an article you wrote yourself, for free.
PUT /v1/brands/{brand_id}/content-briefs/{brief_id}/review/share (optional): a link your client opens without an account to comment and approve.
POST /v1/brands/{brand_id}/content-briefs/{brief_id}/publish with target_type: cms_connection. Publishing the same article to the same site again updates the post instead of making a copy.
POST /v1/brands/{brand_id}/cms-connections/{connection_id}/checks checks stored credentials without publishing, useful before a batch.
Instead of polling, get a signed HTTPS callback, or a Slack or Discord message, the moment something happens. On the API page, open Webhooks, keep Brand under Webhooks for, pick the brand and click New webhook:
Send as: Signed JSON posts the event itself, for your own server or Zapier, Make or n8n. Slack takes a Slack app's incoming webhook URL (https://hooks.slack.com/services/...) and Discord a channel's webhook URL (https://discord.com/api/webhooks/...); each event then arrives as a readable message with a link to open it
Events:
Event | When it fires |
|---|---|
| A report finished running, once per market of each run (with the report's |
| A report run errored out in a market |
| A scheduled run finished |
| A scheduled run errored out |
| An article went live on one of the brand's publishing destinations |
| A live article was sent again, with its changes |
| An article was taken down from a destination |
Send a custom header (Signed JSON only): a header name and value sent with every delivery, for catch hooks that check one. The signature header is sent too. The value is stored encrypted and not shown again
The whole article, so the receiver can publish it without calling back: brief_id, version (changes whenever the content does), title, slug, locale, html, markdown, meta (description, seo_title, focus_keyword), tags, featured_image and images (each with url and alt), json_ld (the article's structured data), brand (id, name, website), canonical_url (where it first went live, when that is elsewhere), published_url and published_at, post_id (the destination's id for the post) and destination (type, id, provider, url).
Send test sends a sample of one of the endpoint's events right away, signed like a real delivery and marked "test": true, with an event id that starts with evt_test_. You see the answer on the spot: the HTTP status and how long it took, or why nothing answered. Article samples carry the brand's newest article, so a no-code tool can map real fields. Tests show in the delivery log as tests and never count toward the failures that turn an endpoint off. Up to 10 tests a minute.
Every request carries X-RP-Signature: t=<timestamp>,v1=<hmac>: an HMAC-SHA256 of <timestamp>.<body> with the endpoint's signing secret. After Rotate secret the old secret keeps verifying for 24 hours as v0, so nothing drops while you deploy. X-RP-Event, X-RP-Event-Id and X-RP-Delivery-Id say what arrived.
A failed delivery is retried after 30 seconds, 2 minutes, 10 minutes, 1 hour, 6 hours and 24 hours. An endpoint that keeps failing is turned off and you get a notification; Enable turns it back on. Expand an endpoint for its delivery log (status, attempt, response, time), newest first, with Replay on any row. A replay keeps the event id and the body of the first delivery, with a new X-RP-Delivery-Id, so a receiver that removes duplicates by event id treats it as the same event.
Up to 5 active endpoints per brand. Creating or changing a brand webhook takes Starter or a standalone API plan; reading and deleting never do. On Agency Plus the same tab has an Account option for your lead widget's events: see Leads and webhooks.
In Integrations > Publish content, More platforms also connects a webhook as a publishing destination, next to Ghost, Shopify, Webflow and Wix. See Publish to any tool with a webhook.
Claude Code, Cursor and any other MCP client can connect to your account through the hosted Rank Prompt MCP server, to read your reports and run new ones for you. MCP under Developers in Settings has the one-line install command, the config for other clients and example prompts. Clients sign in with OAuth, which creates one scoped MCP key on your account; revoke it anytime on the API page. Its calls count against your request allowance and credits, and Free accounts can connect too. See Connect Claude Code.
The API keys tab lists every key with its name, brand scope, scopes, when it was created, when it expires, when it was last used and its status. Each key inherits your account's brand permissions and can be narrowed with scopes and a single brand.
If you have team members, the same tab lists the keys they made to act in your account: the member, the prefix, the request units it drew from your pool this month (free calls such as GET /v1/me spend none), when it was last used and its state. A key whose member no longer holds a seat stops working, and a member who left is marked as a former member. Revoke any of them with a reason, without removing the member: the key stops working at once and the member sees your reason. Keys also end on their own when a member leaves.
The Overview tab shows the requests every key in the account used this period, what is left, the rate limit and recent activity. Over the API, GET /v1/me/usage returns the same numbers for a date range; add account_id to count only the calls made in one account.
No. Every plan includes API access, Free included, with a monthly allowance set by the plan. For a bigger allowance and monthly credits, add a standalone API plan.
Yes. Connect the MCP server or install the Rank Prompt skill: see Connect Claude Code.
Only if you want. A key reaches every brand your account can reach, and scopes limit what it can do. When you create it you can restrict it to a single brand, for example to hand it to one client.
Requests over your monthly allowance get 429 until the period resets. Upgrade your plan or add an API plan to get more. In a team account the pool is the owner's, so the owner raises it.
The refund policy is the same as for every plan: see Plans and subscription.
API reference: every endpoint, schema and example
Connect Claude Code: use Rank Prompt from Claude Code
Credit usage: where your credits go
Email [email protected] and I'll help.