LRN API – U.S. Local Routing Number Lookup
Fast and accurate LRN (Local Routing Number) lookup API with optional enhanced data and messaging provider details.
What is LRN?
The LRN (Local Routing Number) API provides fast routing number lookup for phone numbers. Perfect for high-volume applications that need routing information without additional data.
API Features
- Ultra-fast Performance: Optimized for high-volume processing
- Routing Information: Get LRN data for call routing
- Enhanced Data: Optional carrier and location details
- Messaging Integration: Optional messaging provider data
- High Availability: 99.9% uptime guarantee
Authentication
All API requests require authentication using your API key. Include your API key in the request headers:
Authorization: Bearer YOUR_API_KEY
Don't have an API key? Get your API key here.
API Methods
REST Endpoint
Request Body (Full Response)
{
"phone_number": "13364086644",
"include_enhanced_lrn": true,
"messaging_lookup": true
}
Request Body (LRN-Only Mode - Fastest)
{
"phone_number": "13364086644",
"lrn_only": true
}
Response
{
"lrn": "13364086644",
"lrn_activated_at": "2021-09-01T00:00:00+00:00",
"enhanced_lrn_data": {
"carrier": "Verizon",
"carrier_type": "WRS",
"city": "New York",
"zip_code": "10001",
"county": "New York",
"timezone": "-0500",
"state": "NY",
"rate_center": "NYC",
"lata": "132",
"ocn": "921"
},
"messaging": {
"provider": "Verizon Wireless",
"enabled": true,
"country": "US",
"country_code": "1",
"reference_id": "MSG-abc123"
}
}
Bulk LRN Lookup
Process up to 1000 phone numbers in a single request with automatic deduplication and two-phase billing.
Request Body
{
"phone_numbers": ["13364086644", "19494600638", "13364086644"],
"include_enhanced": true,
"include_messaging": false
}
Response
{
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"results": [
{
"phone_number": "13364086644",
"e164_phone": "+13364086644",
"lrn": "13364086644",
"input_indices": [0, 2],
"status": "success",
"enhanced_lrn": { ... }
},
{
"phone_number": "19494600638",
"e164_phone": "+19494600638",
"lrn": "19494600638",
"input_indices": [1],
"status": "success",
"enhanced_lrn": { ... }
}
],
"summary": {
"submitted": 3,
"unique": 2,
"duplicates_removed": 1,
"succeeded": 2,
"failed": 0,
"from_cache": 0,
"invalid_count": 0,
"breakdown": {
"success": 2,
"failed": 0,
"invalid_format": 0
}
},
"billing": {
"estimated_cost": 0.02,
"actual_cost": 0.02,
"savings_from_deduplication": 0.01,
"per_lookup_rate": 0.01
},
"timing": {
"submitted_at": "2025-12-20T10:30:00Z",
"started_at": "2025-12-20T10:30:00Z",
"completed_at": "2025-12-20T10:30:01Z",
"duration_ms": 1234
}
}
Key Features
- Automatic Deduplication: Duplicate phone numbers are detected and only charged once. The
input_indicesfield shows which positions in your input array map to each result. - Two-Phase Billing: Balance is reserved before processing and settled after completion. Failed lookups are not charged.
- Full Transparency: Response includes detailed summary, billing breakdown, and timing information.
- Job Tracking: Each bulk request gets a unique
job_idfor audit and support purposes.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
phone_number / phoneNumber |
string | Yes | The phone number to lookup (11-digit US number) |
include_enhanced_lrn / includeEnhancedLrn |
boolean | No | Include enhanced LRN data (default: false) |
messaging_lookup / includeMessaging |
boolean | No | Include messaging provider data (default: false) |
include_cnam / includeCnam |
boolean | No | Include CNAM (Caller ID Name) data in the response (default: false). Additional charge applies. |
include_trust / includeTrust |
boolean | No | Include trust/reputation data with reputation_score and trust_level in the response (default: false). Additional charge applies. |
lrn_only |
boolean | No | Ultra-fast mode: returns only phone_number and lrn, skips caching for fastest response (default: false) |
Response Format
⭐ Exclusive: the lrn_activated_at field
Most lookup APIs tell you a number's current carrier. We also tell you when it last ported there. Every phone number is born on an original carrier; when it's ported, the lrn_activated_at timestamp records the date of that most recent port.
Example: a number issued by CenturyLink (Lumen) that the subscriber later ports to AT&T Wireless returns carrier: "AT&T Wireless" with an lrn_activated_at of the port date. A number that has never left its original carrier returns no lrn_activated_at (or its original activation date).
This is the strongest signal for SIM-swap / account-takeover detection (a port in the last 30 days warrants step-up auth), number-reassignment checks, and carrier-tenure trust scoring. Included free with every LRN lookup — no extra call, no extra charge. See the LRN Activation Date feature page.
Note: The lrn_activated_at field is optional and may not be present if the activation date is unavailable (e.g., a number that has never been ported, or where the carrier does not expose the date).
LRN-Only Mode (Fastest)
When lrn_only=true, the API returns only the LRN for maximum performance:
{
"lrn": "13364086644"
}
Standard LRN Lookup
{
"lrn": "13364086644",
"phone_number": "13364086644",
"lrn_activated_at": "2021-09-01T00:00:00+00:00"
}
Standard LRN Lookup (when activation date unavailable)
{
"lrn": "13364086644",
"phone_number": "13364086644"
}
Enhanced LRN Lookup
{
"lrn": "13364086644",
"phone_number": "13364086644",
"lrn_activated_at": "2021-09-01T00:00:00+00:00",
"enhanced_lrn": {
"carrier": "Verizon Wireless",
"carrier_type": "WIRELESS",
"city": "Clemmons",
"state": "NC",
"zip_code": "27012",
"county": "Forsyth",
"country_code": "US",
"timezone": "-0500",
"rate_center": "WINSTN SAL",
"lata": "424",
"ocn": "6324"
}
}
LRN with Messaging
{
"lrn": "13364086644",
"phone_number": "13364086644",
"lrn_activated_at": "2021-09-01T00:00:00+00:00",
"messaging": {
"provider": "Verizon Wireless",
"enabled": true,
"country": "US",
"country_code": "1",
"reference_id": "MSG-xyz"
}
}
LRN with CNAM
When include_cnam=true, the response includes caller ID name information:
{
"lrn": "13364086644",
"phone_number": "13364086644",
"lrn_activated_at": "2021-09-01T00:00:00+00:00",
"cnam": "VERIZON WIRELESS"
}
LRN with Trust Data
When include_trust=true, the response includes trust/reputation information:
{
"lrn": "13364086644",
"phone_number": "13364086644",
"lrn_activated_at": "2021-09-01T00:00:00+00:00",
"trust": {
"is_spam": false,
"is_robocall": false,
"is_scam": false,
"spam_type": "NONE",
"reputation_score": 85,
"trust_level": "high",
"last_updated": "2026-01-18T15:30:00Z"
}
}
Full Response (All Options Enabled)
When all include options are enabled:
{
"lrn": "13364086644",
"phone_number": "13364086644",
"lrn_activated_at": "2021-09-01T00:00:00+00:00",
"enhanced_lrn": {
"carrier": "Verizon Wireless",
"carrier_type": "WIRELESS",
"city": "Clemmons",
"state": "NC",
"zip_code": "27012",
"county": "Forsyth",
"timezone": "-0500"
},
"messaging": {
"provider": "Verizon Wireless",
"enabled": true,
"country": "US"
},
"cnam": "VERIZON WIRELESS",
"trust": {
"is_spam": false,
"is_robocall": false,
"is_scam": false,
"spam_type": "NONE",
"reputation_score": 85,
"trust_level": "high",
"last_updated": "2026-01-18T15:30:00Z"
}
}
Trust Level Values
The trust_level field is derived from the reputation_score:
- high: reputation_score >= 70 (trusted number)
- medium: reputation_score 40-69 (some concerns)
- low: reputation_score < 40 (likely spam/scam)
Integration Examples
cURL - REST API
curl -X POST https://verirouteintel.com/api/v1/lrn \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"phone_number": "13364086644", "include_enhanced_lrn": true, "messaging_lookup": true}'
Python - REST API
import requests
url = "https://verirouteintel.com/api/v1/lrn"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"phone_number": "13364086644",
"include_enhanced_lrn": True,
"messaging_lookup": True
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
print(result)
Error Handling
The API returns standard HTTP status codes and detailed error messages:
{
"error": "Invalid phone number format",
"details": "Phone number must be 11 digits starting with 1"
}
Rate Limits
API requests are limited to:
- All requests: 200 rps per minute
- Rate limits are per API key
- Upgrade your plan for higher limits
Rate limit headers are included in all responses:
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 99
X-RateLimit-Reset: 60
429 Too Many Requests
When rate limits are exceeded, the API returns a 429 status code:
{
"error": "Rate limit exceeded",
"message": "Too many requests. Please wait before making another request.",
"retry_after": 60
}
Pricing
Our LRN API uses a simple pay-as-you-go pricing model:
- Always Free Tier: 10 free LRN/Enhanced LRN lookups per month
- Pay-per-use: Competitive per-lookup pricing after wallet funding
- No subscriptions: No recurring charges or auto-refill
- Enterprise: Custom pricing for high-volume usage
FAQs
What is an LRN and why is it important?
A Local Routing Number (LRN) is a unique identifier used in the North American telephone system to route calls to the correct carrier when a phone number has been ported.
What does lrn_activated_at represent?
The lrn_activated_at field indicates when the LRN was last activated or ported. This timestamp is returned in ISO 8601 format (e.g., "2021-09-01T00:00:00+00:00") and helps you determine the last time a phone number was ported to a different carrier. This field may be null if the activation date is not available.
How accurate is the LRN data?
Our LRN database is updated in real-time and maintains 99.9% accuracy for U.S. phone numbers.
Can I get enhanced carrier information?
Yes, by setting the include_enhanced_lrn parameter to true, you'll receive additional carrier, location, and routing details.