REST endpoints for commissions in ServFlo: 8 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.
JOB_REVENUE_PERCENT (percent of a completed job's revenue), SOLD_QUOTE_PERCENT (percent of quotes the technician sold, on approval), FLAT_PER_JOB, FLAT_PER_VISIT (completed), MEMBERSHIP_SALE_PERCENT (percent of a sold membership's term value). One of JOB_REVENUE_PERCENT, SOLD_QUOTE_PERCENT, FLAT_PER_JOB, FLAT_PER_VISIT, MEMBERSHIP_SALE_PERCENT.
ratePercent
number
flatCents
integer
Integer cents.
split
enum
Job and visit rules: LEAD (all to the lead technician) or CREW (split evenly). One of LEAD, CREW.
POST /organizations/{organizationId}/commission-rules
Adds a rule (percent of job revenue, of sold quotes or of membership sales; flat per job or visit) for every technician or the ones named. It counts from the next calculation. Returns it.
Permission
commissions.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
JOB_REVENUE_PERCENT (percent of a completed job's revenue), SOLD_QUOTE_PERCENT (percent of quotes the technician sold, on approval), FLAT_PER_JOB, FLAT_PER_VISIT (completed), MEMBERSHIP_SALE_PERCENT (percent of a sold membership's term value). One of JOB_REVENUE_PERCENT, SOLD_QUOTE_PERCENT, FLAT_PER_JOB, FLAT_PER_VISIT, MEMBERSHIP_SALE_PERCENT.
ratePercent
number
No
For the percent types. 0–100.
flatCents
integer
No
For the flat types. 0–10000000.
split
enum
No
Job and visit rules: LEAD (all to the lead technician) or CREW (split evenly). One of LEAD, CREW.
technicianIds
array of string
No
Only these technicians earn from the rule; empty means everyone. Up to 500 items.
JOB_REVENUE_PERCENT (percent of a completed job's revenue), SOLD_QUOTE_PERCENT (percent of quotes the technician sold, on approval), FLAT_PER_JOB, FLAT_PER_VISIT (completed), MEMBERSHIP_SALE_PERCENT (percent of a sold membership's term value). One of JOB_REVENUE_PERCENT, SOLD_QUOTE_PERCENT, FLAT_PER_JOB, FLAT_PER_VISIT, MEMBERSHIP_SALE_PERCENT.
ratePercent
number
flatCents
integer
Integer cents.
split
enum
Job and visit rules: LEAD (all to the lead technician) or CREW (split evenly). One of LEAD, CREW.
JOB_REVENUE_PERCENT (percent of a completed job's revenue), SOLD_QUOTE_PERCENT (percent of quotes the technician sold, on approval), FLAT_PER_JOB, FLAT_PER_VISIT (completed), MEMBERSHIP_SALE_PERCENT (percent of a sold membership's term value). One of JOB_REVENUE_PERCENT, SOLD_QUOTE_PERCENT, FLAT_PER_JOB, FLAT_PER_VISIT, MEMBERSHIP_SALE_PERCENT.
ratePercent
number
No
For the percent types. 0–100.
flatCents
integer
No
For the flat types. 0–10000000.
split
enum
No
Job and visit rules: LEAD (all to the lead technician) or CREW (split evenly). One of LEAD, CREW.
technicianIds
array of string
No
Only these technicians earn from the rule; empty means everyone. Up to 500 items.
JOB_REVENUE_PERCENT (percent of a completed job's revenue), SOLD_QUOTE_PERCENT (percent of quotes the technician sold, on approval), FLAT_PER_JOB, FLAT_PER_VISIT (completed), MEMBERSHIP_SALE_PERCENT (percent of a sold membership's term value). One of JOB_REVENUE_PERCENT, SOLD_QUOTE_PERCENT, FLAT_PER_JOB, FLAT_PER_VISIT, MEMBERSHIP_SALE_PERCENT.
ratePercent
number
flatCents
integer
Integer cents.
split
enum
Job and visit rules: LEAD (all to the lead technician) or CREW (split evenly). One of LEAD, CREW.
Commission lines whose source falls in the period (start/end), by technician or status, with totals per technician (pending, approved, paid). A technician sees only their own lines. Calculate the period first with POST /commissions/calculate. Read-only.
PENDING (recomputed on each calculation), APPROVED, PAID (never recomputed). One of PENDING, APPROVED, PAID.
items[].approvedAt
string (date-time) or null
items[].paidAt
string (date-time) or null
items[].technician
object
items[].technician.id
string
items[].technician.name
string
items[].technician.color
string
items[].rule
object
items[].rule.id
string
items[].rule.name
string
items[].rule.type
enum
JOB_REVENUE_PERCENT (percent of a completed job's revenue), SOLD_QUOTE_PERCENT (percent of quotes the technician sold, on approval), FLAT_PER_JOB, FLAT_PER_VISIT (completed), MEMBERSHIP_SALE_PERCENT (percent of a sold membership's term value). One of JOB_REVENUE_PERCENT, SOLD_QUOTE_PERCENT, FLAT_PER_JOB, FLAT_PER_VISIT, MEMBERSHIP_SALE_PERCENT.
items[].rule.split
enum
Job and visit rules: LEAD (all to the lead technician) or CREW (split evenly). One of LEAD, CREW.
POST /organizations/{organizationId}/commissions/calculate
Computes every commission the active rules earn from jobs and visits completed, quotes approved and memberships sold in the period, and writes them as PENDING lines. Idempotent: a source is paid once (unique per rule, technician and source); pending lines are recomputed, approved and paid ones are never changed. Returns the counts.
Permission
commissions.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
POST /organizations/{organizationId}/commissions/status
MONEY (pay): moves lines PENDING → APPROVED → PAID (or APPROVED back to PENDING). Paid lines never change. Approved and paid lines are kept through recalculations. Returns how many changed.
Permission
commissions.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
commissions_setStatus (toolset team)
Approval
Over MCP, this tool always waits for your approval in ServFlo. See Approvals.