Documentation

Parel is paid data tools for AI agents, billed per call in Indian rupees from a prepaid balance. Failed calls, timeouts, empty results and repeats are always ₹0. One MCP endpoint for Claude and other assistants, one REST API for code.

Quickstart

Every path starts with an account at app.parel.si. The ₹100 welcome credit is added automatically; during the beta, further credit is added by Parel on request to hello@parel.si.

Claude (claude.ai and the desktop app)

  1. Open Settings → Connectors → Add custom connector.
  2. Name: Parel. URL: the address below. Click Connect.
  3. Sign in with your Parel account and allow access. That is the whole setup; there is no key to paste.
https://api.parel.si/mcp

Check it works. In a new chat, turn the Parel connector on and ask "Check my Parel balance." A balance in rupees means you are connected. Then try "Find the work email of Priya Sharma at acme.in and verify it."

Claude reads each tool's description, which includes today's price, picks the tool and reports the cost. You can revoke the connection at any time from Claude's connector settings or from the Parel dashboard.

Claude Code

Create an API key in the dashboard (API keys → Create; it is shown once). Then:

claude mcp add --transport http parel https://api.parel.si/mcp \
  --header "Authorization: Bearer sk_live_…"

Type /mcp in Claude Code to confirm parel is connected. Give the key a daily cap in the dashboard so an agent loop can never spend more than you meant.

Cursor

In Cursor Settings → MCP → Add new global MCP server, or in .cursor/mcp.json in your project:

{
  "mcpServers": {
    "parel": {
      "url": "https://api.parel.si/mcp",
      "headers": { "Authorization": "Bearer sk_live_…" }
    }
  }
}

n8n

Two ways, same key:

  • MCP Client Tool node (for an AI Agent node): endpoint https://api.parel.si/mcp, transport HTTP streamable, authentication Bearer with your key. The agent then sees every Parel tool.
  • HTTP Request node for one fixed tool: POST https://api.parel.si/v1/run, header Authorization: Bearer sk_live_…, JSON body {"tool": "search_news", "input": {"q": "Infosys", "gl": "in", "num": 10}}. The response's data is the result; cost_paise is what it cost.

Your own code

# curl
curl https://api.parel.si/v1/run \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"tool":"find_email","input":{"domain":"acme.in","full_name":"Priya Sharma"},"idempotency_key":"lead-1842"}'
// Node (fetch)
const r = await fetch("https://api.parel.si/v1/run", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.PAREL_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ tool: "search_web", input: { q: "best CRM for small business in India", gl: "in", num: 10 } }),
});
const out = await r.json();            // { ok, call_id, class, cost_paise, balance_paise, data }
console.log(out.cost_paise / 100, "₹");
# Python (requests)
import os, requests
r = requests.post("https://api.parel.si/v1/run",
    headers={"Authorization": f"Bearer {os.environ['PAREL_KEY']}"},
    json={"tool": "verify_email", "input": {"email": "priya@acme.in"}})
out = r.json()
print(out["class"], out["cost_paise"], out.get("data"))

Agents: point them at /skill.md (setup, who goes first, costs, the error table) and /llms.txt (what Parel is and when to use it). Both are short on purpose.

API keys and scopes

Keys are created in the dashboard, shown once and stored only as a one-way hash. Each key has scopes and optional daily and monthly caps:

ScopeAllows
runPaid calls (POST /v1/run, run_tool and the headline tools over MCP)
readBalance, call history, quotes, tool details
adminManage keys and budgets

Use one key per place (Claude Code, a server, an n8n workflow) so you can revoke one without touching the others. The Claude connector uses your sign-in, not a key.

API reference

Base URL https://api.parel.si. Every request carries Authorization: Bearer sk_… (or X-API-Key: sk_…). Every response carries X-Call-Id; a paid call also carries X-Cost-Paise and X-Balance-Paise. Amounts are integers in paise (₹1 = 100 paise). Bodies are JSON.

