Skip to main content

SwitchfromTwilioLookupto1LookupbyChangingOneURLandOneKey

Move your Twilio Lookup v2 calls to 1Lookup by changing the base URL and the key. Same JSON back, 1 credit for a US lookup, code in curl, Node and Python.

Robby Frank

Robby Frank

CEO & Founder

October 30, 2026
9 min read
Featured image for Switch from Twilio Lookup to 1Lookup by Changing One URL and One Key
Table of Contents

1Lookup answers the Twilio Lookup v2 API, so you can move your calls by changing the base URL and the key. Your requests keep their path and their Fields parameter, and the JSON that comes back keeps the field names your code already reads.

For a US or Canadian number, carrier, line type and line status come back in one request for 1 credit. That is $0.00495 on the Starter plan, against $0.015 for Twilio's Line Type Intelligence and Line Status packages together, as priced on Twilio's own Lookup pricing page on 30 October 2026. Start a 7-day free trial and run your own numbers, or read the side-by-side comparison.

The short version is one base URL, one key and the same Lookup v2 JSON.

Six facts cover the whole switch:

  • New base URL: https://app.1lookup.io/api/compat/twilio replaces https://lookups.twilio.com.
  • Key: your 1Lookup API key goes in the Basic-auth password. The username is ignored, so your account SID can stay, and Authorization: Bearer <key> works too.
  • Request: GET /v2/PhoneNumbers/{number}?Fields=...&CountryCode=..., exactly as you send it today.
  • Fields answered: validation, line_type_intelligence, line_status and caller_name.
  • Cost: 1 credit for validation, 1 credit for line type and line status together on US and Canadian numbers, and 10 credits for a US caller name.
  • Free trial: the 7-day trial includes API access.
lookup-call.js
{
-base: 'https://lookups.twilio.com',
+base: 'https://app.1lookup.io/api/compat/twilio',
path: '/v2/PhoneNumbers/+14155550142',
fields: 'line_type_intelligence,line_status',
username: process.env.TWILIO_ACCOUNT_SID,
-password: process.env.TWILIO_AUTH_TOKEN,
+password: process.env.ONELOOKUP_API_KEY,
}
The two lines that change in a Lookup v2 call. The path, the Fields value and the account SID stay as they are.

Everything else in your integration stays: the GET method, the Fields and CountryCode parameters, the /v2/PhoneNumbers/{number} path and the snake_case names in the answer, such as line_type_intelligence.carrier_name and line_status.status.

You can migrate from Twilio Lookup in four steps.

  1. Start the free trial and copy your API key. Create your account and copy a key from the dashboard. It starts with sk_live_, and API access is included during the trial.
  2. Change the base URL. Replace https://lookups.twilio.com with https://app.1lookup.io/api/compat/twilio and keep the rest of the path.
  3. Put the key where the auth token was. Use it as the Basic-auth password, and leave the account SID as the username.
  4. Send one number and read the credit headers. Every answer carries X-1Lookup-Credits-Used and X-1Lookup-Credits-Remaining, so you see what the call cost and what is left.

In curl, you change the host and the password.

curl -i -u "$TWILIO_ACCOUNT_SID:$ONELOOKUP_API_KEY" \
  "https://app.1lookup.io/api/compat/twilio/v2/PhoneNumbers/+14155550142?Fields=line_type_intelligence,line_status"

The -i flag prints the response headers, where the two credit headers sit.

In Node, you change the base URL and the key.

// Unchanged, the username is ignored
const SID = process.env.TWILIO_ACCOUNT_SID
// Was TWILIO_AUTH_TOKEN
const KEY = process.env.ONELOOKUP_API_KEY
// Was 'https://lookups.twilio.com'
const BASE = 'https://app.1lookup.io/api/compat/twilio'

const url = `${BASE}/v2/PhoneNumbers/+14155550142?Fields=line_type_intelligence,line_status`

const res = await fetch(url, {
  headers: { Authorization: `Basic ${btoa(`${SID}:${KEY}`)}` },
})
console.log('credits used:', res.headers.get('X-1Lookup-Credits-Used'))

