Developer API

SearchIn API

Integrate any OSINT provider's data into your own workflow. One key and one credit balance cover LeakRadar, OSINT Industries, Facecheck.id, and every other source we support — pay only for the searches you run.

Quick start

  1. Sign in and create an API key at Dashboard → API keys. Copy the secret immediately — it is shown only once.
  2. Send requests to https://apiv1.osintverse.com with the x-api-key header.
  3. Call GET /v1/providers to see valid provider/input combinations and pricing, then POST /v1/search.

Base URL

https://apiv1.osintverse.com

Interactive docs: Swagger · ReDoc · OpenAPI JSON

Authentication

Authenticated endpoints require an API key in the x-api-key header. Keys are prefixed with ov_ and rate-limited to 1,000 requests per day per key.

x-api-key: ov_your_secret_key
Content-Type: application/json

Endpoints

MethodPathAuthDescription
GET/healthNoneService health check.
GET/v1/providersNoneProvider catalog with supported input types and pricing.
POST/v1/searchRequiredCreate and run an OSINT search.
GET/v1/search/{id}RequiredPoll async search status and retrieve results.

Search workflow

Synchronous
LeakRadar, OSINT Industries — results returned in the POST response when status is completed.
Async polling
FaceCheck image searches may return running. Poll GET /v1/search/{id} every ~2 seconds. Completed matches use score, url, and thumbnail.

Request & response examples

POST /v1/search — request

{
  "provider": "leakradar-lite",
  "input_type": "email",
  "query": "[email protected]"
}

Completed response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "completed",
  "provider": "leakradar-lite",
  "input_type": "email",
  "query": "[email protected]",
  "cost_usd": "1.00",
  "balance_after": "9.00",
  "result": {
    "sources": [
      {
        "name": "leakradar",
        "type": "email",
        "total": 3,
        "total_unlocked": 2,
        "page": 1,
        "page_size": 100,
        "items_returned": 3,
        "auto_unlock_points_consumed": 1
      }
    ],
    "matches": [
      {
        "type": "leak",
        "id": "3f1a9c2b7e",
        "url": "https://example.com/login",
        "username": "[email protected]",
        "username_masked": "u***@example.com",
        "password": "P@ssw0rd123",
        "password_strength": 6,
        "unlocked": true,
        "is_email": true,
        "added_at": "2025-01-15T10:30:00Z",
        "status": "new"
      }
    ]
  },
  "error": null,
  "poll_url": null
}

Running response (poll again)

{
  "id": "550e8400-e29b-41d4-a716-446655440001",
  "status": "running",
  "provider": "facecheck",
  "input_type": "image",
  "query": "https://example.com/photo.jpg",
  "cost_usd": "0.50",
  "balance_after": "9.45",
  "result": null,
  "error": null,
  "poll_url": "/v1/search/550e8400-e29b-41d4-a716-446655440001"
}

FaceCheck completed response

{
  "id": "c1e823d0-c8be-486a-aad0-4405a6326c88",
  "status": "completed",
  "provider": "facecheck",
  "input_type": "image",
  "query": "https://example.com/photo.jpg",
  "cost_usd": "0.50",
  "balance_after": "9.00",
  "result": {
    "sources": [
      {
        "name": "facecheck",
        "type": "image",
        "provider": "facecheck",
        "testing_mode": false,
        "total_results": 300,
        "returned": 2,
        "max_score": 97,
        "search_id": "c1e823d0-c8be-486a-aad0-4405a6326c88"
      }
    ],
    "matches": [
      {
        "score": 97,
        "url": "https://sports.yahoo.com/article/example",
        "thumbnail": "data:image/webp;base64,..."
      },
      {
        "score": 94,
        "url": "https://www.instagram.com/p/example/",
        "thumbnail": "data:image/webp;base64,..."
      }
    ],
    "raw": null
  },
  "error": null,
  "poll_url": null
}

Search status values

StatusMeaning
completedSearch finished. Results are in result.matches and result.sources.
runningStill processing. Poll GET /v1/search/{id} every ~2 seconds.
failedInsufficient balance or request rejected before charging.
refundedUpstream provider failed after billing. Balance was restored.

Provider matrix & pricing

Invalid provider + input_type pairs return HTTP 422. All providers use flat per-query pricing. LeakRadar Lite / Plus / Pro unlock up to 1,000 / 10,000 / 50,000 credentials. Pricing loaded live from the API.

Input typeProviderPrice
emailLeakRadar Lite$1.00 (up to 1,000 unlocks)
emailLeakRadar Plus$5.00 (up to 10,000 unlocks)
emailLeakRadar Pro$20.00 (up to 50,000 unlocks)
emailLeakOSINTbot$0.20
emailOSINT Industries$0.60
usernameLeakRadar Lite$1.00 (up to 1,000 unlocks)
usernameLeakRadar Plus$5.00 (up to 10,000 unlocks)
usernameLeakRadar Pro$20.00 (up to 50,000 unlocks)
usernameLeakOSINTbot$0.20
usernameOSINT Industries$0.60
phoneOSINT Industries$0.60
domainLeakRadar Lite$1.00 (up to 1,000 unlocks)
domainLeakRadar Plus$5.00 (up to 10,000 unlocks)
domainLeakRadar Pro$20.00 (up to 50,000 unlocks)
domainOSINT Industries$0.60
nameOSINT Industries$0.60
nameFacecheck.id$0.50
imageFacecheck.id$0.50
imagePicarta.ai$0.50
ipOSINT Industries$0.60

HTTP error codes

Errors return { "detail": "message" }. Validation errors may include an errors array.

CodeMeaning
401Missing, invalid, disabled, or expired API key.
403Account is banned.
404Search not found or not owned by your account.
422Invalid request body, query validation, or provider/input_type pair.
502Upstream provider or API key verification failure.
503API key verification is not configured on the server.

Code examples

Create search

curl -X POST "https://apiv1.osintverse.com/v1/search" \
  -H "Content-Type: application/json" \
  -H "x-api-key: ov_your_api_key" \
  -d '{"provider":"leakradar-lite","input_type":"email","query":"[email protected]"}'

Poll async search

curl "https://apiv1.osintverse.com/v1/search/550e8400-e29b-41d4-a716-446655440000" \
  -H "x-api-key: ov_your_api_key"

Ready to integrate?

Create an API key, explore the interactive Swagger docs, or run your first search from the SearchIn dashboard.