OC Online Checkers

API documentation

Programmatic access to every check available in the web panel.

Quick start

Every request must carry an API key in the X-API-Key header. Create and revoke keys from your API keys page. A key is shown once at creation and stored only as a hash, so keep a copy somewhere safe.

curl -X POST http://checkers.send99.com/api/v1/check \
  -H "X-API-Key: oc_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"service_type":"ws","identifier":"+14155552671"}'

Base URL: http://checkers.send99.com/api/v1

Find a service

Every enabled service with its identifier type, price, and a link to an example response. Click a service type to jump to its shape.

TypeNameIdentifierResponse extrasPrice
Phone number
ws WhatsApp phone $0.0080
ws_avatar WhatsApp Avatar phone avatar, avatar_url $0.0160
ws_business WhatsApp Business phone business $0.0160
telegram Telegram phone $0.0120
viber Viber phone $0.0120
zalo Zalo phone $0.0120
facebook Facebook phone $0.0080
instagram Instagram phone $0.0060
threads Threads phone $0.0080
twitter Twitter / X phone $0.0080
vk VK phone $0.0100
amazon Amazon phone $0.0100
apple Apple ID phone $0.0100
microsoft Microsoft phone $0.0060
shopee Shopee phone $0.0100
band BAND phone $0.0100
goto GoTo / Gojek phone $0.0120
hh HeadHunter phone $0.0100
indiatimes IndiaTimes phone $0.0100
carrier Carrier Lookup phone carrier, number_type, country_code, region, city $0.0040
Email address
amazon_email Amazon (Email) email $0.0100
facebook_email Facebook (Email) email $0.0100
instagram_email Instagram (Email) email $0.0080
apple_email Apple ID (Email) email $0.0100
spotify_email Spotify (Email) email $0.0100
gmail_avatar Gmail Avatar email $0.0060
yandex_avatar Yandex Avatar email $0.0060
mailru_avatar Mail.ru Avatar email $0.0060
yahoo Yahoo email $0.0060
outlook Outlook email $0.0060
Phone or email
netflix Netflix both $0.0120

Run a check

POST /api/v1/check

Request body

FieldRequiredDescription
service_type Yes One of the service types listed above.
identifier Yes Phone number in E.164 format, or an email address.
default_country No ISO-2 country code used to interpret national-format numbers.

Response — core fields (every service)

FieldTypeDescription
idstringCheck UUID. Use it to retrieve the result later.
servicestringThe service_type that was checked.
identifierstringThe normalised identifier that was checked.
identifier_typestringphone or email.
statusstringcompleted — result determined, credit charged; refunded — provider could not determine a result, credit refunded; failed — lookup error, credit refunded (reported with success: false); running/pending — still settling, re-fetch in a moment.
registeredbool|nullWhether the identifier is registered. null when the result could not be determined (and you were not charged).
charged_usdnumberAmount charged for this check. 0 unless status is completed.
billedbooltrue when credit was charged.
checked_atstringWhen the check completed (ISO 8601). Present on every service.

Idempotency

Send an Idempotency-Key header to make a retry safe. A repeated request with the same key returns the original result instead of charging again.

Response shapes by service

All services return the core fields. Some services add extra fields on top — the exact set depends on the service.

Core response

Same response format for all of these services: ws, telegram, viber, zalo, facebook, instagram, threads, twitter, vk, amazon, apple, microsoft, shopee, band, goto, hh, indiatimes, netflix, amazon_email, facebook_email, instagram_email, apple_email, spotify_email

{
  "success": true,
  "data": {
    "id": "3f2a8c1e5b7d9f0a2c4e6b8d",
    "service": "ws",
    "identifier": "+14155552671",
    "identifier_type": "phone",
    "status": "completed",
    "registered": true,
    "charged_usd": 0.008,
    "billed": true,
    "checked_at": "2026-01-01T12:00:00.000Z"
  }
}

WhatsApp avatar

Applies to: ws_avatar

{
  "success": true,
  "data": {
    "id": "3f2a8c1e5b7d9f0a2c4e6b8d",
    "service": "ws_avatar",
    "identifier": "+14155552671",
    "identifier_type": "phone",
    "status": "completed",
    "registered": true,
    "avatar": true,
    "avatar_url": "https://pps.whatsapp.net/v/t61.24294-10/461253982_884839163784403557_n.jpg",
    "charged_usd": 0.016,
    "billed": true,
    "checked_at": "2026-01-01T12:00:00.000Z"
  }
}

avatar_url is a direct link to the profile photo — load it in an <img> tag to display the image. It is an empty string when the account has no photo; use avatar to tell the two cases apart.

WhatsApp business

Applies to: ws_business

{
  "success": true,
  "data": {
    "id": "3f2a8c1e5b7d9f0a2c4e6b8d",
    "service": "ws_business",
    "identifier": "+14155552671",
    "identifier_type": "phone",
    "status": "completed",
    "registered": true,
    "business": true,
    "charged_usd": 0.016,
    "billed": true,
    "checked_at": "2026-01-01T12:00:00.000Z"
  }
}

Carrier lookup

Applies to: carrier

{
  "success": true,
  "data": {
    "id": "3f2a8c1e5b7d9f0a2c4e6b8d",
    "service": "carrier",
    "identifier": "+14155552671",
    "identifier_type": "phone",
    "status": "completed",
    "registered": true,
    "carrier": "Vivo",
    "number_type": "Mobile",
    "country_code": "BR",
    "region": "Sao Paulo",
    "city": "Sao Paulo",
    "charged_usd": 0.004,
    "billed": true,
    "checked_at": "2026-01-01T12:00:00.000Z"
  }
}

For this service registered means the number has an active carrier allocation. city may be empty depending on the country's numbering data.

Undocumented email services

Applies to: gmail_avatar, yandex_avatar, mailru_avatar, yahoo, outlook

{
  "success": true,
  "data": {
    "id": "3f2a8c1e5b7d9f0a2c4e6b8d",
    "service": "gmail_avatar",
    "identifier": "name@example.com",
    "identifier_type": "email",
    "status": "completed",
    "registered": true,
    "charged_usd": 0.006,
    "billed": true,
    "checked_at": "2026-01-01T12:00:00.000Z"
  }
}

These services have no published schema. Any additional field the provider returns is passed through as-is — for the *_avatar services this is typically avatar and avatar_url (a direct image link, empty string when there is none). Parse defensively and treat unknown fields as optional.

Other endpoints

MethodPathDescription
GET/api/v1/balanceYour current credit balance.
GET/api/v1/servicesEnabled services and their prices.
GET/api/v1/check/:idRetrieve a previous check.
GET/api/v1/batches/:idBulk job status and progress.
GET/api/v1/batches/:id/resultsPaginated bulk results.

Errors

Errors return success: false with a human-readable message.

StatusMeaning
400Malformed request or unknown service type.
401Missing or invalid API key.
402Insufficient credit balance.
403Account suspended.
429Rate limit exceeded.

A lookup that runs but cannot be resolved returns HTTP 200 with success: false — the request was valid, and your credit is refunded automatically.