const info = await res.json()
console.log(info.line_type_intelligence.carrier_name, info.line_type_intelligence.type)
console.log(info.line_status.status)

In Python, you change the same two values.

import os
import requests

# Unchanged, the username is ignored
SID = os.environ["TWILIO_ACCOUNT_SID"]
# Was TWILIO_AUTH_TOKEN
KEY = os.environ["ONELOOKUP_API_KEY"]
# Was "https://lookups.twilio.com"
BASE = "https://app.1lookup.io/api/compat/twilio"

res = requests.get(
    f"{BASE}/v2/PhoneNumbers/+14155550142",
    params={"Fields": "line_type_intelligence,line_status"},
    auth=(SID, KEY),
    timeout=10,
)
res.raise_for_status()
info = res.json()

print("credits used:", res.headers.get("X-1Lookup-Credits-Used"))
print(info["line_type_intelligence"]["carrier_name"], info["line_type_intelligence"]["type"])
print(info["line_status"]["status"])

Swap in one of your own numbers to see a real answer.

Twilio Lookup API pricing charges each package separately, and 1Lookup charges 1 credit for the common ones.

Twilio prices Lookup by package. Formatting and validation are free, Line Type Intelligence is $0.008 a request, Line Status starts at $0.007 a query, and Inbound Caller Identification is $0.01 a request for US numbers. Ask one number for its line type and its status and you pay for both, which is $0.015.

1Lookup answers carrier, line type and line status for a US or Canadian number with one product, so the request is 1 credit. A credit costs $0.00495 on the Starter plan and falls to $0.001999 on Enterprise.

What one US or Canadian lookup costs What one US or Canadian lookup costs Carrier, line type and line status, in dollars 1Lookup Starter 67% less $0.00495 1Lookup Growth 77% less $0.00352 1Lookup Professional 79% less $0.0032 1Lookup Enterprise 87% less $0.001999 Twilio, two packages $0.015 Line Type Intelligence $0.008 plus Line Status $0.007
Cost of one US or Canadian lookup that returns carrier, line type and line status, at each 1Lookup plan's cost per credit and at Twilio's per-package prices.

Twilio's figures are the ones on its Lookup pricing page, read on 30 October 2026. Line Status is priced in volume tiers, and $0.007 is the first tier, up to 100,000 queries a month. 1Lookup's figures are each plan's price divided by its credits: $99 for 20,000 credits on Starter, $299 for 85,000 on Growth, $799 for 250,000 on Professional and $1,999 for 1,000,000 on Enterprise.

On a monthly bill, using every credit a plan includes on US numbers:

US numbers a month Twilio line type at $0.008 1Lookup line type and status
20,000 $160 $99 on Starter
85,000 $680 $299 on Growth
250,000 $2,000 $799 on Professional
1,000,000 $8,000 $1,999 on Enterprise

The Twilio column counts Line Type Intelligence alone. Adding its Line Status package adds $0.007 a number at the first tier, and the 1Lookup column already includes line status.

Repeating a lookup you ran yourself inside the 7-day cache window is normally free on 1Lookup, and a number that is not valid costs nothing. Twilio's packages are priced per request or per query.

Twilio's Lookup pricing table listing formatting and validation as free, inbound caller identification at $0.01 per request and identity match at $0.1 per request
Twilio's own Lookup pricing table: formatting and validation are free, and each data package after that has its own price. Captured 10 August 2026, and these three rows still read the same on 30 October 2026.

1Lookup answers four Lookup v2 fields and prices each one in credits.

Lookup v2 field Credits What 1Lookup returns
validation 1 Number format and validity, also the default with no Fields
line_type_intelligence 1 for US and Canada, 3 elsewhere Carrier name and line type
line_status 1 for US and Canada, 5 elsewhere Whether the line is active
Both of the above 1 for US and Canada, 5 elsewhere Line type and line status from one check
caller_name 10, free when no name is on record Caller ID name of a US number, person or business

Outside the US and Canada, line status includes a network check of the handset.

Credits are the same ones you use for phone, email and IP checks on one balance, so a Lookup v2 call and a carrier lookup draw from the same pool. A request that asks for several fields is charged once per check that runs, which is why line type and line status together cost the same 1 credit as either alone on a US number.

