RankMySEO · Server API
Call the API from your server.
Read and manage your RankMySEO data with REST requests and JSON responses. Start with a server key and your first request.
Quick start · https://api.rankmyseo.com/http/v1
First request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects"Authentication
Sign in, open Developer, then API keys, and create a server key. The full key is shown once. You can keep five server keys. Revoke one on that page when you are done with it.
Send it on every call as Authorization: Bearer. Do not send an Origin header or a Cookie. An assistant key is rejected and does not open this API.
Header
Authorization: Bearer rms_customer_api_…
# No Origin
# No CookieErrors
Select a response to see the matching request, status, and JSON body.
- 200 The path is on the list and the allowance still has room.
- 401 The key is missing, revoked, or not a server key.
- 403 The request came from a browser, or today's allowance is used up on a write.
- 404 The path is not on the list. Five of these revoke the key and email you and support@rankmyseo.com.
- 429 More than 30 requests in a minute. Wait for the window. The key stays.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects"Response
{
"projects": [{ "name": "Example", "domain": "example.com" }],
"allowance": { "used": 1, "limit": 20, "exhausted": false }
}The key is valid, the path is on the list, and today's allowance still has room.
Allowance
Every server key on the account shares one count per UTC day. A call that returns saved data still counts. Assistant calls do not. The count opens again at the next UTC midnight.
- Free20 / day
- Starter100 / day
- Growth400 / day
- Agency800 / day
- Scale1,200 / day
After the limit, a read still returns the saved body with allowance.exhausted set, and it does not start a collect. A write is refused. What each plan includes besides these calls is on Pricing.
On every JSON body
"allowance": {
"used": 20,
"limit": 20,
"remaining": 0,
"resetsAt": "2026-10-06T00:00:00.000Z",
"exhausted": true
}Sites
5 endpointsGETList sites/projects
Parameters
No parametersThis request has no query or body fields.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects"Response
{
"projects": [
{ "id": "site_id", "name": "Example", "domain": "example.com" }
],
"allowance": { "used": 1, "limit": 20, "remaining": 19, "exhausted": false }
}POSTCreate a site/projects
Parameters
3 fieldsnamestringrequired
The label you will see in the dashboard.
domainstringrequired
The website, like example.com.
tagsstring[]
Optional. Tags start on Starter.
Request
curl -X POST \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example","domain":"example.com"}' \
"https://api.rankmyseo.com/http/v1/projects"Response
{
"project": { "id": "site_id", "name": "Example", "domain": "example.com" },
"allowance": { "used": 2, "limit": 20, "exhausted": false }
}GETRetrieve a site/projects/:id
Parameters
1 fieldsidstringrequired
Site id from the list.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id"Response
{ "project": { "id": "site_id", "name": "Example", "domain": "example.com" } }PATCHUpdate a site/projects/:id
Parameters
9 fieldsidstringrequired
Site id.
namestring
Label.
domainstring
Website.
tagsstring[]
Starter and above.
descriptionstring
A short note. Send null to clear it.
countrystring
Two-letter country, such as us.
languagestring
Language, such as en.
autoAddPreferencestring
The Auto-add note for this site.
checksPausedboolean
true pauses scheduled checks for this site.
Request
curl -X PATCH \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"checksPaused":true}' \
"https://api.rankmyseo.com/http/v1/projects/:id"Response
{ "project": { "id": "site_id", "checksPausedAt": "2026-10-05T00:00:00.000Z" } }DELETEDelete a site/projects/:id
Parameters
1 fieldsidstringrequired
Site id.
Request
curl -X DELETE \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id"Response
{ "ok": true }Keywords
6 endpointsGETList keywords/projects/:id/keywords
Parameters
1 fieldsidstringrequired
Site id.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/keywords"Response
{ "keywords": [{ "id": "keyword_id", "keyword": "rank tracker", "country": "us", "language": "en" }] }POSTAdd a keyword/projects/:id/keywords
Parameters
4 fieldsidstringrequired
Site id.
keywordstringrequired
The keyword to track.
countrystring
Defaults to the site.
languagestring
Defaults to the site.
Request
curl -X POST \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"keyword":"rank tracker","country":"us","language":"en"}' \
"https://api.rankmyseo.com/http/v1/projects/:id/keywords"Response
{ "keyword": { "id": "keyword_id", "keyword": "rank tracker" } }POSTAdd keywords in bulk/projects/:id/keywords/bulk
Parameters
3 fieldstextstringrequired
The list.
countrystring
Applied to every new keyword.
languagestring
Applied to every new keyword.
Request
curl -X POST \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"rank tracker\nkeyword gap"}' \
"https://api.rankmyseo.com/http/v1/projects/:id/keywords/bulk"Response
{ "added": 2, "skipped": 0, "keywords": [] }PATCHUpdate a keyword/projects/:id/keywords/:kid
Parameters
4 fieldskidstringrequired
Keyword id.
keywordstring
New keyword.
countrystring
New country.
languagestring
New language.
Request
curl -X PATCH \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"country":"id"}' \
"https://api.rankmyseo.com/http/v1/projects/:id/keywords/:kid"Response
{ "keyword": { "id": "keyword_id", "country": "id" } }DELETEDelete a keyword/projects/:id/keywords/:kid
Parameters
1 fieldskidstringrequired
Keyword id.
Request
curl -X DELETE \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/keywords/:kid"Response
{ "ok": true }GETKeyword history/projects/:id/keywords/:kid/history
Parameters
1 fieldskidstringrequired
Keyword id.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/keywords/:kid/history"Response
{ "history": [{ "position": 4, "checkedAt": "2026-10-05T00:00:00.000Z" }] }Research
6 endpointsGETResearch a keyword/keywords/research
Parameters
3 fieldsqstringrequired
Query. On POST you can send keyword instead.
countrystring
Defaults to us.
languagestring
Defaults to en.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/keywords/research"Response
{ "status": "ready", "seed": "rank tracker", "rows": [], "total": 0 }GETOverview/projects/:id/overview
Parameters
1 fieldsidstringrequired
Site id.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/overview"Response
{ "score": 72, "keywords": [], "allowance": { "used": 3, "limit": 20, "exhausted": false } }GETKeyword planner/projects/:id/planner
Parameters
3 fieldsqstring
Seed keyword.
countrystring
Country code.
languagestring
Language code.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/planner"Response
{ "status": "ready", "rows": [] }GETKeyword gap/projects/:id/gap
Parameters
1 fieldsidstringrequired
Site id.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/gap"Response
{ "rows": [] }GETRank comparison/projects/:id/rank-compare
Parameters
1 fieldsidstringrequired
Site id.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/rank-compare"Response
{ "rows": [] }POSTAdd a rival/projects/:id/competitors
Parameters
1 fieldsdomainstringrequired
The rival website.
Request
curl -X POST \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"rival.example"}' \
"https://api.rankmyseo.com/http/v1/projects/:id/competitors"Response
{ "competitor": { "id": "rival_id", "domain": "rival.example" } }On-page
3 endpointsGETOn-page issues/projects/:id/issues
Parameters
1 fieldsidstringrequired
Site id.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/issues"Response
{ "status": "ready", "score": 72, "issues": [] }POSTCheck structured data/schema/check
Parameters
1 fieldscodestringrequired
HTML or JSON-LD. Up to 500 KB.
Request
curl -X POST \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"code":"<script type=\"application/ld+json\">{}</script>"}' \
"https://api.rankmyseo.com/http/v1/schema/check"Response
{ "items": [], "errors": [] }POSTCheck a page on a site/projects/:id/schema/check
Parameters
2 fieldscodestring
HTML or JSON-LD.
urlstring
A page on this site. Starter and above.
Request
curl -X POST \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/pricing"}' \
"https://api.rankmyseo.com/http/v1/projects/:id/schema/check"Response
{ "items": [], "source": "url" }Links and content
5 endpointsGETBacklink review/projects/:id/backlinks
Parameters
1 fieldsdaysinteger
Query. How far back to read.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/backlinks"Response
{ "rows": [] }GETDisavow list/projects/:id/disavow
Parameters
1 fieldsdomainsstring[]
On POST. Hosts to add.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/disavow"Response
{ "domains": [] }GETContent ideas/projects/:id/content-ideas
Parameters
3 fieldsqstring
Seed.
countrystring
Country code.
languagestring
Language code.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/content-ideas"Response
{ "ideas": [] }POSTContent plans/projects/:id/content-plans
Parameters
5 fieldsqstringrequired
The topic.
publishOnstringrequired
Month, YYYY-MM, within the next two years.
countrystring
Country code.
languagestring
Language code.
contextstring
Optional note, up to 2,000 characters.
Request
curl -X POST \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"q":"rank tracker","publishOn":"2026-11"}' \
"https://api.rankmyseo.com/http/v1/projects/:id/content-plans"Response
{ "plan": { "id": "plan_id", "publishOn": "2026-11" } }POSTArticles/projects/:id/articles
Parameters
3 fieldskeywordstringrequired
At least 2 characters.
countrystring
Optional.
languagestring
Optional.
Request
curl -X POST \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"keyword":"rank tracker"}' \
"https://api.rankmyseo.com/http/v1/projects/:id/articles"Response
{ "article": { "id": "article_id", "keyword": "rank tracker" } }Search Console
5 endpointsGETConnection status/google/status
Parameters
No parametersThis request has no query or body fields.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/google/status"Response
{ "connected": true }GETList properties/projects/:id/google/properties
Parameters
1 fieldsidstringrequired
Site id.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/google/properties"Response
{ "properties": [{ "siteUrl": "sc-domain:example.com" }] }PUTBind a property/projects/:id/google
Parameters
1 fieldssiteUrlstringrequired
The property, such as sc-domain:example.com.
Request
curl -X PUT \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"siteUrl":"sc-domain:example.com"}' \
"https://api.rankmyseo.com/http/v1/projects/:id/google"Response
{ "property": "sc-domain:example.com" }GETSaved report/projects/:id/google
Parameters
1 fieldsdaysinteger
Query. Window length.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/google"Response
{ "queries": [] }AI Tracker
2 endpointsGETVisibility/projects/:id/ai-visibility
Parameters
1 fieldsidstringrequired
Site id.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/projects/:id/ai-visibility"Response
{ "prompts": [] }POSTAdd a prompt/projects/:id/ai-prompts
Parameters
2 fieldspromptstring
One prompt. Or send prompts as a list.
sourcestring
suggested or custom.
Request
curl -X POST \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"best rank tracker","source":"custom"}' \
"https://api.rankmyseo.com/http/v1/projects/:id/ai-prompts"Response
{ "prompt": { "id": "prompt_id" } }Team
2 endpointsGETList the team/team
Parameters
No parametersThis request has no query or body fields.
Request
curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
"https://api.rankmyseo.com/http/v1/team"Response
{ "members": [], "invites": [] }POSTInvite a member/team/invites
Parameters
1 fieldsemailstringrequired
The address to invite.
Request
curl -X POST \
-H "Authorization: Bearer $RANKMYSEO_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"colleague@example.com"}' \
"https://api.rankmyseo.com/http/v1/team/invites"Response
{ "id": "invite_id" }Checkout, creating keys, Operator, Analytics, Auto-add, and an on-demand rank check stay in the dashboard.