EndpointScopeWhat it does
POST /v1/runrunRun a tool. Returns 200 with the result, 202 for a slow job, or an error with charged_paise: 0.
GET /v1/runs/:idreadStatus, class and cost of any call; polls slow jobs.
POST /v1/quotereadThe charge and hold for an exact input before running it. Free; nothing is recorded.
POST /v1/discoveranyEnabled tools with today's prices, optionally filtered: {"query": "email"}. Free.
GET /v1/toolsanyThe same list, unfiltered. Free.
GET /v1/tools/:nameanyOne tool: input schema, today's price and hold. Free.
GET /v1/balancereadBalance in paise and as text.
GET /v1/packs, POST /v1/topupreadTop-up packs and checkout. Not available during the beta: credit is added by Parel.

POST /v1/run

{
  "tool": "find_email",
  "input": { "domain": "acme.in", "full_name": "Priya Sharma" },
  "idempotency_key": "lead-1842",     // optional: makes retries safe
  "client_tag": "acme"                // optional: spend shows per client in the dashboard
}

Success:

{
  "ok": true,
  "call_id": "c_01J…",
  "tool": "find_email",
  "class": "ok",
  "cost_paise": 280,
  "balance_paise": 9720,
  "data": { "email": "priya@acme.in", "score": 94, … }
}

Failure (always ₹0):

{
  "ok": false,
  "call_id": "c_01J…",
  "tool": "find_email",
  "class": "upstream_error",
  "error": "upstream_timeout",
  "charged_paise": 0,
  "message": "The provider did not answer in time. Nothing was charged.",
  "retryable": true,
  "retry_after_seconds": 5
}

Input is validated against the tool's schema before anything is held: a bad field returns 400 invalid_input with errors[] naming the paths, free. Tools that accept more than one set of fields (for example a full name, or a first and last name) say so in GET /v1/tools/:name.

POST /v1/quote

{ "tool": "search_web", "input": { "q": "best CRM for small business in India", "num": 10 } }
→ { "ok": true, "estimate_paise": 25, "hold_paise": 38, "enough_balance": true }

GET /v1/runs/:id

200 with class, cost_paise, latency_ms and, for a finished slow job, data; 202 with poll_after_seconds while a slow job runs; 422 and ₹0 if it failed upstream.

POST /v1/discover and GET /v1/tools

