Developers · v1

API reference.

A small, predictable REST surface. Submit URLs, poll status, read results. Auth is a single header. No SDK required.

Base URL

platinumindexer.com/api/v1/index.php

Auth

Header: X-API-Key

Authentication

Send your key in the X-API-Key header on every request. Keys in the query string are not accepted (they would leak into logs). You can create several named keys, one per app, and revoke each on its own.

Header
X-API-Key: 5f4dcc3b5aa765d61d8327deb882cf99
Don't ship the key client-side. Calls from the browser will leak it to anyone who opens devtools. Proxy through your backend.

Errors

Failures return a 4xx or 5xx HTTP status with a JSON body containing success: false and a human-readable error. There is no error code enum - match on the message if you must, but prefer status codes.

{
  "success": false,
  "error": "Insufficient credits"
}

Cost & credits

Every call that creates a task deducts credits up front. Unused credits from auto-verify and auto-retry are refunded after the schedule completes.

ActionCostNotes
Index URL2 creditsStandard lane
Index URL · Express+13 creditsSub-2-min crawl signal
Status check0.1 creditsVerifies if URL is in Google
Verify after indexing+1 creditSchedules re-checks · refundable

Get profile

GET ?action=me

Returns your account email, credit balance, and signup date. Useful as a health probe in CI.

Request
curl 'https://platinumindexer.com/api/v1/index.php?action=me' \
  -H 'X-API-Key: YOUR_KEY'
200 OK
{
  "success": true,
  "user": {
    "id": 123,
    "email": "[email protected]",
    "credits_balance": 500,
    "created_at": "2026-04-12 10:00:00"
  }
}

Submit URLs

POST ?action=create_task

Queue a batch of URLs for indexing or status checking. Returns a task_id you'll use to poll progress.

FieldTypeDefaultDescription
urlsrequiredarray | string-Array of URLs, or a string with one URL per newline.
typestringindexerindexer submits to Google. checker just verifies index status.
enginestringgoogleOnly Google is supported.
titlestringnullOptional label that shows up in your dashboard.
vipboolfalseRoute through the express lane (sub-2-min crawl, costs more).
drip_feedboolfalseStagger submissions over multiple days.
drip_duration_daysint31–30. Only honored when drip_feed is true.
Request body
{
  "urls": ["https://example.com/page1", "https://example.com/page2"],
  "type": "indexer",
  "title": "April launch",
  "vip": true
}
cURL
curl -X POST 'https://platinumindexer.com/api/v1/index.php?action=create_task' \
  -H 'X-API-Key: YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"urls":["https://example.com/page1"],"vip":true}'
200 OK
{
  "success": true,
  "task_id": 456,
  "is_drip_feed": false
}

Poll a task

GET ?action=get_task&task_id={id}

Returns headline progress for a single task. Poll every 30–60s; we don't rate-limit polling but there's no real signal sooner than that.

Response
{
  "success": true,
  "task": {
    "id": 456,
    "title": "April launch",
    "type": "indexer",
    "status": "processing",
    "progress": { "updated": 10, "pending": 5 }
  }
}

List tasks

GET ?action=list_tasks

Your tasks, newest first, with per-link counts. Use it to find task ids.

ParamTypeDefaultDescription
pageint1Page number.
per_pageint201–100.
typestring-indexer or checker.
statusstring-pending, processing, completed or failed.
Response
{
  "success": true,
  "tasks": [
    {
      "id": 456,
      "title": "April launch",
      "type": "indexer",
      "engine": "google",
      "status": "completed",
      "vip": false,
      "links": { "total": 20, "indexed": 17, "unindexed": 3, "pending": 0, "error": 0 },
      "created_at": "2026-04-19 14:00:00",
      "completed_at": "2026-04-19 14:20:00"
    }
  ],
  "pagination": { "page": 1, "per_page": 20, "total": 42, "total_pages": 3 }
}

Pricing

GET ?action=pricing

Live credit costs, so you can estimate a task before creating it. Tasks are charged in whole credits; the task total is rounded up. credit_tiers is empty while one flat price per credit applies.

Response
{
  "success": true,
  "currency": "USD",
  "price_per_credit_usd": 0.01,
  "credits_per_url": { "indexer": 2, "indexer_vip": 10, "checker": 0.1, "auto_check_addon": 1 },
  "credit_tiers": [],
  "vip_queue_enabled": true
}

MCP server for AI assistants

Let Claude, Cursor, ChatGPT or any Model Context Protocol host submit URLs, check index status and read results for you. The server wraps this API and authenticates with your API key.

Cursor / Claude Desktop config
{
  "mcpServers": {
    "platinumindexer": {
      "command": "npx",
      "args": ["-y", "platinumindexer-mcp"],
      "env": { "PLATINUMINDEXER_API_KEY": "YOUR_KEY" }
    }
  }
}
ToolDescription
get_accountCredit balance.
get_pricing / estimate_costLive costs, and the cost of a task before you submit it.
submit_urls_for_indexingCreate an indexing task. Spends credits.
check_index_statusCreate an index-check task. Spends credits.
list_tasks / get_task / get_task_linksProgress and per-URL results.
Needs Node.js 20+. Create a separate key named "MCP server" on the API key page so you can revoke it on its own. Claude Code and self-hosting are covered in the setup guide.

Response shape

All responses are JSON with a top-level success boolean. Successful responses carry the relevant resource (user, task, links, …); failures carry error.

Status codes

CodeMeaning
200OK
400Bad request - missing/invalid parameters
401Missing or invalid X-API-Key
402Insufficient credits
404Task or resource not found
429Too many requests - back off
5xxApex side issue - retry with exponential backoff