REST endpoints for organizations in ServFlo: 5 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.
Renames the organization (in Base316 first), sets its logo path from POST /organizations/logo-upload-url (null removes it) and/or its IANA timezone (today, overdue dates, the membership scheduler, report days and on-time arrival are counted in it from then on) and/or its trade (what the website builder, the AI receptionist and the pricebook's starter items start from, and what Flo is told; changing it changes no existing records). Returns the organization.
Permission
organization.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
IANA timezone, e.g. America/Chicago. Up to 100 characters.
trade
enum
No
The business's trade, e.g. hvac, plumbing, car-detailing (the website builder's trades), or "other". Starts the pricebook, website and AI receptionist from that trade. One of hvac, plumbing, electrical, roofing, lawn-care, landscaping, tree-care, pest-control, house-cleaning, carpet-cleaning, window-cleaning, pressure-washing, pool-spa, painting, handyman, garage-doors, appliance-repair, locksmith, junk-removal, moving, flooring, remodeling, solar, septic-drain, chimney-fireplace, irrigation, car-detailing, other.
The first step after sign-up: sets the business's name (in Base316 first) and its timezone, and makes its URL slug from the name. With trade (stored on the business), the pricebook gets that trade's starter services, materials and fees in place of the generic starter items (see POST /pricebook/starter). Naming also queues the business's automatic texting number (bought by the worker in its ServFlo account, included on every plan) and makes ServFlo email its email provider unless one was chosen; neither happens before the business is named. Once named, use PATCH /organizations/{organizationId} to rename (the slug then stays). 409 when the business was named already.
Permission
organization.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
IANA timezone, e.g. America/Chicago. Up to 100 characters.
trade
enum
No
The business's trade, e.g. hvac, plumbing, car-detailing (the website builder's trades), or "other". Starts the pricebook, website and AI receptionist from that trade. One of hvac, plumbing, electrical, roofing, lawn-care, landscaping, tree-care, pest-control, house-cleaning, carpet-cleaning, window-cleaning, pressure-washing, pool-spa, painting, handyman, garage-doors, appliance-repair, locksmith, junk-removal, moving, flooring, remodeling, solar, septic-drain, chimney-fireplace, irrigation, car-detailing, other.
The caller's role in the organization and every permission it grants, with the catalog's descriptions. Check this before attempting writes: a call needing a permission you lack is refused with 403. Read-only.
Replaces the business's logo in one call: send contentBase64 or a public sourceUrl (a PNG, JPEG or WebP image, up to 10 MB). It appears in the app, on customer pages, quotes and invoices. Returns the logo path.
Permission
organization.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
The file's name, e.g. receipt.jpg (default: from the URL, else 'file'). Up to 500 characters.
contentType
string
No
MIME type, e.g. image/jpeg or application/pdf. Optional: taken from a data: URL, the URL's answer or the file's first bytes. Up to 200 characters.
contentBase64
string
No
The file's bytes as base64 (a data: URL is accepted too). Up to 10 MB. Give this or sourceUrl.
sourceUrl
string (uri)
No
A public http(s) URL ServFlo downloads the file from (up to 10 MB, 20 s, 3 redirects; private and internal addresses are refused). Give this or contentBase64. Up to 2000 characters.