Each tool comes back with name, description (what it does, today's price, when it is free), price_paise, hold_paise and, for short lists, input_schema. The price is computed with the same formula and exchange rate that settle the call.

Idempotency

Send idempotency_key (any string unique to the request) to make retries safe:

  • A successful call is replayed from storage for ₹0 for 24 hours (class: "replay").
  • A failed call can be retried with the same key.
  • The same key with a different input is refused: 422 idempotency_key_mismatch.
  • A key still running returns 409 in_progress; a purged replay returns 410 replay_expired.

MCP tools

The MCP endpoint is https://api.parel.si/mcp (streamable HTTP). Claude connects by signing in; other clients send Authorization: Bearer sk_….

ToolCostUse
discover_toolsfreeList tools with today's prices; filter with a keyword such as "email".
inspect_toolfreeOne tool in full: input schema and one-of field sets, an example input, price and hold, whether a miss is free.
quote_toolfreeThe exact charge and hold for an input, before running it.
run_toolper callRun any tool by name with its input.
get_runfreeCheck a call by call_id; polls slow jobs.
check_balancefreeBalance in rupees.
search_web, find_email, get_social_posts, check_ai_visibilityper callHeadline tools exposed directly, so the assistant picks them without a round trip.

An MCP answer over 48 KB is cut to whole list items (always valid JSON) with a _truncated note saying how many were kept; the REST API returns the full response.

Tools and prices

The eight tools in the beta, at today's rate (₹94.96 per US dollar on 19 October 2026). discover_tools and GET /v1/tools have the live figure.

ToolWhat it doesPriceWhen it is free
search_web
Web search
Google results for any query, country and language. Ten results per call.₹0.25 per call₹0 if it fails
search_news
News search
Google News results, newest first, any country.₹0.25 per call₹0 if it fails
read_page
Read a page
Any web page as clean text or markdown, including pages built with JavaScript.₹0.57 per page₹0 if it fails or finds nothing
find_email
Find a work email
A person's work email from their name and company domain.₹2.80 per email found₹0 if it fails or finds nothing
verify_email
Verify an email
Is this address deliverable? Catch-all, disposable and risky addresses flagged.₹1.40 per check₹0 if it fails
get_social_posts
Instagram posts
Recent posts of a public Instagram account with likes, comments and captions.₹0.25 per call₹0 if it fails
get_reddit
Reddit posts
Recent posts from a subreddit, with scores and comment counts.₹0.25 per call₹0 if it fails
check_ai_visibility
AI visibility
What ChatGPT answers for a prompt in a chosen country, with the sources it cites.₹0.42 per prompt₹0 if it fails

Per-result tools (search, posts) hold for up to 10 results; ask for the number you need with num. One query, one handle, one domain per call.

Errors and what you pay

Every response has a class. Only ok is charged.

classMeaningYou pay
okA result came backthe shown price
ok_freeNothing found (no email for that person, an empty list), or a free tool₹0
replaySame idempotency key: the stored answer₹0
vendor_error (HTTP 422)The data provider rejected the call: bad input for that provider, not found₹0
upstream_error (HTTP 502)Timeout, provider down or out of capacity. retryable: true, often with retry_after_seconds₹0
rejected (400, 402, 404, 429)Invalid input, empty balance (insufficient_balance), unknown tool, a spend cap (budget_exceeded, with cap) or a rate limit₹0; the provider was never called
running (HTTP 202)A slow job has started; poll itheld, settled when done

Error codes you will meet: invalid_input (with errors[]), unknown_tool, tool_unavailable, insufficient_balance, budget_exceeded, rate_limited, insufficient_scope, in_progress, idempotency_key_mismatch, replay_expired, upstream_timeout, upstream_unavailable, upstream_busy, no_result. Each comes with a plain message.

A charged answer that was useless anyway? Report bad result on the call in your usage log within 7 days. Small refunds are automatic up to a monthly cap; larger ones are reviewed within two business days. Policy.

Pricing rules

  • Price first. Each tool shows its price. Before a call runs, Parel holds that estimate plus a safety margin on your balance; after the call it charges the real price and releases the rest. The charge is never more than the hold.
  • Minimum charge ₹0.25 per successful call. Prices follow the provider's price and the day's exchange rate, which is fixed for each call when it starts.
  • Failed is free. Every class except ok is ₹0.
  • Budgets. Daily and monthly caps per key and per team, set in the dashboard. A capped call is refused before it runs.
  • Per client. Pass client_tag and spend is attributed per client in the dashboard.
  • Beta. Credit is added by Parel: the ₹100 welcome credit automatically, more on request. Payments open after the beta.

Slow jobs

Some tools (deep research, when it is enabled) take minutes. POST /v1/run then answers 202 with { "class": "running", "call_id", "poll_after_seconds", "cost_paise": 0 } and keeps the hold open. Poll GET /v1/runs/:id (or get_run) at that interval: 202 while running, 200 with data and the real cost_paise when done, 422 and ₹0 if the job failed. None of the eight beta tools is slow; when a slow tool is switched on, its description says so and the assistant is instructed to quote the cost and ask first.

Limits

  • 300 paid calls per minute per key by default. Over the limit: 429 rate_limited with Retry-After, nothing charged.
  • One query, handle or domain per call; up to 10 results per call for per-result tools.
  • MCP answers are cut at 48 KB (see above); the REST API returns everything.
  • Results are for your own, lawful work: no bulk unsolicited messaging, no reselling raw data, no lookups of minors. Acceptable use policy.
  • Something not covered here: hello@parel.si. Include the call_id.