Twilio's Lookup web tool with a US phone number entered and a checkbox for each data package: Validation and Formatting, Line Type Intelligence, Caller Name, SMS Pumping Risk, SIM Swap, Call Forwarding and Line Status
In Twilio's Lookup tool each data package is its own checkbox. 1Lookup answers Validation, Line Type Intelligence, Caller Name and Line Status.

Line types arrive in Twilio's vocabulary: mobile, landline, nonFixedVoip, tollFree and the rest of the Lookup v2 list. Line status arrives as active, reachable, unreachable, inactive or unknown.

What four typical calls cost in credits What four typical calls cost Credits charged per request No Fields, any country 1 credit Line type and line status, US number 1 credit Line type and line status, UK number 5 credits Line type, line status and caller name, US 11 credits The 11 is 1 credit for line type and status plus 10 for the caller name.
Credits charged for four typical Lookup v2 calls. The balance after each call comes back in the X-1Lookup-Credits-Remaining header.

A field 1Lookup does not answer comes back in Twilio's shape, so your parsing code keeps working.

Here is a full answer for a US number with Fields=line_type_intelligence,line_status. Packages you did not ask for are null, as in Lookup v2, and the key order matches Twilio's.

{
  "calling_country_code": "1",
  "country_code": "US",
  "phone_number": "+14155550142",
  "national_format": "(415) 555-0142",
  "valid": true,
  "validation_errors": null,
  "caller_name": null,
  "sim_swap": null,
  "call_forwarding": null,
  "line_status": {
    "status": "active",
    "error_code": null
  },
  "line_type_intelligence": {
    "mobile_country_code": null,
    "mobile_network_code": null,
    "carrier_name": "Example Wireless",
    "type": "mobile",
    "error_code": null
  },
  "identity_match": null,
  "reassigned_number": null,
  "sms_pumping_risk": null,
  "phone_number_quality_score": null,
  "pre_fill": null,
  "url": "https://app.1lookup.io/api/compat/twilio/v2/PhoneNumbers/+14155550142"
}

A package you ask for and 1Lookup cannot answer comes back as its own object with every value null and error_code 60600, which is Twilio's code for no information. It never carries an invented value and it is never charged. This is the sim_swap object, for example:

"sim_swap": {
  "last_sim_swap": null,
  "carrier_name": null,
  "mobile_country_code": null,
  "mobile_network_code": null,
  "error_code": 60600
}

What comes back, case by case:

  • A package left out of Fields: null, as in Lookup v2, and nothing is charged for it.
  • sim_swap, call_forwarding, identity_match, reassigned_number, sms_pumping_risk, phone_number_quality_score or pre_fill: an object with every value null and error_code 60600, at no charge for the package.
  • caller_name on a US number with no name on record: caller_name and caller_type are null, error_code is 60600, and the lookup is free.
  • caller_name on a number outside the US: the same 60600 answer, for the 1 credit the validity check costs.
  • line_type_intelligence on a US or Canadian number: carrier_name and type are filled, and mobile_country_code and mobile_network_code are null.
  • A number that is not valid: HTTP 200 with valid set to false, the reasons in validation_errors, every package null and no charge.

The identity inputs Lookup v2 accepts, such as FirstName, LastName, AddressLine1, NationalId and DateOfBirth, are accepted and ignored. They are never read, passed on or logged.

Errors keep Twilio's format, so your error handling keeps working.

Every error is a JSON body with Twilio's code, message, more_info and status, and the HTTP status matches.

What went wrong HTTP status Twilio code
Key missing, wrong or disabled 401 20003
Too few credits 403 20403
No active trial or paid plan 403 20403
A Fields value Lookup v2 does not have 400 60618
Rate limited 429 20429
Credit check busy, nothing charged, retry 503 20503
Any other fault on 1Lookup's side 500 20500

A 401 carries a WWW-Authenticate header, and a 429 passes the Retry-After header through. The two 403 cases carry different messages, one about credits and one about the plan, so a retry rule can tell them apart.

You can test the switch on your own numbers before you move any traffic.

