RealtimeBulkPhone input

Check if a phone number has an X (Twitter) account

Check if a phone number is linked to an X (Twitter) account: the API answers yes, no or unknown in real time or bulk. No handle or profile is returned.

$0.0008 per check real-time, $0.0003 in bulk ($0.80 / $0.30 per 1,000). Unknowns are free. Try 20 numbers for real, free, after sign-up.

Start free

Last updated

The X check indicates whether an account on X, the platform formerly called Twitter, is associated with a phone number. It answers registered: true, false or null (unknown) with the time of the check. It runs in real time and in bulk jobs, for numbers from any country, and returns no handle, name, photo or post.

How do I check if a number is linked to an X account?

Send the number to the API with the check x (or its alias twitter). The answer is registered: true when an X account is associated with the number, false when none is, and null when no conclusive answer was available, which is free. It works in real time for one number at a time and in bulk jobs for lists, and it never contacts the number or the account.

Inside the X app, the only number-based feature is contact discovery: people who allow it can be suggested to others who uploaded their number in an address book, and anyone can turn that off (X Help Center: email and phone discoverability). Our check is not a way around that setting. It doesn't reveal which account it is, only whether one exists.

What does the X check tell you?

It tells you whether the phone number is linked to an X account. On X the phone number is optional. People can register with an e-mail address and add a number later to sign in, recover the account or pass a security check. A true answer means an account is associated with the number now.

  • registered: true: an X account is associated with the number.
  • registered: false: a conclusive "no".
  • registered: null: no conclusive answer (status, reason). You are not charged.

Two platform changes affect how you should read the answer. Twitter was renamed X in July 2023. Aliases x and twitter therefore both work, and older integrations that send twitter keep running. And since 20 March 2023, text-message two-factor authentication has been available only to paying subscribers (Twitter announcement, February 2023). The same announcement notes that turning off text-message 2FA doesn't remove the number from the account. One number can also be associated with up to 10 X accounts (X Help Center). Fewer people have a reason to attach a number than before, so a false answer is common and fairly neutral.

Who uses it, and why?

Teams use the X check as a supporting signal for account security and sign-up quality, usually in a multi-check with other platforms.

  • Account-security reviews. When a user changes the phone number on their account with you, a number with some history on large platforms is a mildly reassuring sign. A number with no footprint anywhere may deserve a second look. See account security.
  • Sign-up protection. Together with Instagram, Facebook and a carrier lookup, it helps separate numbers people actually use from numbers set up for a single sign-up.
  • Data hygiene. Along with other checks, it helps you judge whether old contact numbers you are allowed to process are still in use.

If you collect e-mail addresses rather than numbers, the X e-mail check answers the same question for an address. It runs in bulk jobs only.

What do you get back?

Each number gets one result under checks["x.registered"], with no extra attributes.

FieldTypeMeaning
registeredboolean or nulltrue account associated, false none, null unknown
statusenumcompleted, pending, unknown, unsupported_country or failed
confidence / confidence_scoreenum / 0–1How sure the answer is; null when not conclusive
checked_attimestampWhen the answer was obtained
cached / age_secondsboolean / integerServed from your account's cache, and its age
billedbooleanWhether this check was charged
reasonstring or nullWhy an answer is not conclusive

How is it billed?

You pay per number checked, and only for conclusive answers. You're not charged for inconclusive results (unknown, unsupported country, timeout, invalid, duplicate). Real-time and bulk checks are priced separately. See pricing. Cache hits inside the freshness window are free, and max_age: 0 forces a fresh, billed check.

What are the limits?

The X check runs in real time (POST /v1/lookup, up to 100 identifiers) and in bulk jobs (POST /v1/jobs, up to 50,000 per job), for numbers from every country.

  • A request can hold up to 20 checks. Numbers × checks is capped at 2,000 per lookup and 100,000 per job.
  • Requests that look like sequential number ranges or generated e-mail lists are rejected (suspected_enumeration).
  • A daily cap per account applies (GET /v1/limits).
  • Invalid, duplicate and suppressed numbers are reported per row and never checked.

How do I use it responsibly?

X is widely used under pseudonyms, and people have good reasons for that. Never use this check to link a number to a pseudonymous account or to find out who is behind one. We don't support that: there are no reverse lookups, and the answer is only yes, no or unknown. Check only numbers you have a lawful reason to process. The acceptable use policy forbids stalking, harassment, profiling and unsolicited messaging. Anyone can object at /opt-out.

Example request

With a test key, +447700900001 answers "registered". See test mode.

curl https://api.mobilevalidate.com/v1/lookup \
  -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" \
  -H "Content-Type: application/json" \
  -d '{"numbers":["+447700900001"],"checks":["x"]}'

