ThunderPhone 2.0 is live.Self-serve, from 2¢/min.Read the announcement

Phone Numbers

Caller Registration

Set the caller name your ThunderPhone numbers show, and register numbers in your own Twilio or Telnyx account for caller name, verified caller ID and spam-filter registration.

These endpoints manage what carriers show and how they score your calls. The product guide is Caller ID and spam registration. Everything here is free.

  • ThunderPhone numbers get the organization's caller name automatically: on purchase, and again whenever the caller name is saved.
  • Numbers in your own carrier account are registered only when you ask: Telnyx numbers can get a caller name; Twilio numbers can get a caller name, verified caller ID (SHAKEN/STIR) and spam-filter registration (Twilio Voice Integrity). ThunderPhone uses the credentials saved on the number's VoIP connection.

Reads, and POST /refresh, are open to any organization role. Other changes need an admin or owner.

Endpoints

MethodPathDescription
GET/v1/caller-registrationCaller name setting and every number's registrations
PUT/v1/caller-registration/caller-nameSave the caller name
POST/v1/caller-registration/registerRegister numbers in your own carrier account
GET/v1/caller-registration/twilio-business-profileCheck a Twilio account's Primary Business Profile
POST/v1/caller-registration/refreshCheck registrations under review now
DELETE/v1/caller-registration/registrations/{registration_id}Turn off a Telnyx caller name

Registration object

{
  "id": 41,
  "phone_number_id": 812,
  "kind": "shaken_stir",
  "provider": "twilio",
  "status": "in_review",
  "display_name": "",
  "status_detail": "Twilio is reviewing it. This usually takes 1 to 3 days.",
  "trust_product_sid": "BU0123456789abcdef0123456789abcdef",
  "submitted_at": "2026-10-23T18:02:11.204Z",
  "checked_at": "2026-10-23T19:02:40.517Z",
  "updated_at": "2026-10-23T19:02:40.517Z"
}
FieldTypeDescription
idintegerRegistration id
phone_number_idintegerThe phone number it belongs to
kindstringcnam (caller name), shaken_stir (verified caller ID) or voice_integrity (spam-filter registration)
providerstringtelnyx or twilio: the account the registration lives in
statusstringpending (being sent), submitted, in_review, approved, rejected, failed or off
display_namestringcnam only: the name shown on calls
status_detailstringPlain-language detail: a rejection reason, what failed, or what happens next
trust_product_sidstringTwilio only: the Trust Hub registration the number joined
submitted_at, checked_at, updated_attimestamp or nullISO 8601 UTC. checked_at is the last time ThunderPhone read the status from the carrier

ThunderPhone sends pending registrations within a few minutes and retries when the carrier is unreachable. It checks registrations under review about once an hour; carriers usually decide within 1 to 3 days. A registration whose number leaves your account, or its carrier account, turns off.


Get registrations

cURL
curl https://api.thunderphone.com/v1/caller-registration \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"
{
  "caller_name": {
    "caller_name": "",
    "enabled": true,
    "default_caller_name": "Acme Plumbing",
    "effective_caller_name": "Acme Plumbing",
    "max_length": 15
  },
  "numbers": [
    {
      "phone_number_id": 812,
      "number": "+12125550101",
      "label": "Main line",
      "number_type": "voip",
      "carrier": "twilio",
      "voip_connection_id": 37,
      "eligible_kinds": ["cnam", "shaken_stir", "voice_integrity"],
      "registrations": {
        "cnam": null,
        "shaken_stir": { "id": 41, "kind": "shaken_stir", "status": "in_review", "...": "..." },
        "voice_integrity": null
      }
    }
  ],
  "voice_integrity_use_cases": ["Appointment Reminders", "Customer Support", "..."],
  "twilio_trust_hub_url": "https://console.twilio.com/us1/account/trust-hub/overview"
}
FieldDescription
caller_name.caller_nameThe saved name; blank means "use the organization's name"
caller_name.default_caller_nameThe organization name cut to a valid caller name; blank when the organization still has its generated name (such as "Jane's Team")
caller_name.effective_caller_nameWhat ThunderPhone numbers show; blank when turned off or when there is no usable name
numbers[].carrierthunderphone, twilio, telnyx, signalwire, vonage, manual or other
numbers[].eligible_kindsWhat you can register on this number yourself. Empty for ThunderPhone numbers (handled automatically) and for carriers ThunderPhone can't register with; never cnam for toll-free or non-US numbers
numbers[].registrationsOne registration object or null per kind

