REST endpoints for phone numbers in ServFlo: 6 operations with parameters, request and response fields, permissions and curl examples.
Base URL: https://app.servflo.ai/api. Every call needs Authorization: Bearer sfk_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.
The business's numbers: the main line and tracking numbers per source (website, Google Business Profile, a campaign, a QR code, a business unit, print), each with its ring group, menu and website number-insertion rule. includeReleased adds released ones. Read-only.
POST /organizations/{organizationId}/phone/numbers
Money: mode BUY purchases the number in the business's ServFlo Twilio sub-account (billed monthly at Twilio's cost + 20%), or on its own Twilio account when it chose OWN; ASSIGN takes a number already on that account. Either way its voice webhooks are pointed at ServFlo and calls to it are tracked under source. Call GET /phone/numbers/available (or /unassigned) first.
Permission
phone.manage (Owner, Admin)
Risk
sensitive, OAuth scope servflo.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tool
phoneNumbers_add (toolset marketing)
Plan
Needs the Phone system add-on.
Approval
Over MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in ServFlo). See Approvals.
GET /organizations/{organizationId}/phone/numbers/available
Local US numbers Twilio offers to buy, by area code and / or digits or letters inside the number (contains, e.g. 4210 or PLUMB; * for any digit) (fake mode: fictional 555-01xx numbers), and what one more number costs a month (offer: Twilio's cost + 20%, or included). Then POST /phone/numbers with mode BUY. Read-only.
Three-digit US area code, e.g. 512. Optional when contains is given.
contains
query
string
No
Digits or letters the number must contain, anywhere (Twilio Contains): 2–10 of 0-9, A-Z (phone keypad: PLUMB = 75862) and * for any one digit, e.g. 4210 or 555****. Spaces and dashes are ignored. With neither field, any US local number. Up to 20 characters.
A local number's monthly price at Twilio's cost + 20%, in cents.
offer.included
boolean
Included: the phone add-on's number (or the texting number).
offer.includedBy
enum or null
One of TEXTING, PHONE_ADDON.
offer.source
enum
One of twilio, fallback.
offer.unavailableReason
string or null
Set when one more number cannot be bought now (the free trial includes one number and it is held): POST /phone/numbers would refuse it. Null otherwise.
GET /organizations/{organizationId}/phone/numbers/unassigned
Numbers already on the business's Twilio account that ServFlo does not use yet: assign one with POST /phone/numbers mode ASSIGN instead of buying. Empty in fake mode. Read-only.
Change a number's label, tracked source (campaign, QR code, business unit), ring group, menu (press 1 for … → a ring group) and website number-insertion rule. Applies from the next call.
Permission
phone.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.