1. Three ways in
Every way in reaches the same account, the same credits and the same projects as the dashboard.
| You are | Use | Start here |
|---|---|---|
| An AI assistant or agent app (Claude, ChatGPT, Cursor, VS Code...) | The MCP server at https://indexerpal.com/mcp. Sign in with OAuth when the app asks. | MCP server |
| Your own code or a no-code tool | The REST API at https://indexerpal.com/api/v1 with an API key. | REST API reference |
| An autonomous agent with only the user's email | Agent registration (/auth.md), then the API, MCP server or A2A agent. | Agents and payments |
2. Quickstart
Create an API key in your dashboard under API & MCP. Keys unlock with your first credit purchase. Then:
Check your account
curl https://indexerpal.com/api/v1/account \
-H "Authorization: Bearer ipk_YOUR_KEY"
See what a list will cost
curl https://indexerpal.com/api/v1/estimate \
-H "Content-Type: application/json" \
-d '{"kind": "standard", "urls": ["https://example.com/new-post", "https://example.com/launch"]}'
Index the URLs
curl https://indexerpal.com/api/v1/projects \
-H "Authorization: Bearer ipk_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: launch-2026-10-06" \
-d '{"urls": ["https://example.com/new-post", "https://example.com/launch"], "mode": "instant"}'
The answer is the new project. Standard indexing costs 1 credit per URL and instant indexing 3. Every URL is checked in Google (instant URLs within the hour, all URLs on day 4 and day 14).
Follow the results
curl https://indexerpal.com/api/v1/projects/PROJECT_ID -H "Authorization: Bearer ipk_YOUR_KEY"
curl "https://indexerpal.com/api/v1/projects/PROJECT_ID/links?status=not_indexed" -H "Authorization: Bearer ipk_YOUR_KEY"3. Authentication
Send a credential in the Authorization header as a bearer token. Cookies are never accepted by the API, MCP or agent endpoints.
API keys
- Made in the dashboard (API & MCP), after the account's first credit purchase. Up to 10 active keys.
- They look like
ipk_...and are shown once. Store them as secrets; revoke a key the moment it may have leaked. Authorization: Bearer ipk_..., orX-API-Key: ipk_...for tools that prefer a plain header.
OAuth 2.1
For apps acting for other people, and for MCP clients (they do this for you). Authorization code with PKCE (S256), public clients only, registered by the app itself.
| URL | |
|---|---|
| Authorization server metadata | https://indexerpal.com/.well-known/oauth-authorization-server |
| Protected resource metadata | https://indexerpal.com/.well-known/oauth-protected-resource |
| Client registration (RFC 7591) | https://indexerpal.com/oauth/register |
| Authorization | https://indexerpal.com/oauth/authorize |
| Token | https://indexerpal.com/oauth/token |
| Revocation (RFC 7009) | https://indexerpal.com/oauth/revoke |
| Signing keys (JWKS) | https://indexerpal.com/.well-known/jwks.json |
Access tokens last 60 minutes. Refresh tokens last 30 days and rotate on every use; reusing an old one disconnects the app. The token endpoint also accepts urn:ietf:params:oauth:grant-type:jwt-bearer and urn:workos:agent-auth:grant-type:claim for agent registration.
Paid accounts
Reading an account and buying credits work for any account. Creating projects and checks needs an account that has bought credits at least once; until then those calls answer 402 payment_required with a link to buy.
4. Scopes
| Scope | Allows |
|---|---|
read | See your balance, projects, link statuses, orders and usage. |
index | Create indexing projects and index checks (spends credits), cancel unsent links, read sitemaps. |
purchase | Start credit purchases: checkout links for a person to pay, or direct payments where enabled. |
API keys get all three unless you untick some when you create them. On the OAuth consent screen, the account owner can narrow what an app gets.
5. Quotas and limits
| Limit | Value |
|---|---|
| Requests per minute, per API key or connected app | 120 |
| Requests per day, per account (all keys and apps) | 20,000 |
| Projects and checks created per day, per account | 500 |
| URLs per project or check | 10,000 |
| URLs per page when listing a project | 500 |
| Sitemap reads per 10 minutes, per account | 20 |
| Checkout links per hour, per account | 20 |
| Active API keys per account | 10 |
| Requests per minute without a credential, per IP address | 60 |
| OAuth client registrations per hour, per IP address | 20 |
| Agent registrations per hour, per IP address | 10 |
Every authenticated response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset for the per-minute window, and RateLimit-Policy. Over a limit you get 429 with Retry-After in seconds. Daily counts reset at midnight UTC. Your dashboard shows today's usage.
Credits are the real budget: a call that would spend more credits than the balance answers 402 insufficient_credits and spends nothing.
6. Retrying safely
Calls that spend credits or start a payment (POST /projects, POST /projects/from-sitemap, POST /checks, POST /checkout) accept an Idempotency-Key header (MCP tools take an idempotency_key argument). A retry with the same key and the same body returns the first answer, with Idempotent-Replayed: true, and spends nothing twice. The same key with a different body answers 422 idempotency_mismatch; while the first call is still running, 409 idempotency_in_flight. Keys are kept 24 hours.
7. Errors
Every error has the same shape, with a stable code to branch on and a message written for a person or an agent:
{
"error": {
"code": "insufficient_credits",
"message": "This needs 300 credits and the balance is 120. Buy a pack with buy_credits (POST /api/v1/checkout).",
"needed": 300,
"balance": 120,
"docs": "https://indexerpal.com/developers/api#errors"
}
}
The full list of codes is in the API reference.
8. Machine-readable files
Agents can find everything on their own from these files. Every page also sends a Link header pointing to them.
| File | What it is |
|---|---|
| /openapi.json | OpenAPI 3.1 for the REST API, with payment discovery (x-payment-info). |
| /.well-known/api-catalog | API catalog (RFC 9727): every API with its description and docs. |
| /.well-known/mcp/server-card.json | MCP server card: tools, transport, authentication. |
| /.well-known/agent-card.json | A2A agent card, with the AP2 payments extension. |
| /auth.md | How an agent gets credentials. |
| /.well-known/agent-skills/index.json | Agent Skills: ready-made instructions for agents. |
| /.well-known/acp.json | Agentic Commerce Protocol discovery. |
| /.well-known/ucp | Universal Commerce Protocol profile. |
| /.well-known/ai-catalog.json | Agentic Resource Discovery manifest. |
| /llms.txt | A plain-text summary of the site for language models. |
9. Pages as Markdown
Every public page is available as Markdown, which costs an agent a fraction of the tokens of the HTML. Ask for it with Accept: text/markdown, or add .md to the path: /index.md, /pricing.md, /developers.md.
10. Versions and support
The API is versioned in its path (/api/v1). New fields and endpoints can appear in v1 at any time, so ignore fields you don't know; anything that would break a working client gets a new version. Questions, higher limits or a bug: write to [email protected].