Not yet available
Placeholder endpoints that return a not_yet_available status at no cost, and the legacy routes that redirect.
/v1/link-velocityFree (placeholder)API keyFour endpoints are reserved for features that are not live yet. They exist so integrations and agents can be written today and start returning data later without a code change. Calling them is free and safe: they always answer 200 with status: "not_yet_available".
| Endpoint | Intended purpose | Reason code | MCP tool |
|---|---|---|---|
GET /v1/link-velocity | Rate of new and lost links over time | requires_2_crawl_releases | get_link_velocity |
GET /v1/new-links | Links gained since the previous crawl | requires_2_crawl_releases | get_new_links |
GET /v1/lost-links | Links lost since the previous crawl | requires_2_crawl_releases | get_lost_links |
GET /v1/internal-links | Internal link structure of a domain | internal_links_not_in_pipeline_v1 | get_internal_links |
Why they are not available
- Velocity, new and lost links compare two link graph snapshots. RankParse currently serves one release, so there is nothing to diff yet. They are intended to work once a second release has been processed.
- Internal links need per-page internal link data that the current processing pipeline does not extract. It is a pipeline addition rather than a second-release question, so it has no date tied to the next crawl.
Do not build features that depend on these returning data yet. Check the status field and fall back gracefully.
Request
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
domain | string | internal-links: yes. Others: optional | none | Domain to query. The three comparison endpoints accept any value, or none, and still answer the same way. internal-links rejects an invalid domain with 400 invalid_domain. |
limit | integer | No | 100 | internal-links only. Accepted and ignored. |
offset | integer | No | 0 | internal-links only. Accepted and ignored. |
Example
curl "https://api.rankparse.com/v1/link-velocity?domain=stripe.com" \
-H "X-API-Key: rp_your_key"import requests
body = requests.get(
"https://api.rankparse.com/v1/new-links",
params={"domain": "stripe.com"},
headers={"X-API-Key": "rp_your_key"},
).json()
if body.get("status") == "not_yet_available":
print("Not live yet:", body["reason"])
else:
print(body["data"])const res = await fetch(
"https://api.rankparse.com/v1/new-links?domain=stripe.com",
{ headers: { "X-API-Key": process.env.RANKPARSE_API_KEY } }
);
const body = await res.json();
if (body.status === "not_yet_available") {
console.log("Not live yet:", body.reason);
}Response
{
"domain": "stripe.com",
"data": {
"status": "not_yet_available",
"reason": "requires_2_crawl_releases"
},
"credits_used": 0,
"credits_remaining": 998,
"status": "not_yet_available",
"reason": "requires_2_crawl_releases"
}Response fields
| Field | Type | Description |
|---|---|---|
status | string | Always not_yet_available. Present at the top level and inside data. |
reason | string | requires_2_crawl_releases or internal_links_not_in_pipeline_v1. Present at the top level and inside data. |
domain | string | Echo of the sanitized domain. Omitted when you did not send one. |
data | object | Holds status and reason, so clients that always read data still see them. |
credits_used | integer | Always 0. |
credits_remaining | integer | Current balance. |
There is no total, limit or offset in the response.
Behavior and limits
- Free. No credits are charged, ever.
- Still authenticated and rate limited. An API key is required and the calls count toward the 60 requests per minute limit. A usage log row with 0 credits is recorded.
- Detecting launch. When a feature ships, the response is expected to carry real results instead of this placeholder. Treat
status: "not_yet_available"as the signal that it is still a placeholder.
Errors
| Status | Code | When |
|---|---|---|
400 | invalid_domain | internal-links only: domain is missing or invalid. |
401 | invalid_api_key | Missing, invalid or revoked key. |
429 | rate_limited | More than 60 requests per minute. |
See Errors for the shared error format.
Legacy redirects
Two older routes were renamed. They still work and answer 301 Moved Permanently; they do not require a key themselves, and billing happens on the destination request.
| Old route | Redirects to | Parameters forwarded |
|---|---|---|
GET /v1/page-meta | /v1/page-seo | url |
GET /v1/url-index | /v1/sitemap | domain, limit |
curl -i "https://api.rankparse.com/v1/url-index?domain=stripe.com&limit=50"
# HTTP/2 301
# location: /v1/sitemap?domain=stripe.com&limit=50Redirects use a relative Location. Make sure your HTTP client follows redirects (curl -L) and resends the X-API-Key header on the second request. Many clients drop custom headers when they follow a redirect to a different origin, so for new code call /v1/page-seo and /v1/sitemap directly.
Related
Related data that is available today: