Public API docs — no login required. Need an API key? Register or use the Telegram bot.

Authentication

All customer API requests authenticate with an api_key query or form/body parameter. There is no User-Agent restriction — library defaults (python-requests, curl, etc.) work fine.

Base URL
https://search-api.dev

How to authenticate

  • Pass api_key as a GET query parameter or POST field / JSON body field
  • Most actions also use action=... on the same base URL
  • Optional X-API-Version: v1|v2 is accepted and echoed; it does not change behavior today
  • Per-key rate limits return HTTP 429 when exceeded
Example Request
curl "https://search-api.dev/?api_key=YOUR_API_KEY&phone=1234567890"

Also see the interactive OpenAPI UI at /api-reference and this page at /docs.


Unified Search Endpoint

Search by email, phone, domain, or company on a single endpoint. The API detects the search type from the parameters you send.

Endpoint
GET / or POST /

Parameters

Parameter Type Required Description
api_key string Yes Your API key
phone string No* Phone number (requires search:phone scope)
email string No* Email address (requires search:email scope)
domain string No* Domain name (requires search:domain scope)
company string No* Company name (uses search:domain scope; priced like domain search)
country string No Optional country filter for company search (e.g. Germany)
house_value boolean No Include property value estimates (+$0.0005)
extra_info boolean No Include additional enriched data (+$0.0020)
carrier_info boolean No Include carrier information (+$0.0005)
tlo_enrichment boolean No Include TLO enrichment when name + city + state are available. See TLO Enrichment.
recovery_check boolean No Email searches only — verify phones via recovery modules. See Phone Recovery Verification.
skip_cache boolean No Bypass cached enrichment / carrier results where supported
action string No person_report or verify_identity to reshape the response (see Person Report & Verify)

* Provide exactly one primary lookup: phone, email, domain, or company.

Example Request

curl "https://search-api.dev/?api_key=YOUR_KEY&phone=%2B11234567890&extra_info=true"

Response Example

{
  "found": true,
  "data": {
    "name": "John Doe",
    "dob": "1980-01-01",
    "age": 44,
    "numbers": [{"number": "+1234567890", "carrier_name": "Verizon Wireless"}],
    "emails": ["[email protected]"],
    "addresses": ["123 Main St, New York, NY 10001"]
  },
  "_pricing": {
    "base_cost": 0.0025,
    "total_cost": 0.0045  }
}

Phone Search

Search for person details using a phone number. Supports enrichment with property values, carrier info, and extra data.

Parameters

Parameter Type Required Description
phone string Yes Phone number (e.g. 1234567890 or +1234567890)
house_value boolean No Set to 1 to include Zestimates and property details.
extra_info boolean No Set to 1 to include additional data points.
carrier_info boolean No Set to 1 to include carrier network information.
tlo_enrichment boolean No Set to 1 to include TLO (Telecommunications Lookup) enrichment data. Only charged if enrichment is attempted (requires first name, last name, city, and state).
Required Scope
search:phone

Email Search

Search for person details using an email address.

Parameters

Parameter Type Required Description
email string Yes Email address to search.
house_value boolean No Set to 1 to include Zestimates.
extra_info boolean No Set to 1 to include additional data.
carrier_info boolean No Set to 1 to include carrier network information.
tlo_enrichment boolean No Set to 1 to include TLO (Telecommunications Lookup) enrichment data. Only charged if enrichment is attempted (requires first name, last name, city, and state). See TLO Enrichment section for details.
recovery_check boolean No Enable Phone Recovery Verification to verify phone numbers associated with email addresses. See Phone Recovery Verification section for details.
Required Scope
search:email

TLO Enrichment

TLO (Telecommunications Lookup) Enrichment provides comprehensive person data enrichment by matching your search results with additional information from InstantCheckmate. This includes historical data, related persons, criminal records, confirmed phone numbers, and more.

Requirements

TLO enrichment requires the following information to be available from your search results:

  • First Name - Required
  • Last Name - Required
  • City - Required
  • State - Required
  • Middle Name - Optional (helps narrow down results)

Note: TLO enrichment is only charged if an enrichment request can be made (all required fields are present). If the required fields are missing, the parameter is ignored and no charge is applied.

What TLO Enrichment Provides

Enhanced Data Fields

  • Confirmed Phone Numbers - Phone numbers from your dataset that match censored numbers from TLO, with full details (line type, carrier, dates, spam reports)
  • Phone Numbers Full - Complete phone number data including censored numbers (with X or *), line types, carriers, first seen dates, and spam reports
  • All Names - Historical name variations with first seen/last seen dates
  • All DOBs - All known dates of birth with age calculations and date ranges
  • Related Persons - Family members and associates with relationship types (spouse, parent, child, sibling, in-law, relative) and sub-types (e.g., "Spouse Widowed", "Parent")
  • Criminal Records - Court records including case numbers, crime types, counties, offense codes, and charge dates
  • Addresses Structured - Complete structured address data with county information, filling in missing components where possible
  • Alternative Names - Additional name variations found in TLO data

Data Matching & Quality

TLO enrichment uses intelligent matching to ensure data accuracy:

  • Match Scoring - Uses name, phone, address, and DOB matching with configurable weights
  • Minimum Match Score - Only returns data when match confidence is ≥ 50%
  • Definite Match - When exact name + last 4 phone digits match, prioritizes your dataset's DOB
  • Data Merging - Intelligently merges TLO data with existing data, preserving all original information (carrier info, zestimate, etc.)
  • DOB Filtering - Automatically filters out DOBs that are inconsistent with the primary DOB (age difference > 10 years)

Response Example

{
  "email": "[email protected]",
  "name": "John Doe",
  "dob": "1980-01-01",
  "age": 44,
  "numbers": ["+1234567890", "XXXXXX1234"],
  "confirmed_numbers": ["+1234567890"],
  "phone_numbers_full": [
    {
      "number": "+1234567890",
      "line_type": "Mobile",
      "carrier": "VERIZON WIRELESS",
      "date_first_seen": {"date": {"month": 1, "day": 15, "year": 2010}},
      "is_spam_report": false
    },
    {
      "number": "XXXXXX1234",
      "line_type": "Landline",
      "carrier": "AT&T",
      "date_first_seen": {"date": {"month": 3, "day": 20, "year": 2005}},
      "is_spam_report": false
    }
  ],
  "all_names": [
    {"name": "John Doe"},
    {
      "name": "John Michael Doe",
      "first": "John",
      "middle": "Michael",
      "last": "Doe",
      "date_first_seen": {"date": {"month": 6, "day": 1, "year": 2008}},
      "date_last_seen": {"date": {"month": 12, "day": 31, "year": 2024}}
    }
  ],
  "all_dobs": [
    {
      "dob": "1980-01-01",
      "age": 44,
      "date": {"month": 1, "day": 1, "year": 1980}
    }
  ],
  "related_persons": [
    {
      "name": "Jane Doe",
      "dob": "1982-05-15",
      "age": 42,
      "relationship": "Spouse",
      "sub_type": "Spouse",
      "addresses": ["123 Main St, New York, NY 10001"]
    }
  ],
  "criminal_records": [
    {
      "source_name": "NEW YORK COUNTY COURT",
      "source_state": "NY",
      "case_numbers": ["12345"],
      "crimes": [
        {
          "case_number": "12345",
          "crime_type": "Traffic",
          "crime_county": "New York",
          "offense_code": "SPEEDING",
          "charges_filed_date": "2015-06-10"
        }
      ]
    }
  ],
  "_pricing": {
    "search_cost": 0.0025,
    "tlo_enrichment_cost": 0.0030,
    "total_cost": 0.0055  }
}

Usage

Example Request
curl "https://search-api.dev/[email protected]&tlo_enrichment=1"

💡 Tips

  • • TLO enrichment works best when you have complete name and location information
  • • The system automatically tries multiple address variations if the first attempt doesn't yield a good match
  • • Alternative names from your search results are also used for matching
  • • All TLO data is merged with your existing data - nothing is replaced, only enhanced
  • • Censored phone numbers (with X or *) are marked as "TLO Enriched" in responses
  • • Confirmed numbers (matching your dataset) are marked as "SearchAPI + TLO"

Phone Recovery Verification

Phone Recovery Verification verifies phone numbers associated with email addresses by checking various email provider recovery systems. This feature is only available for email searches and helps confirm if a phone number is linked to an email account.

📧 Email Search Only

Phone Recovery Verification is exclusively available for email searches. The recovery_check parameter is ignored for phone and domain searches.

Enabling Recovery Verification

To enable Phone Recovery Verification for an email search, simply add the recovery_check parameter to your request:

Basic Usage:

[email protected]&recovery_check=1

When enabled, phone numbers are automatically extracted from the email search results and verified against the email provider's recovery systems. You don't need to provide phone numbers manually.

Module Order Configuration

You can optionally specify which recovery modules to run and in what order for a specific request. If not specified, the system will automatically use the module order saved in your profile settings.

Specifying Module Order:

You can pass a recovery_modules parameter with the following structure:

recovery_modules[module_order][]=yahoo&recovery_modules[module_order][]=outlook&recovery_modules[module_order][]=icloud
recovery_modules[enabled_modules][]=yahoo&recovery_modules[enabled_modules][]=outlook

Or as JSON in the request body:

{
  "recovery_modules": {
    "module_order": ["yahoo", "outlook", "icloud"],
    "enabled_modules": ["yahoo", "outlook"]
  }
}

✅ Automatic Profile Settings

If you don't specify recovery_modules in your request, the system will automatically use the module order and enabled modules configured in your profile settings. You can configure these settings in the dashboard under Recovery Settings.

Parameters

Parameter Type Required Description
email string Yes Email address to search (required for recovery check)
recovery_check boolean No Enable Phone Recovery Verification. Set to 1 or true to verify phone numbers associated with the email address.
recovery_modules object No Optional configuration object with module_order (array of module names in execution order) and enabled_modules (array of enabled module names). If not provided, uses your profile settings.

How It Works

Phone Recovery Verification works by:

  1. Performing the email search and extracting phone numbers from the search results automatically
  2. Processing the email address through multiple email provider recovery systems (iCloud, Outlook, Yahoo, AOL, Xfinity/Comcast, GMX/Mail.com, DoorDash, etc.) in the specified order
  3. Each provider module checks if the email account has a recovery phone number registered
  4. If a recovery phone number is found, it's compared against the phone numbers extracted from the search results
  5. Processing stops on the first successful match, or continues through all enabled modules if no match is found
  6. Only modules that support the email domain are executed (e.g., Yahoo module only runs for yahoo.com emails)

Supported Email Providers

  • • iCloud (all domains)
  • • Outlook/Microsoft (all domains)
  • • Yahoo (yahoo.com and subdomains)
  • • AOL (aol.com and subdomains)
  • • Xfinity/Comcast (comcast.com, xfinity.com)
  • • GMX/Mail.com (mail.com, gmx.com, etc.)
  • • DoorDash (all domains)

Pricing

Phone Recovery Verification is charged per module executed. Each module has its own pricing:

  • Doordash: $0.0030
  • Gmxmail: $0.0050
  • Icloud: $0.0040
  • Outlook: $0.0030
  • Uber: $0.0030
  • Xfinitycomcast: $0.0030
  • Yahoo: $0.0060
  • Aol: $0.0060

Important: You are only charged for modules that are actually executed. Modules that don't support the email domain are automatically skipped and not charged.

Example Requests

Basic Request (uses profile settings):

Example Request - Basic
curl "https://search-api.dev/[email protected]&recovery_check=1"

Request with Custom Module Order:

Example Request - Custom Module Order
curl "https://search-api.dev/[email protected]&recovery_check=1&recovery_modules[module_order][]=yahoo&recovery_modules[module_order][]=outlook&recovery_modules[enabled_modules][]=yahoo&recovery_modules[enabled_modules][]=outlook"

Response Example

{
  "found": true,
  "data": {
    "name": "John Doe",
    "email": "[email protected]",
    "numbers": ["+1234567890"]
  },
  "recovery_check": {
    "matched": true,
    "matched_number": "+1234567890",
    "matched_module": "yahoo",
    "modules_used": ["yahoo", "icloud", "outlook"],
    "cost": 0.003
  },
  "_pricing": {
    "base_cost": 0.0025,
    "recovery_check": 0.003,
    "total_cost": 0.0055  }
}

Response Fields

Field Type Description
recovery_check.matched boolean Whether a phone number match was found
recovery_check.matched_number string The phone number that matched (if found)
recovery_check.matched_module string The email provider module that found the match (e.g., "yahoo", "icloud")
recovery_check.modules_used array List of modules that were executed (only executed modules are charged)
recovery_check.cost float Total cost for Phone Recovery Verification (sum of executed modules)