Run a sample of your real numbers through both APIs for a day and compare line_type_intelligence.type and carrier_name side by side. The free trial runs 7 days and includes trial credits ($5 on Starter, $20 on Growth, Professional and Enterprise), so a first comparison costs nothing.

When the two agree, change the base URL and the key in your configuration and deploy. A rollback is the same two values in the other direction.

Moving from Vonage Number Insight instead? The same one-URL swap works there, and the steps are on the Vonage comparison page. For more on what a carrier lookup returns, see the carrier lookup API guide, and for lists of numbers rather than single calls, see bulk phone validation.

These are the questions teams ask before they switch.

What is a good Twilio Lookup alternative?

1Lookup is a Twilio Lookup alternative for teams that want to keep their Lookup v2 code. It answers the same request and returns the same JSON, charges 1 credit for carrier, line type and line status on a US or Canadian number, and runs email and IP checks on the same key and the same credit balance.

How do I migrate from Twilio Lookup to 1Lookup?

Change the base URL to https://app.1lookup.io/api/compat/twilio and put your 1Lookup API key in the Basic-auth password. The path, the Fields and CountryCode parameters and the response field names stay the same. The four steps and the curl, Node and Python code are above.

How much does the Twilio Lookup API cost compared with 1Lookup?

Twilio charges per package: formatting and validation are free, Line Type Intelligence is $0.008 a request, Line Status is $0.007 a query at its first tier, and caller identification is $0.01 a request for US numbers. 1Lookup charges 1 credit for line type and line status together on a US or Canadian number, which is $0.00495 on Starter and $0.001999 on Enterprise. Twilio's prices were read on 30 October 2026.

Which Lookup v2 fields does 1Lookup answer?

Four: validation, line_type_intelligence, line_status and caller_name. Validation is 1 credit. Line type and line status are 1 credit each, or 1 together, for US and Canadian numbers, and 3 and 5 credits elsewhere. Caller name is 10 credits for a US number and free when no name is on record.

What does 1Lookup return for the Twilio fields it does not answer?

The packages sim_swap, call_forwarding, identity_match, reassigned_number, sms_pumping_risk, phone_number_quality_score and pre_fill come back in Twilio's shape with every value null and error_code 60600, at no charge, so your parsing code does not break.

Do I keep my Twilio account SID?

Yes. The username in the Basic-auth header is ignored, so your SID can stay in your code or your configuration. A Bearer header with your 1Lookup key works as well.

What are the rate limits?

The same as any 1Lookup API call: 200 requests per 10 seconds for each API key on standard lookups and 1,000 requests a minute for each key on number type, HLR and MNP, and each account can make up to 1,000 requests a minute in total across all its keys. Higher limits are available on request. A limited request comes back as Twilio error 20429 with a Retry-After header.

Can I try 1Lookup before I switch?

Yes. Start a 7-day free trial, which includes API access, and send the same numbers you send to Twilio today. See the pricing page for every plan.

twilio lookup alternative
phone validation
carrier lookup
api migration
developer guide
About the Author

Meet the Expert Behind the Insights

Real-world experience from building and scaling B2B SaaS companies

Robby Frank - Head of Growth at 1Lookup

Robby Frank

Head of Growth at 1Lookup

"Calm down, it's just life"

12+
Years Experience
1K+
Campaigns Run

About Robby

Self-taught entrepreneur and technical leader with 12+ years building profitable B2B SaaS companies. Specializes in rapid product development and growth marketing with 1,000+ outreach campaigns executed across industries.

Author of "Evolution of a Maniac" and advocate for practical, results-driven business strategies that prioritize shipping over perfection.

Core Expertise

Technical Leadership
Full-Stack Development
Growth Marketing
1,000+ Campaigns
Rapid Prototyping
0-to-1 Products
Crisis Management
Turn Challenges into Wins

Key Principles

Build assets, not trade time
Skills over credentials always
Continuous growth is mandatory
Perfect is the enemy of shipped

Try It on Your Own Data

Sign up and run your own phone numbers, emails, and IP addresses through the 1Lookup API. The free trial lasts 7 days.