Enrich Up to 1,000,000 Numbers.
Sync lookups for up to 1,000 numbers return immediately. Async jobs handle up to 1,000,000 — backed by a 251M-row NPAC database with a covering index. CSV and JSONL output with row-level ID passthrough.
curl -X POST api.sipsmart.io/api/user/lrn/bulk/jobs \ -H "Idempotency-Key: $(uuidgen)" \ --data '{"items": [...]}' ✓ job_id: "a3f8d1b6-..."✓ 250,000 numbers queuedMeasured Throughput
All queries use idx_lrn_enrichment — a covering index on our 251M-row LRN table. MySQL reads the index only; no row fetches.
| Numbers | Typical Time | Method |
|---|---|---|
| 10,000 | ~1–2 seconds | Sync or Async |
| 100,000 | ~10–15 seconds | Async job |
| 1,000,000 | typical: minutes | Async job |
Infrastructure-Grade
Built for Every Scale
From single-number lookups to million-row batch jobs — one API, two modes.
Sync Lookup — Up to 1,000 Numbers
POST up to 1,000 phone numbers and get enriched results back immediately — no polling, no job ID. Ideal for real-time list previews, form validation, and small batches.
Async Jobs — Up to 1,000,000 Numbers
Submit a job with up to 1 million numbers. The API returns a job ID immediately; poll for status as processing completes. Typical 1M-number jobs complete in minutes.
251M-Row Covering Index
Every query hits a covering index on our 251M-row LRN database — MySQL reads only the index, no row fetches. At ~1M index rows/sec for joins, 10k numbers takes 1–2 seconds.
CSV + JSONL Output
Async jobs produce both a CSV and a JSONL result file, available via pre-signed S3 URLs for 7 days. Each row includes your original row ID for lossless reconciliation.
Row-Level ID Passthrough
Send items with your own row IDs (e.g. CRM record IDs). IDs are echoed in every result row and in both output files — join directly back to your source data without painful reconciliation.
Idempotent Job Submission
Pass an Idempotency-Key header to prevent duplicate jobs on retry. Same key + same account within 24 hours returns the original job — safe to retry on network failure.
Developer-First
Sync Bulk — Instant Results for Small Batches
Request
// Sync: up to 1,000 numbers → immediate results
POST /api/user/lrn/bulk
Authorization: Bearer <token>
{
"items": [
{ "id": "row-001", "tn": "+13234473116" },
{ "id": "row-002", "tn": "+12125551234" }
]
}Response — <10ms
{
"total": 2,
"found": 2,
"results": [
{
"id": "row-001",
"number": "+13234473116",
"lrn": "6267570000",
"is_ported": true,
"carrier_name": "T-Mobile US-SVR-10X/2",
"line_type": "C",
"state": "CA",
"lata": "730",
"ocn": "6529"
}
]
}Simple, Predictable Pricing
No Surprises. Ever.
We charge less than legacy providers and publish our prices openly. No setup fees, no hidden costs, no annual lock-in required.
- ✓ Real-time LRN dip
- ✓ Standard latency
- ✓ HTTPS API
- ✓ 1,000 free lookups
- ✓ Real-time + batch
- ✓ <10ms Ohio cluster
- ✓ Dedicated endpoint
- ✓ Priority SLA
- ✓ DB replication
- ✓ On-prem option
- ✓ SLA guarantee
- ✓ Dedicated support
🛡 Pricing Guarantee
We will match or beat any competitor's published price for equivalent LRN lookup volume. Contact us with a quote.
- Sync bulk is limited to 1,000 numbers per request and returns results immediately. For larger batches — up to 1,000,000 numbers — use the async job endpoint which returns a job ID and notifies you when results are ready to download.
- The API uses a covering index on our 251M-row LRN database, so MySQL reads only the index — no row fetches required. At ~1M index rows/sec for the join: 10,000 numbers typically completes in 1–2 seconds, 100,000 numbers in 10–15 seconds, and 1,000,000 numbers in a few minutes.
- Each enriched result includes: number (E.164), LRN (10-digit routing number), is_ported (boolean), carrier_name (serving carrier), line_type (C=Wireless, L=Landline, V=VoIP, P=Paging), state (2-letter), LATA, and OCN.
- Async jobs produce both a CSV file and a JSONL file. When a job completes, the polling response includes a
result_formatsobject with pre-signed S3 URLs for both formats, valid for 7 days. Download both or either — both include your original row IDs. - Passing an
Idempotency-Keyheader (any UUID) on job creation prevents duplicate jobs if your request is retried due to a network error. The same key + account within 24 hours returns the original job ID with anidempotentflag — no new job is created. - Pass
items[]in your request body instead of a plain numbers array. Each item has anidfield (your CRM row ID, list index, etc.) and atnfield (the phone number). Theidis echoed in every result row and in both CSV and JSONL output files. - Result file download URLs are pre-signed S3 URLs valid for 7 days after job completion. Download your files before they expire. The job history endpoint returns the 50 most recent jobs, including expired result URLs.
- Poll
GET /api/user/lrn/bulk/jobs/:id. The response includesstatus(queued, processing, done, failed),processedcount, andprogress_pct. When status isdone,result_formatscontains your CSV and JSONL download links. - Any common North American format is accepted: E.164 (+13234473116), 11-digit (13234473116), 10-digit (3234473116), or formatted ((323) 447-3116). Invalid or non-NANP numbers are silently skipped — only valid NANP numbers appear in results.
- Yes, the bulk enrichment API is part of the LRN API product. Activate your endpoint from the Subscriptions page, then use the Bulk Enrichment panel for sync and async lookups from within the portal, or call the API endpoints directly with your API token.
Enrich Your Number Lists with NPAC-Accurate LRN Data
Sync lookups and async batch jobs. CSV + JSONL output. Row-level ID passthrough. Start today.
1,000 free lookups included • No credit card required • Instant provisioning