⚠️ Important Notes

  • • Phone numbers are automatically extracted from email search results - you don't need to provide them
  • • Processing stops on the first successful match to minimize costs
  • • Modules that don't support the email domain are automatically skipped
  • • You are only charged for modules that are actually executed
  • • If a timeout occurs, you're only charged for modules that completed before the timeout
  • • Module order and enabled modules are automatically loaded from your profile settings if not specified in the request
  • • Configure your default module order in the dashboard Recovery Settings for consistent behavior across requests
  • • Results are cached for 24 hours to prevent duplicate charges for the same email+phone combination

💡 Best Practices

  • • Configure your default module order in dashboard Recovery Settings to prioritize faster/cheaper modules
  • • Disable modules that don't apply to your use case in your profile settings to reduce costs
  • • Use the recovery_modules parameter only when you need to override your profile settings for specific requests
  • • Monitor usage through the dashboard to track Phone Recovery Verification costs
  • • The system automatically uses phone numbers from search results, so ensure your email searches return phone number data
Required Scope
search:email

Standalone recovery check

If you already have an email and phone list, call recovery without a full person search:

Endpoint
GET or POST /?action=recovery-check
Parameter Type Required Description
email string Yes Email to check
numbers array or CSV string Yes Candidate phone numbers to match against recovery systems
curl -X POST "https://search-api.dev/?api_key=YOUR_KEY&action=recovery-check" \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]","numbers":["+11234567890"]}'

List recovery modules

Endpoint
GET /?action=get_recovery_modules&api_key=YOUR_KEY

Returns available modules and current per-module pricing.


Domain Search

Search for contacts associated with a domain name. Priced at the domain search rate ($4.0000).

Parameters

Parameter Type Required Description
domain string Yes Domain name (e.g. example.com).
Required Scope
search:domain
Example
curl "https://search-api.dev/?api_key=YOUR_KEY&domain=example.com"

Company Search

Find people associated with a company name. Same price and similar result shape as domain search ($4.0000). Overly broad terms (e.g. generic words like “company”) are rejected.

Parameter Type Required Description
company string Yes Company name to search
country string No Restrict matches to addresses in this country
page integer No Page number (default 1)
limit integer No Results per page (default 100)
Required Scope
search:domain
Example
curl "https://search-api.dev/?api_key=YOUR_KEY&company=Acme%20Corp&country=United%20States"

Carrier Lookup

Look up carrier / line data for a phone number without running a full person search. Charged at the carrier rate ($0.0005) when a successful lookup is returned.

Endpoint
GET /?action=carrier_lookup or POST /?action=carrier_lookup
Parameter Type Required Description
api_key string Yes Your API key
action string Yes Must be carrier_lookup
phone string Yes Phone number (at least 10 digits)
skip_cache boolean No Force a fresh carrier lookup
Example
curl "https://search-api.dev/?api_key=YOUR_KEY&action=carrier_lookup&phone=%2B11234567890"
Example Response
{
  "success": true,
  "data": { "carrier_name": "Verizon Wireless", "line_type": "Mobile" },
  "cost": 0.0005}

Person Report & Identity Verify

Run a normal search and optionally reshape the response with action.

Person report

Add action=person_report with your usual email / phone / domain / company lookup. The search runs as usual, then the payload is normalized into a person-report structure.

curl "https://search-api.dev/[email protected]&action=person_report"

Verify identity

Add action=verify_identity. Include name (and your lookup field) to receive a verification-oriented response comparing the search hit to the provided identity fields.

curl "https://search-api.dev/[email protected]&name=John%20Doe&action=verify_identity"

Batch API

Run up to 100 searches in one request. Send a JSON array as the request body. Each item is billed like an individual search (email/phone base + add-ons, or domain/company rate).

Endpoint
POST /?action=batch&api_key=YOUR_KEY
Example Body
[
  { "email": "[email protected]", "extra_info": true },
  { "phone": "+11234567890", "carrier_info": true },
  { "domain": "example.com" },
  { "company": "Acme Corp", "country": "United States" }
]
Example Request
curl -X POST "https://search-api.dev/?api_key=YOUR_KEY&action=batch" \
  -H "Content-Type: application/json" \
  -d '[{"email":"[email protected]"},{"phone":"+11234567890"}]'

Balance is checked against the estimated batch cost before processing. Max batch size: 100.


Billing & Balance

Get Account Balance

Endpoint
GET /?action=get_balance
Parameter Type Required Description
api_key string Yes Your API key
action string Yes Must be get_balance
Required Scope
billing:view
Example Request
curl "https://search-api.dev/?api_key=YOUR_KEY&action=get_balance"
Example Response
{
  "balance": 123.45
}

