Phone numbers
Provision a Brazilian WhatsApp-ready number through Salvy, or connect one you already own. One row per number, one provider forever (ADR-011).
Two sources
| Source | Path | DDD required |
|---|---|---|
salvy | Tyxter provisions the number via Salvy | Yes |
byon | You bring your own Meta-connected number | No |
List available regions
Returns DDDs Salvy currently has stock for, with the monthly BRL rental fee for each.
Provision (Salvy)
curl https://api.tyxter.com/v1/phone-numbers/provision \
-H "authorization: Bearer $TYXTER_API_KEY" \
-H "content-type: application/json" \
-d '{ "ddd": "11", "display_name": "ACME Suporte" }'Returns 202. The actual Salvy call runs on the provider.phone worker pool. Watch the status transitions:
requested → provisioning → provisioned → verifying → activeSalvy forwards the SMS verification code via webhook and we stash it on the row. Fetch with GET /v1/phone-numbers/:id to read verification_code and verification_code_received_at.
Connect (BYON)
curl https://api.tyxter.com/v1/phone-numbers/connect \
-H "authorization: Bearer $TYXTER_API_KEY" \
-H "content-type: application/json" \
-d '{
"phone": "+5511999999999",
"meta_phone_number_id": "109...",
"display_name": "ACME Vendas"
}'BYON numbers skip Salvy and jump straight to verifying. You complete WhatsApp verification on your side; Tyxter transitions the row to active when that finishes.
Release a number
Returns 202. Salvy numbers move to release_requested while the worker calls Salvy; the row reaches released when Salvy confirms by webhook. BYON numbers move directly to released.
Billing
The first time a number reaches active we emit usage_event.created for the phone.number.month meter. Recurring monthly billing for long-lived numbers is a scheduled follow-up — see the roadmap.
Webhooks
phone_number.verified— firstactivetransition.phone_number.disconnected— Salvy or Meta disconnected the number.phone_number.released— number release completed.phone_number.tier_changed— Meta reported a new phone throughput tier.