RevorRevor

Get started

Revor AI API v2 provides prospect discovery, public-web and contact search, customs trade data, Connect account lookup, and one-off outreach. Long-running operations use asynchronous jobs: submit a request, then retrieve its result through the unified jobs endpoint.

Make your first request

After creating an API key, check your credit balance to verify authentication and account status:

cURL
curl "https://revor.ai/api/v2/credits" \
  -H "Authorization: Bearer sk-revor-REPLACE_ME"

Choose a capability

GoalCapabilityStart here
Find companies or people from natural-language criteriaProspect discoveryPOST /websets
Search public-web information about a companyPublic-web searchPOST /research/public-web
Find contacts from an official company domainCompany-contact searchPOST /research/contacts
Discover importers or exporters by product and countryCustoms trade dataPOST /customs/companies/search
Analyze imports, exports, counterparties, and trends for a known companyCustoms trade dataPOST /customs/company-candidates
Send Email, LinkedIn, or WhatsApp outreachOne-off outreachCall GET /connect/accounts first
Find and like a relevant LinkedIn postLinkedIn smart likePOST /outreach/linkedin/post-likes

Current paths and fields use websets / webset for prospect discovery. A webset is a prospect list that is generated over time and can be read page by page; callers do not need to know its internal implementation.

Base URL

https://revor.ai/api/v2

API v1 Connect and Outreach endpoints remain temporarily compatible. Both versions can use the same API key, but new integrations should use v2 paths and ensure the key has the corresponding permissions.

Authentication

Use the Authorization: Bearer header:

cURL
curl "https://revor.ai/api/v2/credits" \
  -H "Authorization: Bearer sk-revor-REPLACE_ME"

You may also use x-api-key:

cURL
curl "https://revor.ai/api/v2/credits" \
  -H "x-api-key: sk-revor-REPLACE_ME"

Never put an API key in a URL, frontend code, public repository, or log.

Membership limits and concurrency

The API and MCP share account-wide allowances. Multiple API keys or protocols do not receive separate allowances.

Normal reads, job polling, data-task creation, and outreach actions have separate request limits. Credits, requests per minute, and active-job concurrency are independent controls. See Rate limits, concurrency, and retries for plan limits, headers, errors, and retry behavior.

Common response format

Successful responses contain ok: true and request_id. Lists generally return items; single resources and asynchronous jobs generally return item.

JSON
{ "ok": true, "request_id": "req_xxx", "item": {} }

Error responses contain a stable public error code. Keep request_id when contacting support or troubleshooting.

JSON
{
  "ok": false,
  "error": {
    "code": "invalid_request",
    "message": "invalid_request",
    "request_id": "req_xxx"
  }
}

Idempotency keys

Idempotency-Key is an optional reliable-retry mechanism. Ordinary requests can omit it. If a caller may retry automatically after a network timeout, generate a unique value for the same business operation:

Http
Idempotency-Key: 2d1ed06a-4e63-4e36-9e88-53784bb61b0b
  • Same path, key, and body: returns the first result without creating a duplicate job.
  • Same path and key with a different body: returns 409.
  • Generate a new key for a genuinely new operation; reuse the original key after a network timeout.
  • Without a key, every POST is independent. Duplicate submissions may create, run, and bill multiple jobs.

Asynchronous jobs and Prefer wait

Research and customs endpoints normally return HTTP 202 Accepted. Save item.id, then poll:

Http
GET /api/v2/jobs/{id}

To wait briefly during creation, include:

Http
Prefer: wait=20

If the job finishes during the wait window, the creation endpoint returns HTTP 200 with the terminal job. Otherwise it still returns HTTP 202. A wait timeout does not mean the job failed; continue polling its ID.

Job status versus business-resource status

Jobs and prospect lists have separate statuses:

Text
POST /websets
  ├─ preparation_job: queued → running → succeeded
  └─ prospect list: generating_criteria → searching → verifying → completed

The job reports whether one asynchronous operation finished. The prospect-list status reports the stage of discovery. Therefore, preparation_job.status=succeeded only means the list started successfully, not that discovery is complete.

Endpoint reference

CapabilityMethod and pathDescription
ConnectGET /api/v2/connect/accountsList connected accounts available for outreach.
OutreachPOST /api/v2/outreach/dispatchesSend one Email, LinkedIn, or WhatsApp outreach action.
OutreachPOST /api/v2/outreach/linkedin/post-likesFind and like one relevant LinkedIn post.
CreditsGET /api/v2/creditsGet currently available credits.
Prospect discoveryGET /api/v2/websetsPage through prospect lists.
Prospect discoveryPOST /api/v2/websetsCreate a company or person prospect list within plan limits.
Prospect discoveryGET /api/v2/websets/{id}Get list-generation progress.
Prospect discoveryGET /api/v2/websets/{id}/itemsPage through matching companies or people.
JobsGET /api/v2/jobs/{id}Get outreach, research, customs, or list-preparation jobs.
JobsPOST /api/v2/jobs/{id}/cancelCancel a job that has not started.
ResearchPOST /api/v2/research/public-webSearch public-web sources.
ResearchPOST /api/v2/research/contactsSearch contacts by official company domain.
CustomsPOST /api/v2/customs/company-candidatesResolve queryable company-name candidates.
CustomsPOST /api/v2/customs/companies/searchDiscover importers or exporters by product, country, and date.
CustomsPOST /api/v2/customs/trade-reportsGenerate a complete trade report in one job.
CustomsPOST /api/v2/customs/counterpartiesGet major counterparties.
CustomsPOST /api/v2/customs/categoriesGet major product categories.
CustomsPOST /api/v2/customs/trendsGet trade trends.
CustomsPOST /api/v2/customs/countriesGet trade-country distribution.

Detailed documentation:

One-off outreach

  1. Call GET /connect/accounts?can_send=true and select an account_id.
  2. Call POST /outreach/dispatches or the LinkedIn-like endpoint. Send Idempotency-Key when safe retries are needed.
  3. Save item.id and poll GET /jobs/{id}.
  4. For succeeded, read item.result; for failed, read item.error.code.

Prospect discovery

  1. Call GET /credits to confirm available credits.
  2. Call POST /websets, then save webset.id.
  3. Poll GET /websets/{id} until completed, failed, or cancelled.
  4. Page through GET /websets/{id}/items?detail=compact&limit=10.

preparation_job.id only confirms whether the list started; it does not mean prospect discovery is complete.

Research and customs jobs

  1. Submit the creation request, using Idempotency-Key if safe retries are needed.
  2. Read item.id.
  3. If item.status is not terminal, poll GET /jobs/{id}.
  4. On succeeded, read item.result and item.billing.

Common errors

HTTPCodeDescription
400invalid_request / endpoint-specific codeInvalid request parameters.
401api_key_missingNo API key was provided.
401api_key_invalidThe API key is invalid.
401api_key_expiredThe API key has expired.
401api_key_revokedThe API key was revoked.
403permission_deniedThe API key lacks permission.
403membership_tier_insufficient / webset_count_not_available_for_tierThe capability or requested count is unavailable on the current plan.
404task_not_found / webset_not_foundThe resource does not exist or belongs to another user.
409idempotency_key_reused_with_different_requestThe idempotency key was reused with another body.
409idempotency_key_in_progressThe identical idempotent request is still being created.
409job_already_runningThe job has started and cannot be safely cancelled.
413request_payload_too_largeThe request body exceeds the endpoint limit.
429api_rate_limit_exceededThe shared account limit for this endpoint type was reached; wait for Retry-After.
429api_key_rate_limit_exceededThe API-key-level limit was reached.
503task_unavailableThe job service is temporarily unavailable.