Developers API reference Service reports Agreement templates API REST endpoints for agreement templates 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 .
GET /organizations/{organizationId}/agreement-templates
Pre-service agreement wordings, the default first. Read-only.
Permission serviceReports.read (Owner, Admin, Dispatcher, Technician, Member)Risk read, OAuth scope servflo.read. Read: reads only.MCP tool agreementTemplates_list (toolset serviceReports)
curl "https://app.servflo.ai/api/organizations/ $ORGANIZATION_ID /agreement-templates" \
-H "Authorization: Bearer $SERVFLO_API_KEY "
200: the answer's fields An array of objects:
Field Type Description idstring namestring bodystring Safe HTML; {business} is replaced by the business's name. serviceTypeIdsarray of string isDefaultboolean archivedAtstring (date-time) or null
POST /organizations/{organizationId}/agreement-templates
An agreement wording for some service types (or the default). Agreements already sent keep the wording they were sent with. Have your own wording reviewed; ServFlo's default is a plain starting point, not legal advice.
Permission serviceReports.manage (Owner, Admin)Risk write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.MCP tool agreementTemplates_create (toolset serviceReports)
Field Type Required Description namestring Yes Up to 200 characters. bodystring Yes The wording (safe HTML); {business} becomes the business's name. serviceTypeIdsarray of string No Service types this agreement is for. Up to 500 items. isDefaultboolean No Used for service types without their own. archivedboolean No
curl -X POST "https://app.servflo.ai/api/organizations/ $ORGANIZATION_ID /agreement-templates" \
-H "Authorization: Bearer $SERVFLO_API_KEY " \
-H "Content-Type: application/json" \
-d '{"name":"Dana Whitfield","body":"string"}'
201: the answer's fields Field Type Description idstring namestring bodystring Safe HTML; {business} is replaced by the business's name. serviceTypeIdsarray of string isDefaultboolean archivedAtstring (date-time) or null
GET /organizations/{organizationId}/agreement-templates/{agreementTemplateId}
One pre-service agreement wording with its service types and default flag. Read-only.
Permission serviceReports.read (Owner, Admin, Dispatcher, Technician, Member)Risk read, OAuth scope servflo.read. Read: reads only.MCP tool agreementTemplates_get (toolset serviceReports)
Name In Type Required Description agreementTemplateIdpath string Yes
curl "https://app.servflo.ai/api/organizations/ $ORGANIZATION_ID /agreement-templates/{agreementTemplateId}" \
-H "Authorization: Bearer $SERVFLO_API_KEY "
200: the answer's fields Field Type Description idstring namestring bodystring Safe HTML; {business} is replaced by the business's name. serviceTypeIdsarray of string isDefaultboolean archivedAtstring (date-time) or null
PATCH /organizations/{organizationId}/agreement-templates/{agreementTemplateId}
Changes the fields sent. Agreements already made keep their frozen wording.
Permission serviceReports.manage (Owner, Admin)Risk write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.MCP tool agreementTemplates_update (toolset serviceReports)
Name In Type Required Description agreementTemplateIdpath string Yes
Field Type Required Description namestring No Up to 200 characters. bodystring No The wording (safe HTML); {business} becomes the business's name. serviceTypeIdsarray of string No Service types this agreement is for. Up to 500 items. isDefaultboolean No Used for service types without their own. archivedboolean No
curl -X PATCH "https://app.servflo.ai/api/organizations/ $ORGANIZATION_ID /agreement-templates/{agreementTemplateId}" \
-H "Authorization: Bearer $SERVFLO_API_KEY " \
-H "Content-Type: application/json" \
-d '{"name":"Dana Whitfield","body":"string","serviceTypeIds":["serviceType_id"]}'
200: the answer's fields Field Type Description idstring namestring bodystring Safe HTML; {business} is replaced by the business's name. serviceTypeIdsarray of string isDefaultboolean archivedAtstring (date-time) or null
DELETE /organizations/{organizationId}/agreement-templates/{agreementTemplateId}
Destructive: deletes the wording. Agreements already sent or signed keep theirs.
Permission serviceReports.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 agreementTemplates_delete (toolset serviceReports)Approval Over MCP, this tool always waits for your approval in ServFlo. See Approvals .
Name In Type Required Description agreementTemplateIdpath string Yes
curl -X DELETE "https://app.servflo.ai/api/organizations/ $ORGANIZATION_ID /agreement-templates/{agreementTemplateId}" \
-H "Authorization: Bearer $SERVFLO_API_KEY "
200: the answer's fields Field Type Description oktrue