Primitive/phone1 min read

Sole-proprietor phone numbers: provision SMS without an LLC

The /phone primitive now supports a sole-proprietor tier — provision a carrier-registered US number with passed KYC and an SMS OTP, no LLC formation or EIN required.

Read the docs →

Primitive/phone
TL;DR
  • New sole-proprietor tier on /phone provision a real US number without an LLC formation or EIN
  • Requirements: a passed KYC verification (Footprint) and an SMS OTP to the verified mobile number
  • One flag: `naive phone provision --sole-prop` (API: `tier: "sole_proprietor"`)
  • Brand identity is verified by text Surge sends a one-time code to the KYC member's verified mobile; `naive phone resend-otp` re-sends it
  • Trade-off: sole-prop brands get lower carrier throughput than EIN-registered brands right-sized for notifications and 2FA, not bulk sends

When we launched /phone, provisioning required a completed LLC formation and an EIN — US carriers register 10DLC brands against a business entity, and the EIN is how that entity is verified. That's the right default for companies, but it left out a real group of operators: sole proprietors who have verified who they are, but haven't (and may never) form an LLC.

Today that requirement is optional.

One flag, no LLC

naive phone provision --sole-prop --area-code 415

Or via the API:

curl -X POST https://api.usenaive.ai/v1/phone/provision \
  -H "Authorization: Bearer nv_sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "tier": "sole_proprietor", "area_code": "415" }'

At the sole_proprietor tier, the carrier brand is registered against the KYC-verified individual instead of a business entity. The requirements:

  1. Passed KYC. A member with a passed Footprint verification (naive verification start) — their verified name, contact, and address become the brand identity.
  2. SMS OTP. Surge texts a one-time code to the member's verified mobile number to confirm brand identity. The provision response carries "brand_verification": "pending_otp" until it's confirmed; if the text expires or never arrives, naive phone resend-otp re-sends it.

Everything else works exactly like standard provisioning: the number is live for inbound SMS immediately, the 10DLC campaign is submitted automatically, and outbound SMS unlocks on campaign approval.

The trade-off

Carriers grant sole-proprietor brands lower message throughput than EIN-registered brands. For the workloads this tier is built for — order notifications, appointment reminders, receiving 2FA codes — that ceiling doesn't matter. If your agents send SMS at volume, form the LLC and register with the EIN; the standard tier is unchanged and remains the default.

Get started

naive verification start          # pass KYC once
naive phone provision --sole-prop # provision — no LLC, no EIN
naive phone resend-otp            # if the verification text didn't arrive

Docs: Phone Numbers & SMS.

Frequently Asked Questions
What changed in /phone?+
Provisioning now accepts a tier. The default standard tier still registers the 10DLC carrier brand from your formed LLC and EIN. The new sole_proprietor tier registers the brand against a KYC-verified individual instead — no formation, no EIN.
What do I need to provision as a sole proprietor?+
A passed KYC verification (run `naive verification start`). The carrier brand is registered with the verified individual's name and contact details, and Surge texts an SMS one-time code to their verified mobile number to confirm brand identity.
What if the verification text never arrives?+
Resend it with `naive phone resend-otp` (or POST /v1/phone/brand-verification/resend). The provision response includes brand_verification: "pending_otp" until the code is confirmed.
Is there a downside versus registering with an EIN?+
Yes — carriers give sole-proprietor brands lower message throughput than EIN-registered brands. That's plenty for order updates, notifications, and receiving 2FA codes; if you're sending at volume, form the LLC and register with the EIN.
M
MyxEngineering

Engineering at Naïve. Owns the comms primitives.

@myx_naive
Keep reading