Organization Controls

Manage organization-wide API consumption by capping how much balance any individual API key can spend. These endpoints are only available to organization API keys with one of the following scopes: api:usage, api:* , api.manage, api:create, or billing:manage.

Organization-capable endpoints:

Update API Key Usage & Limits

Endpoint
POST /?action=update_api_key_usage
Parameter Type Required Description
api_key string Yes Organization API key performing the update.
target_api_key string Yes API key whose usage/limit should be updated. Must belong to the same organization.
max_usage decimal No Maximum dollars this API key can spend. Send null or leave blank to remove the cap.
usage decimal No Override the tracked balance consumption for the API key (useful when reconciling external usage systems).

At least one of usage or max_usage must be provided. If a max usage is configured, searches will be blocked once the tracked usage reaches the cap. Set usage to 0 to reset a key after reconciliation.

Example Request
curl -X POST "https://search-api.dev/?api_key=ORG_MASTER_KEY&action=update_api_key_usage" \
  -H "Content-Type: application/json" \
  -d '{
    "target_api_key": "TEAM_MEMBERS_KEY",
    "max_usage": 25,
    "usage": 12.5
}'
Example Response
{
  "success": true,
  "target_api_key": "TEAM_MEM...",
  "balance_usage": 12.5,
  "max_balance_usage": 25
}

Analytics & Usage

Get Usage Statistics

Endpoint
GET /?action=get_usage_stats
Parameter Type Required Description
api_key string Yes Your API key
action string Yes Must be get_usage_stats
Example
curl "https://search-api.dev/?api_key=YOUR_KEY&action=get_usage_stats"
Example Response
{
  "usage_stats": {
    "today": { "searches": 12, "cost": 0.03 },
    "total": { "searches": 1500, "cost": 3.75 }
  }
}

Get Access Logs

Endpoint
GET /?action=get_access_logs
Parameter Type Required Description
limit integer No Number of logs (default: 100, max: 1000)
curl "https://search-api.dev/?api_key=YOUR_KEY&action=get_access_logs&limit=50"

Get Cache Statistics

Endpoint
GET /?action=cache_stats

Returns cache-related statistics for the account/key.

Refresh Balance Cache

Endpoint
GET /?action=refresh_balance_cache

Forces a refresh of the cached balance reading for the API key.



Pricing

Email / Phone Search

$0.0025

Per search

Domain / company search: $4.0000

Standalone carrier lookup: $0.0005

Enrichment Add-ons

  • Extra Info: +$0.0020
  • Zestimate: +$0.0005
  • Carrier Info (on search): +$0.0005
  • TLO Enrichment: +$0.0030
  • Phone Recovery Verification: Variable*

* Phone Recovery Verification pricing varies by module ($0.001 - $0.003 per module). You are only charged for modules that are actually executed. See Phone Recovery Verification section for details.

Note: Failed searches (e.g., insufficient balance, invalid input) are logged but not billed.


API Scopes

API keys can be restricted to specific scopes for security. Available scopes:

Search Scopes

  • search:phone - Phone number searches
  • search:email - Email address searches
  • search:domain - Domain and company searches
  • search:bulk - Bulk search operations
  • search:* - All search operations

Empty scopes on a key mean unrestricted (backward compatible). Dot forms like search.email are also accepted.

API Management Scopes

  • api:view - View API keys
  • api:create - Create API keys
  • api:revoke - Revoke/delete API keys
  • api:* - Full API key management

Billing Scopes

  • billing:view - View billing information
  • billing:manage - Create and manage payments
  • billing:* - Full billing access

Analytics Scopes

  • analytics:basic - Basic analytics (usage stats, access logs)
  • analytics:advanced - Advanced analytics (cache stats, exports)
  • analytics:* - Full analytics access

Error Codes

Code Description
200 Success
400 Bad Request - Invalid parameters
401 Unauthorized - Invalid or missing API key
402 Payment Required - Insufficient balance
403 Forbidden - Insufficient permissions/scope
404 Not Found - Resource not found
429 Too Many Requests - Per-key rate limit exceeded
500 Internal Server Error
502 Upstream failure (e.g. carrier lookup returned no result)

Error Response Format

{
  "error": "Error message",
  "message": "Detailed error description",
  "required_permission": "search.phone"  // For 403 errors
}