Pay in rupiah

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.

RESTHTTP methodsJSONRequest and response bodiesServer-sideBrowser calls are refused

Quick start · https://api.rankmyseo.com/http/v1

First request

200 OK
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 Cookie

Errors

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

200 OK
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

Read still returns data
"allowance": {
  "used": 20,
  "limit": 20,
  "remaining": 0,
  "resetsAt": "2026-10-06T00:00:00.000Z",
  "exhausted": true
}

Sites

5 endpoints
GETList sites/projects

Parameters

No parameters

This 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 fields
  • name

    stringrequired

    The label you will see in the dashboard.

  • domain

    stringrequired

    The website, like example.com.

  • tags

    string[]

    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 fields
  • id

    stringrequired

    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 fields
  • id

    stringrequired

    Site id.

  • name

    string

    Label.

  • domain

    string

    Website.

  • tags

    string[]

    Starter and above.

  • description

    string

    A short note. Send null to clear it.

  • country

    string

    Two-letter country, such as us.

  • language

    string

    Language, such as en.

  • autoAddPreference

    string

    The Auto-add note for this site.

  • checksPaused

    boolean

    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 fields
  • id

    stringrequired

    Site id.

Request

curl -X DELETE \
  -H "Authorization: Bearer $RANKMYSEO_KEY" \
  "https://api.rankmyseo.com/http/v1/projects/:id"

Response

{ "ok": true }

Keywords

6 endpoints
GETList keywords/projects/:id/keywords

Parameters

1 fields
  • id

    stringrequired

    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 fields
  • id

    stringrequired

    Site id.

  • keyword

    stringrequired

    The keyword to track.

  • country

    string

    Defaults to the site.

  • language

    string

    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 fields
  • text

    stringrequired

    The list.

  • country

    string

    Applied to every new keyword.

  • language

    string

    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 fields
  • kid

    stringrequired

    Keyword id.

  • keyword

    string

    New keyword.

  • country

    string

    New country.

  • language

    string

    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 fields
  • kid

    stringrequired

    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 fields
  • kid

    stringrequired

    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 endpoints
GETResearch a keyword/keywords/research

Parameters

3 fields
  • q

    stringrequired

    Query. On POST you can send keyword instead.

  • country

    string

    Defaults to us.

  • language

    string

    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 fields
  • id

    stringrequired

    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 fields
  • q

    string

    Seed keyword.

  • country

    string

    Country code.

  • language

    string

    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 fields
  • id

    stringrequired

    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 fields
  • id

    stringrequired

    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 fields
  • domain

    stringrequired

    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 endpoints
GETOn-page issues/projects/:id/issues

Parameters

1 fields
  • id

    stringrequired

    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 fields
  • code

    stringrequired

    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 fields
  • code

    string

    HTML or JSON-LD.

  • url

    string

    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" }
GETDisavow list/projects/:id/disavow

Parameters

1 fields
  • domains

    string[]

    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 fields
  • q

    string

    Seed.

  • country

    string

    Country code.

  • language

    string

    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 fields
  • q

    stringrequired

    The topic.

  • publishOn

    stringrequired

    Month, YYYY-MM, within the next two years.

  • country

    string

    Country code.

  • language

    string

    Language code.

  • context

    string

    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 fields
  • keyword

    stringrequired

    At least 2 characters.

  • country

    string

    Optional.

  • language

    string

    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 endpoints
GETStart Google connect/google/authorize

Parameters

1 fields
  • projectId

    string

    Query. Site to return to after consent.

Request

curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
  "https://api.rankmyseo.com/http/v1/google/authorize"

Response

{ "authorizeUrl": "https://accounts.google.com/o/oauth2/v2/auth?..." }
GETConnection status/google/status

Parameters

No parameters

This 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 fields
  • id

    stringrequired

    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 fields
  • siteUrl

    stringrequired

    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 fields
  • days

    integer

    Query. Window length.

Request

curl -H "Authorization: Bearer $RANKMYSEO_KEY" \
  "https://api.rankmyseo.com/http/v1/projects/:id/google"

Response

{ "queries": [] }

AI Tracker

2 endpoints
GETVisibility/projects/:id/ai-visibility

Parameters

1 fields
  • id

    stringrequired

    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 fields
  • prompt

    string

    One prompt. Or send prompts as a list.

  • source

    string

    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 endpoints
GETList the team/team

Parameters

No parameters

This 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 fields
  • email

    stringrequired

    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.