RealtimeBulkPhone input

Check if a phone number has a Threads account

Check in real time whether a Threads account is associated with a phone number. Yes, no or unknown with a timestamp; unknowns are never charged.

Last updated

checks: ["threads.registered"]
A phone number checked against a grid of generic account tiles, each marked registered, not registered or unknown.A phone number checked against a grid of generic account tiles, each marked registered, not registered or unknown.

The Threads check indicates whether a Threads account is associated with a phone number. It answers registered: true, false or null (unknown) with the time of the check. It works in real time and in bulk jobs, for numbers from any country. No handle, name, photo or post is ever returned.

What does the Threads check tell you?

It tells you whether the number is linked to a Threads account. Threads is Meta's text-based social app. It launched on 5 July 2023 (Meta announcement), and sign-up went through an existing Instagram account. For most people, the Threads account therefore shares its login details, including any phone number, with their Instagram account.

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

Because of this Instagram link, Threads answers are strongly correlated with the Instagram check. They are not identical. Someone can have Instagram without ever opening Threads, and Threads rules on how accounts are created and linked have changed since launch.

Who uses it, and why?

Threads is a younger network than Facebook or Instagram. Teams use the check mainly as an extra signal next to them.

  • Sign-up protection. An account on a new app shows recent activity by the person behind the number, which a number bought yesterday for one sign-up usually won't have. See OTP and sign-up fraud.
  • Consumer lead checks. Brands whose audience is active on Meta apps can add Threads to a multi-check with Instagram and Facebook to see how much history a number has.
  • Data hygiene. Along with other checks, it helps separate live, used numbers from dead entries in older lists you are allowed to process.

Threads also differs from other Meta apps in one technical way: Meta has started connecting it to the fediverse through the ActivityPub protocol. That affects how posts are shared. It does not affect what this check returns, which is only whether an account exists.

What do you get back?

Each number gets one result under checks["threads.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.

Repeat checks inside the freshness window are served free from your account's cache (cached: true, billed: false). Use max_age: 0 to force a fresh check, which is billed.

What are the limits?

The Threads 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). It accepts 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.
  • 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?

Use the answer only to protect your service or to check data you have a lawful reason to hold. Don't research people, build profiles or run through lists of numbers to see who uses Threads. The acceptable use policy forbids these uses and unsolicited messaging. People can object through the opt-out form.

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":["threads"]}'

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": {
    "threads.registered": {
      "service": "threads.registered",
      "status": "completed",
      "registered": true,
      "attributes": null,
      "confidence": "high",
      "confidence_score": 0.99,
      "checked_at": "2026-09-25T14:25:30.627Z",
      "cached": false,
      "age_seconds": 0,
      "billed": false,
      "reason": null,
      "poll_after_ms": null
    }
  },
  "test": true
}

Try it now

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":["threads.registered"]}'

Real test-mode result for this check

checks["threads.registered"]
{
  "service": "threads.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["threads.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

How is Threads related to Instagram?

Threads launched in July 2023 as a Meta app where people signed up through their Instagram account. Because of that link, Threads and Instagram answers for a number often match, but they are separate checks and can differ.

Does the check return the Threads profile or posts?

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

Should I request Threads if I already check Instagram?

Only if the Threads answer changes your decision. For most sign-up and lead checks the Instagram answer is enough. Threads adds a second signal on the same account family.

Is Threads available in every country?

Threads launched outside the EU first and reached EU users in December 2023. Our check accepts numbers from any country, but how common Threads accounts are still varies by market.

What happens if the check does not answer in time?

The result is unknown, with registered set to null and a reason such as UPSTREAM_TIMEOUT. Unknown results are not charged.

Add Threads number check to your stack

Request access to MobileValidate. Start in test mode, go live when you are ready.