Runs as pasted with the public sandbox key, which answers the test values only. In the SDKs, omit the key to use MOBILEVALIDATE_API_KEY.

Response (excerpt, test mode: the first item of results):

JSON
{
  "kind": "phone",
  "input": "+447700900001",
  "e164": "+447700900001",
  "country": "GB",
  "number_status": "valid",
  "checks": {
    "x.registered": {
      "service": "x.registered",
      "status": "completed",
      "registered": true,
      "attributes": null,
      "confidence": "high",
      "confidence_score": 0.99,
      "checked_at": "2026-09-25T14:25:30.665Z",
      "cached": false,
      "age_seconds": 0,
      "billed": false,
      "reason": null,
      "poll_after_ms": null
    }
  },
  "test": true
}

Try it now

Run it here with a test value: the console calls the live API from your browser with the public sandbox key and shows the real JSON and a plain-English verdict.

POST /v1/lookup

Public sandbox key · test values only · never billed

The sandbox answers the test values below. To check your own numbers for real, create a free account: your first 20 phone numbers and 10 e-mail addresses are free.

Test numbers
Test e-mails
Checks · phone · 1 selected

Pick a test value or press Run

Press Run or pick a test value above: the console sends a real request to the API with the public sandbox key and shows the answer here.

Check your own numbers: 20 phone numbers and 10 e-mail addresses are checked for real, free, after sign-up. Start free

checks: ["x.registered"] · Realtime lookup via POST /v1/lookup. Every example runs as pasted: it uses the public sandbox key, which answers the test values for free. In the SDKs, omit the key to use MOBILEVALIDATE_API_KEY.

curl https://api.mobilevalidate.com/v1/lookup \
  -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" \
  -H "Content-Type: application/json" \
  -d '{"numbers":["+447700900001"],"checks":["x.registered"]}'

Real test-mode result for this check

checks["x.registered"]
{
  "service": "x.registered",
  "status": "completed",
  "registered": true,
  "attributes": null,
  "confidence": "high",
  "confidence_score": 0.99,
  "checked_at": "2026-09-25T14:25:28.979Z",
  "cached": false,
  "age_seconds": 0,
  "billed": false,
  "reason": null,
  "poll_after_ms": null
}

What you get

Fields of checks["x.registered"], generated from the public service catalog.

FieldTypeMeaning
registeredboolean | nulltrue = found, false = not found, null = unknown (not charged).
statusenumcompleted, pending, unknown, unsupported_country or failed.
checked_attimestampWhen the answer was obtained.

Frequently asked questions

Is there an X number lookup?

Not one that names the account. This check tells you whether an X account is associated with a phone number: yes, no or unknown. It never returns the handle, name or profile, and there is no reverse lookup from a number to a person.

Can one phone number be linked to several X accounts?

Yes. X's help centre says the same phone number can be associated with up to 10 X accounts. The check answers whether at least one account is associated with the number; it doesn't count them.

Should I use the code x or twitter?

Either one. Both aliases map to the service code x.registered. Results always use the full code, so they appear under checks["x.registered"].

Why do many X accounts have no phone number?

X accepts sign-up with an e-mail address, and adding a phone number is optional. Since March 2023, text-message two-factor authentication has been limited to paying subscribers, so fewer accounts need a number for 2FA.

Does the check reveal the X handle?

No. It only indicates whether an X account is associated with the number. Handles, names, photos and posts are never returned.

Can I check e-mail addresses for X accounts?

Yes, with the separate x.email service. It runs in bulk jobs only (POST /v1/jobs), while this phone check also works in real time.

Can I use this to find out who is behind an anonymous account?

No. There are no reverse lookups: we never map a number to an account or an account to a person. The acceptable use policy forbids de-anonymisation, stalking and harassment.

Is there a free x (Twitter) number check?

Yes, to try it on your own data: create a free account and check up to 20 phone numbers for real on the dashboard's Try it page, at no cost. Test mode with documented test values is free and unlimited. After that, a x (Twitter) number check costs $0.0008 per check in real time ($0.80 per 1,000) and $0.0003 in bulk jobs ($0.30 per 1,000), paid from prepaid credit. Unknown and other inconclusive results are always free.

All articles

Add X (Twitter) number check to your stack

Create a free MobileValidate account: approved automatically, usually within 10–15 minutes. X (Twitter) number check: $0.0008 per check real-time, $0.0003 in bulk ($0.80 / $0.30 per 1,000).

Free to start: check 20 phone numbers and 10 e-mail addresses for real on your account, plus an unlimited test mode. You pay only for conclusive answers, from $20.