Save the caller name

Applies to every ThunderPhone number the organization has, and to numbers it buys later.

cURL
curl -X PUT https://api.thunderphone.com/v1/caller-registration/caller-name \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"caller_name": "Acme Plumbing", "enabled": true}'
FieldTypeRequiredDescription
caller_namestringno1 to 15 letters, numbers and spaces, starting with a letter. "" uses the organization's name
enabledbooleannofalse stops showing a caller name on ThunderPhone numbers

Returns 200 OK with the same body as Get registrations. An invalid name returns 400 with the reason under caller_name.


Register numbers

Registers numbers in the organization's own Twilio or Telnyx account. This changes that account: for Twilio, ThunderPhone adds each number to the account's Primary Business Profile, reuses the account's existing registration of that kind (or creates one), adds the numbers to it and submits it for review. Repeating a request never creates duplicates.

cURL
curl -X POST https://api.thunderphone.com/v1/caller-registration/register \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "voice_integrity",
    "phone_number_ids": [812, 813],
    "voice_integrity": {
      "use_case": "Appointment Reminders",
      "employee_count": 12,
      "daily_call_volume": 300
    }
  }'
FieldTypeRequiredDescription
kindstringyescnam, shaken_stir or voice_integrity. Telnyx numbers take cnam only
phone_number_idsinteger[]yes1 to 200 of your numbers on a Twilio or Telnyx connection
display_namestringnocnam only. Defaults to the organization's caller name
voice_integrityobjectfor voice_integrityuse_case (one of voice_integrity_use_cases), employee_count and daily_call_volume (whole numbers, 1 or more)

Returns 202 Accepted with {"registrations": [...]} (status pending).

When the Twilio account already has a registration of that kind, the numbers join it. For voice_integrity the answers sent now are then not used; change them in Twilio's Trust Hub.

StatusWhen
400A ThunderPhone number (its caller name is automatic), a kind the number's carrier doesn't support (caller names are for US local numbers only, not toll-free), an invalid name, missing Voice Integrity answers, or no contact email on the requesting user (Twilio needs one)
404A number that isn't in your organization
409The Twilio account has no approved Primary Business Profile: code is business_profile_required, with console_url and business_profile_status. A 409 with no code means the Twilio credentials are incomplete or Twilio refused the check; the reason is in detail
503Twilio couldn't be reached to check the Business Profile; try again

Check a Twilio Business Profile

GET /v1/caller-registration/twilio-business-profile?connection_id=37 reads the Twilio account behind that connection.

{
  "connection_id": 37,
  "business_profile": {
    "sid": "BU0123456789abcdef0123456789abcdef",
    "friendly_name": "Acme Plumbing",
    "status": "twilio-approved",
    "approved": true
  },
  "console_url": "https://console.twilio.com/us1/account/trust-hub/overview"
}

business_profile is null when the account has none. status is Twilio's: draft, pending-review, in-review, twilio-approved or twilio-rejected.


Refresh status

POST /v1/caller-registration/refresh reads every registration under review from the carrier now (each at most once a minute) and returns the same body as Get registrations.


Turn off a Telnyx caller name

DELETE /v1/caller-registration/registrations/{registration_id} removes the caller name from a number in your Telnyx account. Returns 202 with the registration (status pending, then off). It returns 400 for Twilio registrations (remove those in Twilio's Trust Hub) and for a ThunderPhone number's caller name (turn that off with Save the caller name).