Skip to main content

Base URL and routes

Use https://mcp.enricho.co. This reference describes REST, not the MCP transport or dashboard APIs. Authenticate with an API key and send JSON with Content-Type: application/json. The plan list needs no authentication. All example data is synthetic and all credential/ID placeholders must be replaced locally.

Response envelope

Responses use the actual HTTP status and {success, result, message}. Search records are in result.results, not a top-level array. Empty results are a successful response, not a 404:
Each full retrieval costs credits again, including repeats and continuation pages. A 20-record page costs 20 credits; an empty page costs 0. Pages are prepared before an atomic full-page debit and released only after confirmation. Insufficient balance returns 402 with no records and no credits deducted; reduce limit or buy credits. Free previews share a per-user daily allowance across person/company searches and keys. Even an empty preview consumes an attempt. Default allowances are Free 100, Pro 1,000, Growth 5,000, Scale 20,000 and Enterprise 20,000 per UTC day; deployment settings can change them. Unknown plans use the Free cap; if the plan cannot be retrieved, previews also use the Free cap. If preview counting is unavailable, previews fail closed with 503 rather than silently becoming unlimited. On a daily-cap 429, wait until midnight UTC or use a paid full search. Plan changes can take up to five minutes to affect the preview allowance.

Pagination

  1. Send filters with limit from 1–100 and no cursor. Omitted or 0 uses 20.
  2. If result.has_more is true, resend the same filters with cursor set to result.next_cursor.
  3. Stop when has_more is false. The final next_cursor is empty.
Keep filter values and array order unchanged; page size can change. Cursors are scoped to normalized filters, not a fixed dataset snapshot. Treat them as opaque. There is no offset/page-number pagination. Public searches return neither total_estimate nor total_capped. Previews always return an empty cursor. For full retrieval, use the preview’s IDs or repeat its filters with preview: false.

Errors and retries

Errors contain success: false, result.code and a human-readable message. Branch on status and code, not exact message text. Illustrative error:
Do not blindly retry paid search after a timeout, lost response or unconfirmed-charge 503: a debit may already have completed. Check usage first. Every public retry is a new retrieval; there is no public idempotency-key contract. No records are released when credit confirmation fails.