# Register via API

Description: Move an account from demo traffic to production-ready messaging through the Surge API.
Related: /docs/registration/one-account-per-customer, /docs/registration/schema-reference, /docs/registration/avoiding-rejection, /docs/phone-numbers/attaching, /docs/receiving/events

Use this page when you need a dedicated registered number for a real customer or brand.

## Outcome

By the end of this workflow you should have:

- an account ID (`acct_...`)
- a submitted campaign (`cpn_...`)
- a purchased number (`pn_...`)
- the webhook signals that confirm the number can send production traffic

## Required Order

1. `POST /accounts`
   - create the customer account
   - if possible, submit the full organization/contact payload in the first call
2. `GET /accounts/{account_id}/status?capabilities=local_messaging`
   - inspect `fields_needed`
   - continue only when the capability status becomes `ready`
3. `PATCH /accounts/{account_id}`
   - fill the exact missing fields named by `fields_needed`
4. `POST /accounts/{account_id}/campaigns`
   - submit real consent-flow text, real sample messages, and live policy URLs
5. `POST /accounts/{account_id}/phone_numbers`
   - purchase the local or toll-free number
6. Wait for production readiness signals
   - `campaign.approved`
   - `phone_number.attached_to_campaign`

Do not send production traffic until both signals have happened for the specific number you plan to use.

## High-Risk Review Rules

- Use one Surge account per end customer, not one shared brand account across unrelated businesses.
- `message_samples` should be realistic and brand-specific; the first sample should usually be the opt-in confirmation.
- `consent_flow` should describe the real UI and disclosures clearly enough for a human reviewer to picture them.
- `privacy_policy_url` and `terms_and_conditions_url` must be live and publicly reachable.
- If the customer is a sole proprietor without an EIN, switch to the dedicated sole-proprietor path instead of forcing this one.

## Operational Gotchas

- Campaign `active` means the campaign is approved; it does not guarantee each number is already attached.
- Purchasing a number before approval is fine. Surge attaches it automatically after approval.
- Purchasing a number after approval triggers immediate attachment.
- `volume = "low"` and `volume = "high"` affect T-Mobile throughput expectations; choose truthfully.

## Verification Checklist

- account creation returns an `acct_` ID
- campaign creation returns a `cpn_` ID with status `in_review`
- purchased numbers initially may have `campaign_id = null`
- status checks eventually show readiness before campaign submission
- webhooks later confirm approval and number attachment

## Recovery Path

- If `fields_needed` is non-empty, patch only the missing branches and recheck status.
- If campaign review fails, go to `/docs/registration/avoiding-rejection.md` and `/docs/registration/fixing-rejected`.
- If you need enum values or exact payload options, read `/docs/registration/schema-reference.md`.
