LineVerifier API

SMS verification as an API. Register, get a key, add credits, order numbers, receive codes. All over HTTPS with JSON.

Authentication

All endpoints except /auth/* require an API key. Pass it as a header:

x-api-key: lv_your_api_key

# or
Authorization: Bearer lv_your_api_key

Keys start with lv_ and are 67 characters long. Keep them secret.

Quick Start

# 1. Register
curl -X POST https://lineverifier.com/api/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","password":"secure_pass_123"}'

# Response: { "success": true, "api_key": "lv_abc123...", "email": "you@example.com" }

# 2. Buy credits (opens Stripe checkout)
curl -X POST https://lineverifier.com/api/v1/checkout \
  -H "x-api-key: lv_abc123..." \
  -H "Content-Type: application/json" \
  -d '{"type":"credits","amount_cents":10000}'

# 3. Order a number
curl -X POST https://lineverifier.com/api/v1/order \
  -H "x-api-key: lv_abc123..." \
  -H "Content-Type: application/json" \
  -d '{"service_id":1,"country_id":1}'

# 4. Poll for code
curl https://lineverifier.com/api/v1/check?order_id=YOUR_ORDER_ID \
  -H "x-api-key: lv_abc123..."

Pricing

One-Time$10/sms

Single verification per line. Buy credit packs: $50 / $100 / $250 / $500.

Yearly$35/line/year

12-month access. Reuse numbers all year. Credits purchased separately.

Error Codes

StatusMeaning
200Success
400Bad request — missing or invalid parameters
401No API key provided
402Insufficient balance
403Invalid API key
409Email already registered
500Server error

All errors return { "success": false, "error": "..." }

Endpoint Reference

POST/api/v1/auth/register

Create a new developer account. Returns your API key once.

Request body

{
  "email": "you@example.com",
  "password": "min_8_chars"
}

Response

{
  "success": true,
  "api_key": "lv_a1b2c3d4...",
  "email": "you@example.com",
  "balance_cents": 0,
  "plan": "credits"
}
POST/api/v1/auth/login

Sign in. Returns your existing API key and account info.

Request body

{
  "email": "you@example.com",
  "password": "your_password"
}

Response

{
  "success": true,
  "api_key": "lv_a1b2c3d4...",
  "email": "you@example.com",
  "balance_cents": 10000,
  "plan": "credits",
  "total_api_calls": 42
}
GET/api/v1/balance

Current balance and usage stats.

Response

{
  "success": true,
  "balance_cents": 10000,
  "balance_usd": "100.00",
  "cost_per_sms_cents": 1000,
  "estimated_sms_remaining": 10,
  "total_api_calls": 42,
  "total_spent_cents": 420000
}
GET/api/v1/services

List all available platforms for SMS verification.

Response

{
  "success": true,
  "services": [
    { "id": 1, "name": "WhatsApp", "category": "messaging" },
    { "id": 2, "name": "Telegram", "category": "messaging" },
    ...
  ]
}
GET/api/v1/countries

Countries available for a given service, with stock and success rates.

Query params

service_id  (required)  Service ID from /services

Response

{
  "success": true,
  "countries": [
    { "id": 1, "name": "United States", "short_name": "US", "success_rate": "92", "stock": 847 },
    ...
  ]
}
POST/api/v1/order

Order a phone number. You are only charged when the verification code is received. Returns the number and an order ID to poll with.

Request body

{
  "service_id": 1,
  "country_id": 1
}

Response

{
  "success": true,
  "order_id": "ABC12345",
  "phone_number": "+12025551234",
  "country": "United States",
  "service": "WhatsApp",
  "expires_in": 1200,
  "cost_cents": 1000,
  "balance_cents": 10000
}
GET/api/v1/check

Poll for the SMS code. Call every 5s until status is "received" or "expired".

Query params

order_id  (required)  The order_id from /order response

Response

// Waiting
{ "success": true, "order_id": "...", "status": "waiting", "sms_code": null }

// Received
{ "success": true, "order_id": "...", "status": "received", "sms_code": "482916", "full_sms": "Your code is 482916" }

// Expired
{ "success": true, "order_id": "...", "status": "expired", "sms_code": null }
POST/api/v1/cancel

Cancel an active order before the code arrives.

Request body

{ "order_id": "ABC12345" }

Response

{ "success": true, "order_id": "...", "message": "Order cancelled" }
GET/api/v1/history

Transaction ledger: credits, debits, refunds.

Query params

limit  (optional, default 50, max 100)

Response

{
  "success": true,
  "transactions": [
    {
      "id": "uuid",
      "type": "debit",
      "amount_cents": 1000,
      "balance_after_cents": 9000,
      "description": "SMS order: service 1, country 1",
      "api_order_id": "...",
      "created_at": "2026-03-04T..."
    },
    ...
  ]
}

Base URL

https://lineverifier.com/api/v1

All requests and responses are JSON. Base URL applies to all endpoints above.