Welcome to the documentation for the serviceminder API. All requests must be POST operations with JSON formatted payloads. Each
request must also include a valid APIKey parameter. API keys may be generated inside serviceminder. For examples and more
complete documentation of how to use the API, visit Help after logging in.
Every endpoint returns a JSON object containing the endpoint's output parameters, plus a ResultCode and a Message.
Errors are normally returned with HTTP status 200, so always check ResultCode rather than the HTTP status.
| ResultCode |
Meaning |
| 0 | Success |
| 1 | Failure. Message describes the error. |
| -2 | The request body contained unsafe characters (for example HTML markup) and was rejected before processing. Only ResultCode and Message are populated (not the endpoint's output parameters), and Message is HTML-encoded. |
Success
{
"ResultCode": 0,
"Message": null,
...endpoint output parameters...
}
Failure
HTTP/1.1 200 OK
{
"ResultCode": 1,
"Message": "API Key is not valid",
...
}
Errors any endpoint can return
| Message |
Cause |
| API Key is not valid | The APIKey is missing, unknown, or inactive. |
| Account is Canceled | The account that owns the API key has been canceled. |
| Trial expired | The account that owns the API key is a trial that has expired. |
| Account is Suspended | The account that owns the API key is not active. |
| Invalid characters found: ... | Returned with ResultCode -2 when the request body contains unsafe characters. |
Non-200 responses
| Status |
When |
| 400 | Request validation failed. The body has the usual ResultCode and Message. For sms_consent errors on contacts/addupdate it also includes an Errors list of { "Field", "Message" } entries (only where SMS consent is enabled for the account). |
| 409 | sms_consent on contacts/addupdate tried to opt in a contact who texted STOP. Message is stop_locked and the Errors list names the locked fields. Only returned where SMS consent is enabled for the account. |
| 405 | A POST-only endpoint was called with another HTTP method. |
| Other | An unexpected server error. The response is an HTML error page rather than JSON. |
create
POST https://serviceminder.com/api/accountingclasses/create
| Parameter |
Type |
Required |
Direction |
Description |
|
OrganizationId
|
int32 |
No |
|
Org to create in (branding API keys only) |
|
AccountingClassId
|
int32 |
No |
Output |
Id of the new accounting class |
|
Name
|
string |
Yes |
|
Accounting class name |
|
TerritoryID
|
string |
No |
|
External territory id |
|
PostalCodes
|
String[] |
No |
|
Postal codes to assign; * is a wildcard |
|
Matches
|
AccountingClassPostalCodes[]
|
No |
Output |
The created accounting class |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
get
POST https://serviceminder.com/api/accountingclasses/get
| Parameter |
Type |
Required |
Direction |
Description |
|
NameSearch
|
string |
No |
|
Partial match on accounting class name |
|
OrganizationId
|
int32 |
No |
|
Org to read from (branding API keys only) |
|
Matches
|
AccountingClassPostalCodes[]
|
No |
Output |
Accounting classes with their postal codes |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
update
POST https://serviceminder.com/api/accountingclasses/update
| Parameter |
Type |
Required |
Direction |
Description |
|
OrganizationId
|
int32 |
No |
|
Org the class belongs to (branding API keys only) |
|
AccountingClassId
|
int32 |
Yes |
|
Accounting class to update |
|
Name
|
string |
No |
|
New name; blank keeps the current name |
|
TerritoryID
|
string |
No |
|
External territory id; omitting it clears it |
|
PostalCodes
|
String[] |
No |
|
Replaces all postal codes; * is a wildcard |
|
Matches
|
AccountingClassPostalCodes[]
|
No |
Output |
The updated accounting class |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
addtip
POST https://serviceminder.com/api/appointments/addtip
| Parameter |
Type |
Required |
Direction |
Description |
|
AppointmentId
|
int32 |
Yes |
|
Appointment to add the tip to |
|
Amount
|
decimal |
Yes |
|
Tip amount, charged to the card on file |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
book
POST https://serviceminder.com/api/appointments/book
| Parameter |
Type |
Required |
Direction |
Description |
|
AppointmentId
|
int32 |
No |
Output |
ID of the new appointment |
|
ServiceName
|
string |
Yes, or ServiceId |
Input & output |
Service to book, by exact name |
|
ContactId
|
int32 |
Yes |
|
Customer the appointment is for |
|
ServiceId
|
int32 |
Yes, or ServiceName |
|
Service to book |
|
TargetDate
|
string |
No |
|
Org-local date to queue it for when no Slots are sent |
|
Duration
|
string |
No |
|
Visit length, e.g. 90 or 1h 30m. Defaults to the service's |
|
Quantity
|
double |
No |
|
Units of the service, used for pricing |
|
Discount
|
decimal |
No |
|
Discount amount off the appointment |
|
Notes
|
string |
No |
|
Added as a note on the appointment |
|
NotificationUri
|
string |
No |
|
Where to send on-the-way messages, e.g. text:5555551234 |
|
EnRouteUri
|
string |
No |
|
Same as NotificationUri |
|
ThirdPartyUrl
|
string |
No |
|
Link saved on the appointment, e.g. to your own record |
|
SkipConflictChecks
|
boolean |
No |
|
Book even if the technician is busy |
|
CallCenterTransactionId
|
int32 |
No |
|
Your call ID, to link the appointment to a call |
|
Slots
|
AppointmentSlot[]
|
No |
|
Start time and technician. Only the first is used. Leave out rather than null |
|
AddOnParts
|
AddOnPart[]
|
No |
|
Extra line items, by part ID |
|
RootProposalId
|
int32 |
No |
|
Estimate to book from |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
cancel
POST https://serviceminder.com/api/appointments/cancel
| Parameter |
Type |
Required |
Direction |
Description |
|
AppointmentId
|
int32 |
Yes |
|
Appointment to cancel |
|
ServiceName
|
string |
No |
Output |
Service of the cancelled appointment |
|
CancelReasonId
|
int32 |
No |
|
Cancel reason, from cancelreasons/all |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
feedback
POST https://serviceminder.com/api/appointments/feedback
| Parameter |
Type |
Required |
Direction |
Description |
|
Id
|
int32 |
Yes, or HashKey |
|
Appointment id |
|
HashKey
|
string |
Yes, or Id |
|
Appointment hash key (from customer links) |
|
Note
|
string |
No |
|
Customer comment |
|
ContactMe
|
boolean |
No |
|
Customer wants to be contacted |
|
Score
|
int32 |
One of Score, Positive/Negative, Note, ContactMe |
|
Rating from 1 to 5 |
|
Positive
|
boolean |
No |
|
Marks positive feedback (value is not stored) |
|
Negative
|
boolean |
No |
|
Marks negative feedback (value is not stored) |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
find
POST https://serviceminder.com/api/appointments/find
| Parameter |
Type |
Required |
Direction |
Description |
|
AppointmentId
|
int32 |
Yes, or ContactId or InvoiceId |
|
Single appointment to return |
|
ServiceName
|
string |
No |
Output |
Name of the service matching ServiceId, else null |
|
ContactId
|
int32 |
Yes, or AppointmentId or InvoiceId |
|
Customer whose upcoming appointments to return |
|
ServiceId
|
int32 |
No |
|
Does not filter results; only fills ServiceName |
|
InvoiceId
|
int32 |
Yes, or ContactId or AppointmentId |
|
Return the appointment for this invoice |
|
IncludeCompleted
|
boolean |
No |
|
With ContactId: also include completed appointments |
|
IncludeContact
|
boolean |
No |
|
Include customer details in each result |
|
SearchDate
|
string |
No |
|
With ContactId: return appointments after this date instead of now |
|
Slots
|
AppointmentSlot[]
|
No |
Output |
Matching appointments |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
query
POST https://serviceminder.com/api/appointments/query
| Parameter |
Type |
Required |
Direction |
Description |
|
FromDate
|
datetime |
No |
|
Scheduled on or after this date/time |
|
ThroughDate
|
datetime |
No |
|
Scheduled before this date/time (exclusive) |
|
UpdatedFrom
|
datetime |
No |
|
Updated on or after this date/time |
|
UpdatedThrough
|
datetime |
No |
|
Updated before this date/time (exclusive) |
|
ContactId
|
int32 |
No |
|
Only this customer's appointments |
|
ServiceAgentId
|
int32 |
No |
|
Only this agent's appointments |
|
Skip
|
int32 |
No |
Input & output |
Rows to skip for paging; default 0 |
|
Take
|
int32 |
No |
Input & output |
Rows to return; default and max 500 |
|
IncludeContact
|
boolean |
No |
|
Include customer details in each result |
|
Count
|
int32 |
No |
Output |
Total matching appointments before paging |
|
Appointments
|
AppointmentSlot[]
|
No |
Output |
The page of matching appointments, ordered by id |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
queue
POST https://serviceminder.com/api/appointments/queue
| Parameter |
Type |
Required |
Direction |
Description |
|
AppointmentId
|
int32 |
No |
Output |
Id of the new queued appointment |
|
ServiceName
|
string |
Yes, or ServiceId |
Input & output |
Service name; echoed back as the matched service |
|
ContactId
|
int32 |
Yes |
|
Customer the appointment is for |
|
QueueDate
|
string |
No |
Input & output |
Target date; defaults to tomorrow. Returned as the actual queue date |
|
Duration
|
string |
No |
|
Override job length, e.g. 90 or 1h 30m |
|
Quantity
|
double |
No |
|
Service quantity |
|
ServiceId
|
int32 |
Yes, or ServiceName |
|
Service to queue |
|
AddOnParts
|
AddOnPart[]
|
No |
|
Extra parts to add to the appointment |
|
Discount
|
decimal |
No |
|
Discount amount off the service |
|
Notes
|
string |
No |
|
Appointment notes |
|
NotificationUri
|
string |
No |
|
Where to send en-route notices |
|
CallCenterTransactionId
|
int32 |
No |
|
Call center call id to link to |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
quickbook
POST https://serviceminder.com/api/appointments/quickbook
| Parameter |
Type |
Required |
Direction |
Description |
|
ContactId
|
int32 |
No |
Input & output |
Returned id of the matched or created customer |
|
Name
|
string |
Recommended |
|
Customer name, used to match or create the contact |
|
Nickname
|
string |
No |
|
Customer nickname |
|
Company
|
string |
No |
|
Customer company name |
|
Address1
|
string |
No |
|
Service address line 1 |
|
Address2
|
string |
No |
|
Service address line 2 |
|
City
|
string |
No |
|
Service address city |
|
State
|
string |
No |
|
Service address state |
|
Zip
|
string |
No |
|
Service address postal code |
|
PriPhone
|
string |
Yes, or Email |
|
Primary phone |
|
PriPhoneLabel
|
string |
No |
|
Label for the primary phone |
|
AltPhone
|
string |
No |
|
Alternate phone |
|
AltPhoneLabel
|
string |
No |
|
Label for the alternate phone |
|
Email
|
string |
Yes, or PriPhone |
|
Customer email |
|
Channel
|
string |
No |
|
Lead source name; defaults to API key/org setting |
|
ChannelId
|
int32 |
No |
|
Lead source id; takes priority over Channel |
|
Campaign
|
string |
No |
|
Campaign name |
|
CampaignId
|
int32 |
No |
|
Campaign id; takes priority over Campaign and Channel |
|
Category
|
string |
No |
|
Contact category, applied only to new contacts |
|
DigitalTrackingId
|
string |
No |
|
Marketing tracking id for the contact |
|
Unsubscribed
|
boolean |
No |
|
True if the customer opted out of email |
|
Tags
|
String[] |
No |
|
Contact tag names to add (unknown names skipped) |
|
CustomFields
|
CustomField[]
|
No |
|
Contact custom field values, matched by Name |
|
Service
|
string |
Yes |
|
Name of an active service to book |
|
ServiceAgentEmail
|
string |
No |
|
Email of the agent to assign; unassigned if no match |
|
ScheduledStart
|
datetime |
Yes |
|
Appointment start, org-local, e.g. 2026-11-10T09:00 |
|
Duration
|
int32 |
No |
|
Length in minutes; defaults to service duration |
|
Quantity
|
double |
No |
|
Service quantity |
|
FirstAvailable
|
boolean |
No |
|
Flags the booking as first available |
|
ConfirmationUri
|
string |
No |
|
Where to send the confirmation, e.g. mailto: address |
|
EnRouteUri
|
string |
No |
|
Where to send en-route notices |
|
InternalNotes
|
string |
No |
|
Internal notes on the appointment |
|
CustomerNotes
|
string |
No |
|
Customer-facing notes on the appointment |
|
CallCenterTransactionId
|
int32 |
No |
|
Call center call id to link to |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
slotsearch
POST https://serviceminder.com/api/appointments/slotsearch
| Parameter |
Type |
Required |
Direction |
Description |
|
ServiceName
|
string |
Yes, or ServiceId |
Input & output |
Service name; echoed back as the matched service |
|
ContactId
|
int32 |
Yes |
|
Customer to find slots for |
|
ServiceId
|
int32 |
Yes, or ServiceName |
|
Service to search slots for |
|
SearchDate
|
string |
No |
|
First day to search; defaults to tomorrow (org-local) |
|
Duration
|
string |
No |
|
Override job length, e.g. 90 or 1h 30m; defaults to service duration |
|
Timeframe
|
string |
No |
|
Limit to a time window, e.g. 8:00 am - 12:00 pm |
|
SlotWindowDays
|
int32 |
No |
|
How many days to search; defaults to org setting |
|
Slots
|
AppointmentSlot[]
|
No |
Output |
Available appointment times |
|
AddOnParts
|
AddOnPart[]
|
No |
|
Add-on parts whose skills the agent must have (only PartId used) |
|
NotificationOptions
|
String[] |
No |
Output |
Notification methods available for the customer |
|
RootProposalId
|
int32 |
No |
|
Proposal whose line skills the agent must have |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
update
POST https://serviceminder.com/api/appointments/update
| Parameter |
Type |
Required |
Direction |
Description |
|
AppointmentId
|
int32 |
Yes |
|
Appointment to update |
|
ServiceName
|
string |
To reschedule, or ServiceId |
|
Service, by exact name |
|
ContactId
|
int32 |
To reschedule |
|
Customer the appointment is for |
|
ServiceId
|
int32 |
To reschedule, or ServiceName |
|
Service. Replaces the current one on a reschedule |
|
Duration
|
string |
No |
|
Visit length. Resets to the service's if left out on a reschedule |
|
Quantity
|
double |
No |
|
Units of the service. Set to 0 if left out on a reschedule |
|
NotificationUri
|
string |
No |
|
Where to send on-the-way messages. Kept if left out |
|
ThirdPartyUrl
|
string |
No |
|
Link saved on the appointment |
|
Slots
|
AppointmentSlot[]
|
To reschedule |
|
New start time and technician. Technician is unassigned if left out |
|
AddOnParts
|
AddOnPart[]
|
When UpdateLines is true |
|
Line items that replace the current ones |
|
UpdateLines
|
boolean |
No |
|
Set true to replace line items with AddOnParts |
|
UpdateActuals
|
boolean |
No |
|
Set true to update ActualStart and ActualFinish |
|
ActualStart
|
datetime |
When UpdateActuals is true |
|
When work started. Cleared if left out |
|
ActualFinish
|
datetime |
No |
|
When work finished. Needs ActualStart |
|
UpdateNote
|
string |
No |
|
Note added on a reschedule |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
find
POST https://serviceminder.com/api/blogs/find
| Parameter |
Type |
Required |
Direction |
Description |
|
NameSearch
|
string |
No |
|
Partial match on blog title |
|
DateSearch
|
string |
No |
|
Exact blog date, e.g. 2026-11-10 |
|
Matches
|
Blog[]
|
No |
Output |
Blog entries found, newest first |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
get
POST https://serviceminder.com/api/blogs/get
| Parameter |
Type |
Required |
Direction |
Description |
|
IdSearch
|
string |
Yes |
|
Blog entry id or slug |
|
Matches
|
Blog[]
|
No |
Output |
The blog entry, or empty if not found |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
all
POST https://serviceminder.com/api/cancelreasons/all
| Parameter |
Type |
Required |
Direction |
Description |
|
Matches
|
CancelReason[]
|
No |
Output |
Cancel reasons for the org |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
all
POST https://serviceminder.com/api/channels/all
| Parameter |
Type |
Required |
Direction |
Description |
|
Channels
|
Channel[]
|
No |
Output |
Active channels with all their campaigns |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
bulkupdate
POST https://serviceminder.com/api/channels/bulkupdate
| Parameter |
Type |
Required |
Direction |
Description |
|
Updates
|
CampaignUpdate[]
|
Yes |
Input & output |
Campaign budget/actual updates; each gets a Results line |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
campaigns
POST https://serviceminder.com/api/channels/campaigns
| Parameter |
Type |
Required |
Direction |
Description |
|
Channels
|
Channel[]
|
No |
Output |
Active channels with their current campaigns |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
addnote
POST https://serviceminder.com/api/contacts/addnote
| Parameter |
Type |
Required |
Direction |
Description |
|
ContactId
|
int32 |
Yes |
|
Contact to add the note to |
|
Note
|
note
|
Yes |
Input & output |
Note to add (Title and Body); echoed back |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
addtags
POST https://serviceminder.com/api/contacts/addtags
| Parameter |
Type |
Required |
Direction |
Description |
|
ContactId
|
int32 |
Yes |
|
Contact to add tags to |
|
TagList
|
Tag[]
|
Yes |
Input & output |
Tags to add, by Id or Name; returns all org tags |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
addupdate
POST https://serviceminder.com/api/contacts/addupdate
| Parameter |
Type |
Required |
Direction |
Description |
|
Matches
|
Contact[]
|
Yes |
Input & output |
Contacts to add or update; returns saved contacts |
|
ReturnPmtOnFile
|
boolean |
No |
|
Include card-on-file details in results |
|
DistributeLead
|
boolean |
No |
|
Route new contacts to an org by postal code (branding keys) |
|
Errors
|
ApiFieldError[]
|
No |
Output |
Per-field sms_consent errors, when rejected |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
listtags
POST https://serviceminder.com/api/contacts/listtags
| Parameter |
Type |
Required |
Direction |
Description |
|
TagList
|
Tag[]
|
No |
Output |
All contact tags for the org |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
locate
POST https://serviceminder.com/api/contacts/locate
| Parameter |
Type |
Required |
Direction |
Description |
|
NameSearch
|
string |
No |
|
Partial match on contact name |
|
PhoneSearch
|
string |
No |
|
Partial match on phone or alt phone; needs 6+ digits |
|
EmailSearch
|
string |
No |
|
Partial match on email |
|
AddressSearch
|
string |
No |
|
Partial match on service address line 1 |
|
IdSearch
|
int32 |
No |
|
Find one contact by id |
|
DigitalTrackingIdSearch
|
string |
No |
|
Find contacts by digital tracking id |
|
CreatedFrom
|
datetime |
No |
|
Created on or after this date, e.g. 2026-11-01 |
|
CreatedThrough
|
datetime |
No |
|
Created on or before this date (whole day) |
|
CategorySearch
|
string |
No |
|
Exact contact category name |
|
TagSearch
|
String[] |
No |
|
Tag names; matches contacts with any of them |
|
Matches
|
Contact[]
|
No |
Output |
Contacts found |
|
ReturnPmtOnFile
|
boolean |
No |
|
Include card-on-file details in results |
|
Skip
|
int32 |
No |
Input & output |
Number of matches to skip; default 0 |
|
Limit
|
int32 |
No |
Input & output |
Max matches to return; default 100, max 500 |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
logcall
POST https://serviceminder.com/api/contacts/logcall
| Parameter |
Type |
Required |
Direction |
Description |
|
call
|
string |
Yes |
|
The call as a JSON string, including ApiKey, CallId and CallerNumber |
removetags
POST https://serviceminder.com/api/contacts/removetags
| Parameter |
Type |
Required |
Direction |
Description |
|
ContactId
|
int32 |
Yes |
|
Contact to remove tags from |
|
TagList
|
Tag[]
|
Yes |
Input & output |
Tags to remove, by Id or Name; returns all org tags |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
upload
POST https://serviceminder.com/api/contacts/upload
| Parameter |
Type |
Required |
Direction |
Description |
|
upload
|
upload
|
Yes |
Input & output |
Upload details: ApiKey, ContactId, optional AppointmentId, TaskId, Note, TagIds |
|
files
|
ienumerable`1 |
Yes |
|
Files to attach (multipart form-data) |
all
POST https://serviceminder.com/api/customfields/all
| Parameter |
Type |
Required |
Direction |
Description |
|
Matches
|
CustomField[]
|
No |
Output |
Active custom fields for the org |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
clear
POST https://serviceminder.com/api/datasubscriber/clear
| Parameter |
Type |
Required |
Direction |
Description |
|
ClearThroughId
|
int32 |
Yes |
|
Clear all events up to and including this event Id |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
downloadstatus
POST https://serviceminder.com/api/datasubscriber/downloadstatus
| Parameter |
Type |
Required |
Direction |
Description |
|
DownloadId
|
string |
Yes |
|
Id returned by startdownload |
|
Records
|
int32 |
No |
Output |
Number of rows in the export |
|
Ready
|
boolean |
No |
Output |
True when the file is ready to fetch |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
fetch
POST https://serviceminder.com/api/datasubscriber/fetch
| Parameter |
Type |
Required |
Direction |
Description |
|
EventCount
|
int32 |
No |
|
Max number of events to return; all if omitted |
|
Events
|
DataSubscriberEvent[]
|
No |
Output |
Queued events not yet cleared, oldest first |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
forecasts
POST https://serviceminder.com/api/datasubscriber/forecasts
| Parameter |
Type |
Required |
Direction |
Description |
|
Organizations
|
OrganizationForecast[]
|
No |
Output |
Monthly revenue targets for each active organization in the brand |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
getdownload
POST https://serviceminder.com/api/datasubscriber/getdownload
| Parameter |
Type |
Required |
Direction |
Description |
|
DownloadId
|
string |
Yes |
|
Id returned by startdownload |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
postalcodes
POST https://serviceminder.com/api/datasubscriber/postalcodes
| Parameter |
Type |
Required |
Direction |
Description |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
startdownload
POST https://serviceminder.com/api/datasubscriber/startdownload
| Parameter |
Type |
Required |
Direction |
Description |
|
CreatedFrom
|
datetime |
No |
|
Only records created on or after this date |
|
CreatedThrough
|
datetime |
No |
|
Only records created on or before this date |
|
UpdatedFrom
|
datetime |
No |
|
Only records updated on or after this date |
|
UpdatedThrough
|
datetime |
No |
|
Only records updated on or before this date |
|
DateFrom
|
datetime |
No |
|
Document date from (invoices, invoice-lines, proposals, deposits, payments) |
|
DateThrough
|
datetime |
No |
|
Document date through (invoices, invoice-lines, proposals, deposits, payments) |
|
CompletedBefore
|
datetime |
No |
|
Proposals completed before this date |
|
CompletedAfter
|
datetime |
No |
|
Proposals completed after this date |
|
OrganizationId
|
int32 |
No |
|
Limit the export to one organization in the brand |
|
RowId
|
int32 |
No |
|
Start from this record Id (for paging large exports) |
|
Appointments
|
downloadappointmentsettings
|
No |
|
Extra filters for appointments and appointment-lines |
|
Contacts
|
downloadcontactsettings
|
No |
|
Extra filters for contacts |
|
Deposits
|
downloaddepositsettings
|
No |
|
Extra options for deposits |
|
Invoices
|
downloadinvoicesettings
|
No |
|
Extra filters for invoices |
|
InvoiceLines
|
downloadinvoicelinesettings
|
No |
|
Extra filters for invoice-lines |
|
Proposals
|
downloadproposalsettings
|
No |
|
Extra filters for proposals |
|
Services
|
downloadservicesettings
|
No |
|
Extra options for services |
|
Parts
|
downloadpartsettings
|
No |
|
Extra options for parts |
|
Organizations
|
downloadorganizationsettings
|
No |
|
Extra options for organizations |
|
CampaignBudgets
|
downloadcampaignbudgetsettings
|
Yes, for campaign-budgets |
|
Year to export for campaign-budgets |
|
RevenueForecasts
|
downloadrevenueforecastsettings
|
Yes, for revenue-forecasts |
|
Year to export for revenue-forecasts |
|
ChannelsCampaigns
|
downloadchannelscampaignssettings
|
No |
|
Extra options for channels-campaigns |
|
Kind
|
string |
Yes |
|
Which brand-wide export to build, e.g. appointments, contacts, invoices |
|
DownloadId
|
string |
No |
Output |
Id to pass to downloadstatus and getdownload |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
downloadstatus
POST https://serviceminder.com/api/download/downloadstatus
| Parameter |
Type |
Required |
Direction |
Description |
|
DownloadId
|
string |
Yes |
|
Id returned by startdownload |
|
Records
|
int32 |
No |
Output |
Number of rows in the export |
|
Ready
|
boolean |
No |
Output |
True when the file is ready to fetch |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
getdownload
POST https://serviceminder.com/api/download/getdownload
| Parameter |
Type |
Required |
Direction |
Description |
|
DownloadId
|
string |
Yes |
|
Id returned by startdownload |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
startdownload
POST https://serviceminder.com/api/download/startdownload
| Parameter |
Type |
Required |
Direction |
Description |
|
CreatedFrom
|
datetime |
No |
|
Only records created (booked) on or after this date |
|
CreatedThrough
|
datetime |
No |
|
Only records created (booked) on or before this date |
|
UpdatedFrom
|
datetime |
No |
|
Only records updated on or after this date |
|
UpdatedThrough
|
datetime |
No |
|
Only records updated on or before this date |
|
DateFrom
|
datetime |
No |
|
Document date from (invoices, proposals) |
|
DateThrough
|
datetime |
No |
|
Document date through (invoices, proposals) |
|
Appointments
|
downloadappointmentsettings
|
No |
|
Extra filters for appointments |
|
Contacts
|
downloadcontactsettings
|
No |
|
Extra filters for contacts |
|
Invoices
|
downloadinvoicesettings
|
No |
|
Extra filters for invoices |
|
InvoiceLines
|
downloadinvoicelinesettings
|
No |
|
Extra filters for invoice-lines |
|
Proposals
|
downloadproposalsettings
|
No |
|
Extra filters for proposals |
|
Kind
|
string |
Yes |
|
Export to build: appointments, contacts, invoices or proposals |
|
DownloadId
|
string |
No |
Output |
Id to pass to downloadstatus and getdownload |
|
UserId
|
int32 |
Yes |
|
User the export runs as; must have access to the org |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
get
POST https://serviceminder.com/api/invoice/get
| Parameter |
Type |
Required |
Direction |
Description |
|
InvoiceId
|
int32 |
Yes |
|
ID of the invoice |
|
IncludeContact
|
boolean |
No |
|
Include the customer's details |
|
Invoice
|
invoice
|
No |
Output |
The invoice |
|
Payments
|
Payment[]
|
No |
Output |
Payments on the invoice |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
import
POST https://serviceminder.com/api/invoice/import
| Parameter |
Type |
Required |
Direction |
Description |
|
Invoice
|
invoice
|
Yes |
|
The invoice to create |
|
InvoiceId
|
int32 |
No |
Output |
ID of the new invoice |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
query
POST https://serviceminder.com/api/invoice/query
| Parameter |
Type |
Required |
Direction |
Description |
|
FromDate
|
datetime |
No |
|
Invoice date on or after |
|
ThroughDate
|
datetime |
No |
|
Invoice date on or before (whole day) |
|
UpdatedFrom
|
datetime |
No |
|
Updated on or after |
|
UpdatedThrough
|
datetime |
No |
|
Updated before this time |
|
ContactId
|
int32 |
No |
|
Only invoices for this customer |
|
Status
|
invoicestatus |
No |
|
0 Voided, 1 Unapproved, 2 Paid, 3 Open |
|
InvoiceType
|
invoicetype |
No |
|
0 Invoice, 1 Credit memo, 2 Refund, 3 Write-off |
|
Skip
|
int32 |
No |
Input & output |
Rows to skip for paging. Default 0 |
|
Take
|
int32 |
No |
Input & output |
Rows to return. Default and max 500 |
|
IncludeContact
|
boolean |
No |
|
Include each invoice's customer details |
|
IncludeAssociatedAppointmentIds
|
boolean |
No |
|
Include related appointment IDs |
|
Count
|
int32 |
No |
Output |
Total matches before paging |
|
Invoices
|
Invoice[]
|
No |
Output |
Matching invoices, ordered by Id |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
cancel
POST https://serviceminder.com/api/organizations/cancel
| Parameter |
Type |
Required |
Direction |
Description |
|
OrganizationId
|
int32 |
Yes |
|
Organization to cancel; must be in the key's brand |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
create
POST https://serviceminder.com/api/organizations/create
| Parameter |
Type |
Required |
Direction |
Description |
|
OrganizationId
|
int32 |
No |
Output |
Id of the new organization |
|
LocationId
|
string |
No |
|
Brand's own location Id for this organization |
|
Name
|
string |
Yes |
|
Organization name (also used as internal name) |
|
LegalEntityName
|
string |
No |
|
Legal business name |
|
TaxpayerID
|
string |
No |
|
Taxpayer Id (EIN) |
|
PrimaryPhone
|
string |
No |
|
Main phone; non-digits are stripped |
|
Email
|
string |
No |
|
Organization email |
|
Website
|
string |
No |
|
Organization website |
|
Timezone
|
string |
Yes |
|
Part of a Windows time zone display name, e.g. Eastern Time |
|
StartAddress
|
address
|
Yes |
|
Default start address for routing |
|
Radius
|
int32 |
No |
|
Self-service radius in miles, max 100 |
|
BillingAddress
|
address
|
Yes |
|
Billing address |
|
OpenTimeGranularity
|
int32 |
No |
|
Open-time appointment suggestion granularity |
|
PostalCodes
|
string |
No |
|
Service-area postal codes, comma, semicolon or newline separated |
|
ServiceAgents
|
ServiceAgent[]
|
Yes (may be empty) |
|
Service agents with their time slots |
|
Services
|
Service[]
|
Yes (may be empty) |
|
Services to create |
|
Users
|
User[]
|
Yes (may be empty) |
|
Users to add; existing users matched by email |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
details
POST https://serviceminder.com/api/organizations/details
| Parameter |
Type |
Required |
Direction |
Description |
|
OrganizationId
|
int32 |
Yes, or LocationId |
Input & output |
Organization to look up |
|
LocationId
|
string |
Yes, or OrganizationId |
Input & output |
Brand's location Id; exact match |
|
Name
|
string |
No |
Output |
Public name |
|
InternalName
|
string |
No |
Output |
Internal name |
|
LegalEntityName
|
string |
No |
Output |
Legal business name |
|
TaxpayerID
|
string |
No |
Output |
Taxpayer Id (EIN) |
|
OpenSince
|
datetime |
No |
Output |
Date the organization opened |
|
PrimaryPhone
|
string |
No |
Output |
Main phone |
|
Email
|
string |
No |
Output |
Organization email |
|
Website
|
string |
No |
Output |
Organization website |
|
Timezone
|
string |
No |
Output |
Time zone Id, e.g. Eastern Standard Time |
|
StartAddress
|
address
|
No |
Output |
Default start address |
|
Radius
|
int32 |
No |
Output |
Self-service radius in miles |
|
SlotSearchWindowDays
|
int32 |
No |
Output |
How many days ahead slot search looks |
|
BillingAddress
|
address
|
No |
Output |
Billing address |
|
OpenTimeGranularity
|
int32 |
No |
Output |
Open-time appointment suggestion granularity |
|
PostalCodes
|
string |
No |
Output |
Service-area postal codes |
|
Users
|
User[]
|
No |
Output |
Active users of the organization |
|
CustomFields
|
CustomField[]
|
No |
Output |
Organization custom field values (Name, Value, Type) |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
query
POST https://serviceminder.com/api/organizations/query
| Parameter |
Type |
Required |
Direction |
Description |
|
PublicName
|
string |
No |
|
Filter: public name contains this text |
|
InternalName
|
string |
No |
|
Filter: internal name contains this text |
|
LocationId
|
string |
No |
|
Filter: location Id contains this text |
|
PostalCode
|
string |
No |
|
Only organizations serving this postal code |
|
IncludeInactive
|
boolean |
No |
|
Include inactive organizations; default false |
|
Organizations
|
OrganizationDetails[]
|
No |
Output |
Matching organizations in the brand |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
update
POST https://serviceminder.com/api/organizations/update
| Parameter |
Type |
Required |
Direction |
Description |
|
OrganizationId
|
int32 |
Yes |
|
Organization to update; must be in the key's brand |
|
Name
|
string |
No |
|
New public name; blank leaves it unchanged |
|
PrimaryPhone
|
string |
No |
|
New main phone; blank leaves it unchanged |
|
Email
|
string |
No |
|
New email; blank leaves it unchanged |
|
Website
|
string |
No |
|
New website; blank leaves it unchanged |
|
PostalCodes
|
string |
No |
|
Full replacement list of service-area postal codes |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
details
POST https://serviceminder.com/api/part/details
| Parameter |
Type |
Required |
Direction |
Description |
|
Id
|
int32 |
Yes |
|
ID of the part |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
getdimension
POST https://serviceminder.com/api/part/getdimension
| Parameter |
Type |
Required |
Direction |
Description |
|
DimensionId
|
int32 |
Yes |
|
Store item dimension to return |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
getpartdimensions
POST https://serviceminder.com/api/part/getpartdimensions
| Parameter |
Type |
Required |
Direction |
Description |
|
PartId
|
int32 |
Yes |
|
Part whose dimensions to return |
|
Dimensions
|
string |
No |
|
Selected values as dimensionId|valueId pairs, comma-separated, e.g. 12|40,13|51 |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
import
POST https://serviceminder.com/api/payment/import
| Parameter |
Type |
Required |
Direction |
Description |
|
Payment
|
payment
|
Yes |
|
The payment to record |
|
PaymentId
|
int32 |
No |
Output |
ID of the new payment |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
query
POST https://serviceminder.com/api/payment/query
| Parameter |
Type |
Required |
Direction |
Description |
|
FromDate
|
datetime |
No |
|
Payment date on or after |
|
ThroughDate
|
datetime |
No |
|
Payment date on or before (whole day) |
|
CreatedFrom
|
datetime |
No |
|
Recorded on or after |
|
CreatedThrough
|
datetime |
No |
|
Recorded on or before (whole day) |
|
ContactId
|
int32 |
No |
|
Only payments for this customer |
|
InvoiceId
|
int32 |
No |
|
Only payments on this invoice |
|
Skip
|
int32 |
No |
Input & output |
Rows to skip for paging. Default 0 |
|
Take
|
int32 |
No |
Input & output |
Rows to return. Default and max 500 |
|
Count
|
int32 |
No |
Output |
Total matches before paging |
|
Payments
|
Payment[]
|
No |
Output |
Matching payments, ordered by Id |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
accept
POST https://serviceminder.com/api/proposal/accept
| Parameter |
Type |
Required |
Direction |
Description |
|
ProposalId
|
int32 |
Yes |
|
Proposal to accept |
|
Name
|
string |
Yes |
|
Name of the person accepting |
|
SignatureData
|
string |
No |
|
Signature: image/jsignature;base30, data URI, or url,… |
|
IpAddress
|
string |
No |
|
IP address of the person accepting |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
alltemplates
POST https://serviceminder.com/api/proposal/alltemplates
| Parameter |
Type |
Required |
Direction |
Description |
|
Templates
|
ProposalTemplate[]
|
No |
Output |
Active proposal templates, sorted by name |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
create
POST https://serviceminder.com/api/proposal/create
| Parameter |
Type |
Required |
Direction |
Description |
|
Id
|
int32 |
No |
Output |
ID of the new proposal |
|
ContactId
|
int32 |
Yes |
|
Customer the proposal is for |
|
ClientUrl
|
string |
No |
Output |
Customer-facing link to view and accept |
|
Date
|
string |
No |
|
Proposal date, e.g. 2026-11-10. Defaults to today |
|
ServiceId
|
int32 |
Yes, or ServiceName |
|
Service to quote |
|
ServiceName
|
string |
Yes, or ServiceId |
Input & output |
Service to quote, by exact name. Returns the matched name |
|
Description
|
string |
No |
|
Service line description |
|
BasePrice
|
decimal |
No |
|
Overrides the service base price when not 0 |
|
UnitPrice
|
decimal |
No |
|
Overrides the service unit price when not 0 |
|
Quantity
|
double |
No |
|
Units of the service. Ignored if the customer has a quantity override |
|
NamedTaxRate
|
namedtaxrate
|
No |
|
Tax rate to apply, by Id |
|
Title
|
string |
No |
|
Proposal title |
|
DeliveryUri
|
string |
No |
|
Email address to send the proposal to |
|
OwnerUserId
|
int32 |
No |
|
Active user in your org to own it |
|
ServiceAgentId
|
int32 |
No |
|
Active service agent to assign |
|
DepositRate
|
double |
No |
|
Required deposit percent. Defaults to org setting |
|
DepositRequired
|
boolean |
No |
|
Require a deposit. Defaults to org setting |
|
ProposalLines
|
ProposalLine[]
|
No |
|
Part lines to add |
|
ProposalNotes
|
ProposalNote[]
|
No |
|
Internal notes to add |
|
CustomerNotes
|
string |
No |
|
Notes shown to the customer |
|
ChangeOrderForProposalId
|
int32 |
No |
|
Proposal this is a change order for |
|
BundleWithProposalId
|
int32 |
No |
|
Proposal to bundle this one with |
|
IncludePaymentPlans
|
boolean |
No |
|
Attach the org's auto-include payment plans |
|
PaymentPlanRequired
|
boolean |
No |
|
Require a payment plan. Needs IncludePaymentPlans |
|
DistributeParts
|
boolean |
No |
|
Spread parts across subscription visits |
|
CustomFields
|
CustomField[]
|
No |
|
Proposal custom field values, by Name |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
details
POST https://serviceminder.com/api/proposal/details
| Parameter |
Type |
Required |
Direction |
Description |
|
Id
|
int32 |
Yes |
Input & output |
ID of the proposal to fetch |
|
ContactId
|
int32 |
No |
Output |
Customer the proposal is for |
|
ClientUrl
|
string |
No |
Output |
Customer-facing link to view and accept |
|
Date
|
string |
No |
Output |
Proposal date, e.g. 2026-11-10 |
|
Status
|
string |
No |
Output |
Current status, as shown in the app |
|
AcceptedDate
|
string |
No |
Output |
Date the customer accepted, if accepted |
|
ServiceId
|
int32 |
No |
Output |
Service on the proposal |
|
ServiceName
|
string |
No |
Output |
Name of the service |
|
Description
|
string |
No |
Output |
Service line description |
|
Duration
|
int32 |
No |
Output |
Estimated duration in minutes |
|
BasePrice
|
decimal |
No |
Output |
Service base price |
|
UnitPrice
|
decimal |
No |
Output |
Service unit price |
|
Quantity
|
double |
No |
Output |
Service quantity |
|
Tax
|
decimal |
No |
Output |
Total tax |
|
NamedTaxRate
|
namedtaxrate
|
No |
Output |
Named tax rate applied, if any |
|
Taxable
|
boolean |
No |
Output |
True if a tax rate applies |
|
Title
|
string |
No |
Output |
Proposal title |
|
DeliveryUri
|
string |
No |
Output |
Email address the proposal is sent to |
|
OwnerUserId
|
int32 |
No |
Output |
User who owns the proposal |
|
ServiceAgentId
|
int32 |
No |
Output |
Assigned service agent |
|
DepositRequired
|
boolean |
No |
Output |
Whether a deposit is required to accept |
|
SelectedSolution
|
idname
|
No |
Output |
Chosen part solution, if any |
|
ProposalLines
|
ProposalLine[]
|
No |
Output |
Part lines on the proposal |
|
ChangeOrders
|
ProposalSummary[]
|
No |
Output |
Change orders made against this proposal |
|
BundledProposals
|
ProposalSummary[]
|
No |
Output |
Proposals bundled with this one |
|
ProposalNotes
|
ProposalNote[]
|
No |
Output |
Internal notes on the proposal |
|
CustomerNotes
|
string |
No |
Output |
Notes shown to the customer |
|
ChangeOrderForProposalId
|
int32 |
No |
Output |
Original proposal, if this is a change order |
|
BundleWithProposalId
|
int32 |
No |
Output |
Proposal this one is bundled with |
|
PaymentPlanRequired
|
boolean |
No |
Output |
Whether a payment plan must be chosen |
|
CustomFields
|
CustomField[]
|
No |
Output |
Proposal custom field values |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
query
POST https://serviceminder.com/api/proposal/query
| Parameter |
Type |
Required |
Direction |
Description |
|
Scope
|
string |
Yes |
|
Which proposals: all, open, accepted, won, unscheduled, projects |
|
FromDate
|
datetime |
No |
|
Proposal date on or after |
|
ThroughDate
|
datetime |
No |
|
Proposal date on or before (whole day) |
|
FromAccepted
|
datetime |
No |
|
Accepted on or after |
|
ThroughAccepted
|
datetime |
No |
|
Accepted before this time |
|
UpdatedFrom
|
datetime |
No |
|
Updated on or after |
|
UpdatedThrough
|
datetime |
No |
|
Updated before this time |
|
OwnerUserId
|
int32 |
No |
|
Only proposals owned by this user |
|
ContactId
|
int32 |
No |
|
Only proposals for this customer |
|
Skip
|
int32 |
No |
Input & output |
Rows to skip for paging. Default 0 |
|
Take
|
int32 |
No |
Input & output |
Rows to return. Default and max 500 |
|
IncludeContact
|
boolean |
No |
|
Include each proposal's customer details |
|
Count
|
int32 |
No |
Output |
Total matches before paging |
|
Proposals
|
Proposal[]
|
No |
Output |
Matching proposals, ordered by Id |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
quote
POST https://serviceminder.com/api/proposal/quote
| Parameter |
Type |
Required |
Direction |
Description |
|
ContactId
|
int32 |
Yes |
|
Customer to quote |
|
ServiceId
|
int32 |
Yes, or ServiceName or ProposalTemplateId |
|
Service to quote |
|
ServiceName
|
string |
Yes, or ServiceId or ProposalTemplateId |
Input & output |
Service by exact name. Wins over ServiceId. Returns the matched name |
|
ProposalTemplateId
|
int32 |
Yes, when ReturnProposal |
|
Proposal template to build from. Its service is used if none given |
|
ReturnDates
|
boolean |
No |
|
Return the future visit dates |
|
ReturnProposal
|
boolean |
No |
|
Return a proposal built from the template |
|
ScheduleDates
|
SubscriptionDate[]
|
No |
Output |
Future visit dates and pricing |
|
Proposal
|
proposal
|
No |
Output |
Proposal built from the template |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
update
POST https://serviceminder.com/api/proposal/update
| Parameter |
Type |
Required |
Direction |
Description |
|
Id
|
int32 |
Yes |
|
ID of the proposal to update |
|
ServiceId
|
int32 |
No |
|
New service. Keeps the current one if omitted |
|
ServiceName
|
string |
No |
Input & output |
New service, by exact name. Returns the service name |
|
Description
|
string |
No |
|
Service line description. Kept if omitted |
|
BasePrice
|
decimal |
No |
|
Service base price. Becomes 0 if omitted |
|
UnitPrice
|
decimal |
Yes, or it becomes 0 |
|
Service unit price |
|
Quantity
|
double |
Yes, or it becomes 0 |
|
Service quantity |
|
NamedTaxRate
|
namedtaxrate
|
No |
|
Tax rate to apply, by Id. Used only when Taxable |
|
Taxable
|
boolean |
Yes, if taxed |
|
Must be true to keep tax. False clears the tax rate |
|
Title
|
string |
No |
|
Proposal title. Kept if omitted |
|
DeliveryUri
|
string |
No |
|
Email address to send the proposal to |
|
ProposalLines
|
ProposalLine[]
|
Yes, to keep lines |
|
Full set of part lines. Replaces all existing lines |
|
CustomerNotes
|
string |
No |
|
Notes shown to the customer. Kept if omitted |
|
ChangeOrderForProposalId
|
int32 |
No |
|
Original proposal. Cleared if omitted |
|
BundleWithProposalId
|
int32 |
No |
|
Proposal to bundle with. Cleared if omitted |
|
CustomFields
|
CustomField[]
|
No |
|
Proposal custom field values, by Name |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
upload
POST https://serviceminder.com/api/proposal/upload
| Parameter |
Type |
Required |
Direction |
Description |
|
upload
|
upload
|
Yes |
Input & output |
Upload fields: ApiKey, ProposalId, Note, TagIds; returns UploadIds |
|
files
|
ienumerable`1 |
Yes, to upload anything |
|
Files as multipart form data. PNG/JPEG become pictures, others documents |
all
POST https://serviceminder.com/api/serviceagents/all
| Parameter |
Type |
Required |
Direction |
Description |
|
Matches
|
ServiceAgent[]
|
No |
Output |
Active, non-internal service agents |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
all
POST https://serviceminder.com/api/services/all
| Parameter |
Type |
Required |
Direction |
Description |
|
IncludeParts
|
boolean |
No |
|
Include each service's parts; default true |
|
IncludeInactive
|
boolean |
No |
|
Also return inactive services; default false |
|
Matches
|
Service[]
|
No |
Output |
Services for the org |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
details
POST https://serviceminder.com/api/services/details
| Parameter |
Type |
Required |
Direction |
Description |
|
Id
|
int32 |
Yes |
|
Service to return |
|
Matches
|
Service[]
|
No |
Output |
The service, with parts; empty if not found |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
channelcampaigns
POST https://serviceminder.com/api/settings/channelcampaigns
| Parameter |
Type |
Required |
Direction |
Description |
|
Channels
|
Channel[]
|
No |
Output |
Active channels with their current campaigns |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
channels
POST https://serviceminder.com/api/settings/channels
| Parameter |
Type |
Required |
Direction |
Description |
|
LeadSourceCategories
|
Channel[]
|
No |
Output |
Same list as Channels |
|
Channels
|
Channel[]
|
No |
Output |
All channels (lead sources), Id and Name only |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
features
POST https://serviceminder.com/api/settings/features
| Parameter |
Type |
Required |
Direction |
Description |
|
Features
|
String[] |
No |
Output |
Feature names enabled by the org's billing plan |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
leadsourcecategories
POST https://serviceminder.com/api/settings/leadsourcecategories
| Parameter |
Type |
Required |
Direction |
Description |
|
LeadSourceCategories
|
Channel[]
|
No |
Output |
All channels (lead sources), Id and Name only |
|
Channels
|
Channel[]
|
No |
Output |
Same list as LeadSourceCategories |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
namedtaxrates
POST https://serviceminder.com/api/settings/namedtaxrates
| Parameter |
Type |
Required |
Direction |
Description |
|
NamedTaxRates
|
NamedTaxRate[]
|
No |
Output |
The org's named tax rates |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
radiuscities
POST https://serviceminder.com/api/settings/radiuscities
| Parameter |
Type |
Required |
Direction |
Description |
|
Cities
|
City[]
|
No |
Output |
Cities and postal codes in the org's service area |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
radiuspostalcodes
POST https://serviceminder.com/api/settings/radiuspostalcodes
| Parameter |
Type |
Required |
Direction |
Description |
|
PostalCodes
|
String[] |
No |
Output |
Distinct postal codes in the org's service area |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
complete
POST https://serviceminder.com/api/task/complete
| Parameter |
Type |
Required |
Direction |
Description |
|
TaskId
|
int32 |
Yes |
|
Open task to complete; must belong to the API key's organization |
|
Note
|
string |
No |
|
Completion note; omit to keep the existing note |
|
Task
|
task
|
No |
Output |
The task after completion |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
create
POST https://serviceminder.com/api/task/create
| Parameter |
Type |
Required |
Direction |
Description |
|
ContactId
|
int32 |
No |
|
Customer the task is for; 0 or omitted = no customer |
|
Description
|
string |
Yes |
|
What the task is |
|
TaskType
|
int32 |
Yes |
|
1 = Task, 2 = Call, 3 = Email |
|
DurationMinutes
|
int32 |
No |
|
Expected length in minutes |
|
Due
|
string |
No |
|
Org-local due date and time, e.g. 2026-11-10 14:00; defaults to now |
|
Category
|
string |
No |
|
Task category name; created if it does not exist |
|
TaskId
|
int32 |
No |
Output |
Id of the new task |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
query
POST https://serviceminder.com/api/task/query
| Parameter |
Type |
Required |
Direction |
Description |
|
TaskId
|
int32 |
No |
|
Return only this task |
|
ContactId
|
int32 |
No |
|
Only tasks for this customer |
|
TaskType
|
int32 |
No |
|
Only this type: 1 = Task, 2 = Call, 3 = Email |
|
Category
|
string |
No |
|
Only tasks in this category (exact name) |
|
DueFrom
|
datetime |
No |
|
Due on or after this date/time |
|
DueThrough
|
datetime |
No |
|
Due before this date/time; equal to DueFrom = that whole day |
|
UpdatedFrom
|
datetime |
No |
|
Changed on or after this date/time |
|
UpdatedThrough
|
datetime |
No |
|
Changed before this date/time; equal to UpdatedFrom = that whole day |
|
IncludeCompleted
|
boolean |
No |
|
Also return completed tasks; default open tasks only |
|
Skip
|
int32 |
No |
Input & output |
Number of matches to skip for paging; default 0 |
|
Take
|
int32 |
No |
Input & output |
Page size; default and max 500 |
|
Count
|
int32 |
No |
Output |
Total matches before paging |
|
Tasks
|
Task[]
|
No |
Output |
Matching tasks for this page, ordered by Id |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
update
POST https://serviceminder.com/api/task/update
| Parameter |
Type |
Required |
Direction |
Description |
|
TaskId
|
int32 |
Yes |
|
Task to update; must belong to the API key's organization |
|
Description
|
string |
No |
|
New description; omit to keep |
|
TaskType
|
int32 |
No |
|
1 = Task, 2 = Call, 3 = Email; omit to keep |
|
DurationMinutes
|
int32 |
No |
|
New length in minutes, not negative; omit to keep |
|
Due
|
string |
No |
|
Org-local due date and time, e.g. 2026-11-10 14:00; omit to keep |
|
Category
|
string |
No |
|
Category name (created if missing); empty string clears it |
|
ContactId
|
int32 |
No |
|
Customer to link (same organization); 0 clears it |
|
Task
|
task
|
No |
Output |
The task after the update |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
echo
POST https://serviceminder.com/api/test/echo
| Parameter |
Type |
Required |
Direction |
Description |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
No |
Input & output |
Text to send. Returned as "Received <text>" |
all
POST https://serviceminder.com/api/user/all
| Parameter |
Type |
Required |
Direction |
Description |
|
Matches
|
User[]
|
No |
Output |
All staff users in the API key's organization |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
create
POST https://serviceminder.com/api/user/create
| Parameter |
Type |
Required |
Direction |
Description |
|
Name
|
string |
Yes |
|
User's full name |
|
Email
|
string |
Yes |
|
Login email; must not already be used by any user |
|
MobilePhone
|
string |
No |
|
Mobile phone; non-digits are stripped |
|
CreateServiceAgent
|
boolean |
No |
|
Also create an employee service agent linked to the user |
|
Role
|
string |
Yes |
|
Role name; owner/account-level roles not allowed |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
bulkdisablemfa
POST https://serviceminder.com/api/users/bulkdisablemfa
| Parameter |
Type |
Required |
Direction |
Description |
|
UserIds
|
Int32[] |
Yes |
|
Ids of users to turn MFA off for |
|
Results
|
BulkMfaResult[]
|
No |
Output |
Per-id outcome: ok or not-found-or-cross-tenant |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
bulkenablemfa
POST https://serviceminder.com/api/users/bulkenablemfa
| Parameter |
Type |
Required |
Direction |
Description |
|
UserIds
|
Int32[] |
Yes |
|
Ids of users to require MFA for |
|
Results
|
BulkMfaResult[]
|
No |
Output |
Per-id outcome: ok or not-found-or-cross-tenant |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
bulkresetmfa
POST https://serviceminder.com/api/users/bulkresetmfa
| Parameter |
Type |
Required |
Direction |
Description |
|
Confirm
|
string |
Yes |
|
Must be exactly RESET_MFA to allow the reset |
|
UserIds
|
Int32[] |
Yes |
|
Ids of users whose MFA enrollment to reset |
|
Results
|
BulkMfaResult[]
|
No |
Output |
Per-id outcome: ok or not-found-or-cross-tenant |
|
ApiKey
|
string |
Yes |
|
Your API key |
|
ResultCode
|
int32 |
|
Output |
0 = success, 1 = failure |
|
Message
|
string |
|
Output |
Why the call failed, when it fails |
accountingclasspostalcodes
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Accounting class id |
| AccountingClass |
string |
|
Accounting class name |
| TerritoryID |
string |
|
External territory id |
| PostalCodes |
String[] |
|
Postal codes assigned (empty on contact responses) |
additionalserviceagent
| Parameter |
Type |
Required |
Description |
| StartMinute |
int32 |
|
Minutes after appointment start this agent begins |
| Duration |
int32 |
|
Minutes this agent is scheduled |
| ActualStartMinute |
int32 |
|
Minutes after start this agent actually began |
| ActualDuration |
int32 |
|
Minutes this agent actually worked |
| ServiceAgent |
serviceagent
|
|
The additional agent |
addonpart
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
No |
Proposal line id (output) |
| PartId |
int32 |
Yes |
Part to add |
| Quantity |
double |
No |
Part quantity (whole numbers when queueing/booking) |
| UnitPrice |
decimal |
No |
Price per unit; 0 uses the part's price (queue/book) |
| UnitOfMeasure |
string |
No |
Part unit of measure (output) |
| RangePricing |
boolean |
No |
True if the part has quantity range pricing |
| Discount |
decimal |
No |
Discount amount off this line |
| Name |
string |
No |
Part name (output) |
address
| Parameter |
Type |
Required |
Description |
| Address1 |
string |
No |
Street address |
| Address2 |
string |
No |
Suite, unit, etc. |
| City |
string |
No |
City |
| State |
string |
No |
State or province |
| Zip |
string |
No |
Postal code |
| ApiKey |
string |
|
|
| ResultCode |
int32 |
|
|
| Message |
string |
|
|
apifielderror
| Parameter |
Type |
Required |
Description |
| Field |
string |
|
Path of the bad field, e.g. Matches[0].sms_consent |
| Message |
string |
|
Not used on nested objects |
appointmentslot
| Parameter |
Type |
Required |
Description |
| ContactId |
int32 |
No |
Customer the appointment is for |
| AppointmentId |
int32 |
No |
Appointment id |
| DateTime |
string |
Yes, when booking/updating |
Start date/time, org-local |
| DateTimeFormatted |
string |
No |
Start date/time, friendly format |
| ServiceAgentId |
int32 |
Yes, when booking a specific agent |
Assigned agent id; 0 means unassigned |
| Quantity |
double |
No |
Service quantity |
| Duration |
int32 |
No |
Length in minutes |
| ServiceAgentName |
string |
No |
Assigned agent name, or Queue |
| DurationFormatted |
string |
No |
Length, friendly format |
| ServiceId |
int32 |
No |
Service id |
| ServiceName |
string |
No |
Service name |
| Discount |
decimal |
No |
Appointment discount amount |
| Total |
decimal |
No |
Appointment price |
| NotificationUri |
string |
No |
Where en-route notices are sent |
| TipUrl |
string |
No |
Link for the customer to leave a tip |
| ThirdPartyUrl |
string |
No |
Third-party link stored on the appointment |
| TrackingUrl |
string |
No |
Link for the customer to track the agent |
| ActualStart |
string |
No |
When work actually started |
| ActualDuration |
int32 |
No |
Actual minutes worked |
| Status |
int32 |
No |
Appointment status code |
| Shadow |
boolean |
No |
True for a shadow appointment |
| DriveTimeMinutes |
int32 |
No |
Estimated drive time to this slot (slot search) |
| DriveTimeWarning |
boolean |
No |
True if drive time is unusually long (slot search) |
| ProposalId |
int32 |
No |
Internal proposal id for the appointment |
| RootProposalId |
int32 |
No |
Customer proposal the appointment came from |
| ReworkForAppointmentId |
int32 |
No |
Original appointment if this is a rework |
| CancelReasonId |
int32 |
No |
Reason the appointment was canceled |
| AddOnParts |
AddOnPart[]
|
No |
Extra parts on the appointment |
| CustomProperties |
dictionary`2 |
No |
Custom service fields, by name |
| AdditionalServiceAgents |
AdditionalServiceAgent[]
|
No |
Other agents assigned to the appointment |
| Contact |
contact
|
No |
Customer details, when IncludeContact is true |
| ApiKey |
string |
|
Not used on nested objects |
| ResultCode |
int32 |
|
Not used on nested objects |
| Message |
string |
|
Not used on nested objects |
assemblyitem
| Parameter |
Type |
Required |
Description |
| PartId |
int32 |
|
Included part id |
| PartName |
string |
|
Included part name |
| Quantity |
decimal |
|
Quantity included |
blog
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Blog entry id |
| Slug |
string |
|
URL slug |
| OrganizationId |
int32 |
|
Org that owns the entry |
| UserId |
int32 |
|
Author user id |
| Title |
string |
|
Title |
| Content |
string |
|
Body; HTML in find, raw in get |
| Date |
datetime |
|
Publish date |
| Tags |
String[] |
|
Tag titles |
| Summary |
string |
|
Short summary; HTML in find, raw in get |
| ImageThumbUrl |
string |
|
Thumbnail image URL |
| ImageFullUrl |
string |
|
Full-size image URL |
| ApiKey |
string |
|
Not used on nested objects |
| ResultCode |
int32 |
|
Not used on nested objects |
| Message |
string |
|
Not used on nested objects |
bulkmfaresult
| Parameter |
Type |
Required |
Description |
| UserId |
int32 |
|
User id from the request |
| Status |
string |
|
ok, or not-found-or-cross-tenant (user skipped) |
campaign
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Campaign id |
| Name |
string |
|
Campaign name |
| Description |
string |
|
External description (channels/campaigns only) |
| Active |
boolean |
|
Whether the campaign is active (channels/all only) |
| CampaignBudgets |
CampaignBudget[]
|
|
Budgets (channels/all only) |
| CampaignActuals |
CampaignActual[]
|
|
Actual spend (channels/all only) |
campaignactual
| Parameter |
Type |
Required |
Description |
| Amount |
decimal |
|
Not filled (always empty) |
| Year |
int32 |
|
Year of the spend |
| Month |
int32 |
|
Month of the spend, 1-12 |
| InvoiceUrl |
string |
|
Link to the spend invoice |
campaignbudget
| Parameter |
Type |
Required |
Description |
| Budget |
decimal |
|
Budget amount |
| Type |
int32 |
|
Budget period: once, monthly, quarterly, annual |
| Year |
int32 |
|
Budget year, 4 digits |
| Month |
int32 |
|
Budget month, 1-12; empty for whole year |
campaignupdate
| Parameter |
Type |
Required |
Description |
| ChannelId |
int32 |
Yes |
Channel the campaign is under |
| CampaignId |
int32 |
Yes, or CampaignName |
Campaign to update |
| CampaignName |
string |
Yes, or CampaignId |
Campaign name; created if not found on the channel |
| Year |
int32 |
Yes |
Year of the budget or actual, 4 digits |
| Month |
int32 |
Yes |
Month of the budget or actual, 1-12 |
| BudgetAmount |
decimal |
No |
Budget amount to set; needs BudgetType |
| BudgetType |
int32 |
No |
Budget period code; needs BudgetAmount |
| ActualAmount |
decimal |
No |
Actual spend to set |
| InvoiceUrl |
string |
No |
Link to the spend invoice (with ActualAmount) |
| Results |
string |
|
What was done for this update (output) |
cancelreason
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Cancel reason id |
| Reason |
string |
|
Reason text |
channel
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Channel (lead source) id |
| Name |
string |
|
Channel name |
| Description |
string |
|
Not set (always empty) |
| Campaigns |
Campaign[]
|
|
Campaigns under this channel |
city
| Parameter |
Type |
Required |
Description |
| Name |
string |
|
City name (not returned by channels/campaigns) |
| PostalCode |
string |
|
Postal code (not returned by channels/campaigns) |
contact
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
Yes, or Name, Email, Phone or Address1 |
Contact id; send to update a specific contact |
| OrganizationId |
int32 |
No |
Org the contact belongs to (output only) |
| Hash |
string |
No |
Contact's public hash key (output only) |
| Name |
string |
Yes, when creating (or Email/Phone/Address1) |
Full name |
| Nickname |
string |
No |
Nickname, up to 50 characters |
| Company |
string |
No |
Company name, up to 64 characters (input only) |
| Address1 |
string |
No |
Service address line 1 |
| Address2 |
string |
No |
Service address line 2 |
| City |
string |
No |
Service address city |
| State |
string |
No |
Service address state; US state names become codes |
| Zip |
string |
No |
Service address postal code |
| Phone |
string |
No |
Primary phone |
| AltPhone |
string |
No |
Alternate phone |
| PhoneLabel |
string |
No |
Label for the primary phone, e.g. Mobile |
| AltPhoneLabel |
string |
No |
Label for the alternate phone |
| Email |
string |
No |
Email address |
| Country |
string |
No |
Country used to clean the postal code (input only) |
| LocationID |
string |
No |
Org's external location id; input used for lead distribution |
| TerritoryID |
string |
No |
Territory id; input used for lead distribution |
| LeadSource |
string |
No |
Channel name (same as Channel) |
| Channel |
string |
No |
Channel (lead source) name |
| Campaign |
string |
No |
Campaign name |
| Category |
string |
No |
Contact category name; applied only when creating |
| ChannelId |
int32 |
No |
Channel id; used when CampaignId is not set |
| CampaignId |
int32 |
No |
Campaign id; sets channel too; must be active |
| UtmMedium |
string |
No |
UTM medium, used to pick a campaign |
| UtmSource |
string |
No |
UTM source, used to pick a campaign |
| UtmCampaign |
string |
No |
UTM campaign, used to pick a campaign |
| IsCustomer |
boolean |
No |
Whether the contact's category is a customer (output only) |
| DigitalTrackingId |
string |
No |
Digital tracking id (input only) |
| ReferredByContactId |
int32 |
No |
Referring contact id; applied only when creating |
| OwnerUserId |
int32 |
No |
Owner user id; applied only when creating |
| ReferredByHash |
string |
No |
Referring contact's hash; applied only when creating |
| ManagedByContactId |
int32 |
No |
Managing contact id; applied only when creating |
| AutoOfferCode |
string |
No |
Offer code applied automatically; empty string clears it |
| FlashMessage |
string |
No |
Alert shown on the contact, up to 64 characters |
| Unsubscribed |
boolean |
No |
Unsubscribed from email; true unsubscribes |
| NamedTaxRate |
namedtaxrate
|
No |
Tax rate for the contact (locate output only) |
| PmtOnFileKind |
string |
No |
Card-on-file type, when ReturnPmtOnFile is true |
| PmtOnFileLast4 |
string |
No |
Card-on-file last 4 digits, when ReturnPmtOnFile is true |
| PmtOnFileExpDate |
string |
No |
Card-on-file expiry date, when ReturnPmtOnFile is true |
| UpdatePaymentOnFileUrl |
string |
No |
Link for the customer to update their card (locate only) |
| DoNotText |
boolean |
No |
Opt out of marketing texts |
| DoNotEmail |
boolean |
No |
Opt out of email; true unsubscribes |
| DoNotTextTransactional |
boolean |
No |
Opted out of account texts (output only; sms-consent-api flag) |
| SmsConsent |
smsconsent
|
No |
SMS consent per category (sms-consent-api flag); send as sms_consent |
| AccountingClass |
accountingclasspostalcodes
|
No |
Assigned accounting class (addupdate output only) |
| Notes |
Note[]
|
No |
Notes; send Id to edit an existing note |
| CustomFields |
CustomField[]
|
No |
Custom field values; input needs Name and Value |
| Tags |
String[] |
No |
Tag names; unknown tags are ignored |
| ContactPictures |
ContactPicture[]
|
No |
Attached pictures (locate output only) |
| ContactDocuments |
ContactDocument[]
|
No |
Attached documents (locate output only) |
| OpenInvoices |
ServiceDocumentLink[]
|
No |
Open invoices (locate output only) |
| OpenProposals |
ServiceDocumentLink[]
|
No |
Open proposals (locate output only) |
| IsValid |
boolean |
|
Not returned by these endpoints |
| HasIdentifyingInfo |
boolean |
|
Not returned by these endpoints |
| HasIdentifyingFields |
boolean |
|
Not returned by these endpoints |
| ApiKey |
string |
|
Not used on nested objects |
| ResultCode |
int32 |
|
Not used on nested objects |
| Message |
string |
|
Not used on nested objects |
contactdocument
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Document id |
| Filename |
string |
|
File name |
| AppointmentId |
int32 |
|
Linked appointment, if any |
| TaskId |
int32 |
|
Linked task, if any |
| Notes |
string |
|
Notes saved with the document |
| CreatedAt |
datetime |
|
When it was added |
| UpdatedAt |
datetime |
|
When it was last changed |
contactpicture
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Picture id |
| Filename |
string |
|
File name |
| Notes |
string |
|
Notes saved with the picture |
| AppointmentId |
int32 |
|
Linked appointment, if any |
| TaskId |
int32 |
|
Linked task, if any |
| Width |
int32 |
|
Width in pixels |
| Height |
int32 |
|
Height in pixels |
| CreatedAt |
datetime |
|
When it was added |
| UpdatedAt |
datetime |
|
When it was last changed |
customfield
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Custom field id |
| Name |
string |
Yes, on contact input |
Field name; must match exactly on input |
| Shortcode |
string |
|
Merge shortcode for the field |
| FormField |
string |
|
Short HTML form field name |
| Value |
object |
Yes, on contact input |
Field value (contact input/output only) |
| Type |
int32 |
|
Field type code |
| TableType |
int32 |
|
What the field is attached to (customfields/all only) |
| Phase |
int32 |
|
Phase the field is collected in (customfields/all only) |
| Required |
boolean |
|
Whether the field is required (customfields/all only) |
| HelpText |
string |
|
Help text (customfields/all only) |
| CustomFieldCategory |
string |
|
Field category name (customfields/all only) |
| CheckboxListOptionId |
int32 |
|
Selected checkbox-list option id (contact output) |
| CheckboxListOptionName |
string |
|
Selected checkbox-list option name (contact output) |
| Options |
CustomFieldOption[]
|
|
Choices for dropdown and checkbox-list fields (customfields/all) |
customfieldoption
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Option id (checkbox-list options only) |
| Label |
string |
|
Display label |
| Value |
string |
|
Stored value |
datasubscriberevent
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Event Id; pass the last one to clear |
| QueuedAt |
datetime |
|
When the event was queued |
| Payload |
object |
|
Event data (JSON object) |
downloadappointmentsettings
| Parameter |
Type |
Required |
Description |
| ScheduledFrom |
datetime |
No |
Scheduled on or after this date |
| ScheduledThrough |
datetime |
No |
Scheduled on or before this date |
| CompletedFrom |
datetime |
No |
Completed on or after this date |
| CompletedThrough |
datetime |
No |
Completed on or before this date |
| Scheduled |
boolean |
No |
Include scheduled appointments |
| Completed |
boolean |
No |
Include completed appointments |
| Queued |
boolean |
No |
Include queued appointments |
| Canceled |
boolean |
No |
Include canceled appointments |
| Started |
boolean |
No |
Include started appointments |
| IncludeCustomFields |
boolean |
No |
Add appointment custom field columns |
| IncludeExcludedOrgs |
boolean |
No |
Include orgs excluded from brand reports (datasubscriber/startdownload only) |
| IncludeOrgCustomFields |
boolean |
No |
Add organization custom field columns (datasubscriber/startdownload only) |
downloadcampaignbudgetsettings
| Parameter |
Type |
Required |
Description |
| Year |
int32 |
Yes |
Budget year to export |
downloadchannelscampaignssettings
| Parameter |
Type |
Required |
Description |
| IncludeExcludedOrgs |
boolean |
No |
Include orgs excluded from brand reports |
downloadcontactsettings
| Parameter |
Type |
Required |
Description |
| InvoicedAfter |
datetime |
No |
Only contacts invoiced after this date (datasubscriber/startdownload only) |
| Tags |
string |
No |
Only contacts with these tags (datasubscriber/startdownload only) |
| WithEmails |
boolean |
No |
Only contacts that have an email |
| WithoutEmails |
boolean |
No |
Only contacts without an email |
| NationalAccountsOnly |
boolean |
No |
Only national accounts (datasubscriber/startdownload only) |
| IncludeCustomFields |
boolean |
No |
Add contact custom field columns |
| IncludeOrgCustomFields |
boolean |
No |
Add organization custom field columns (datasubscriber/startdownload only) |
| IncludeGeoZones |
boolean |
No |
Add geo zone columns |
| IncludeGeoShapes |
boolean |
No |
Add geo shape columns |
| IncludeExcludedOrgs |
boolean |
No |
Include orgs excluded from brand reports (datasubscriber/startdownload only) |
downloaddepositsettings
| Parameter |
Type |
Required |
Description |
| IncludeExcludedOrgs |
boolean |
No |
Include orgs excluded from brand reports |
downloadinvoicelinesettings
| Parameter |
Type |
Required |
Description |
| Open |
boolean |
No |
Include lines of open invoices |
| Paid |
boolean |
No |
Include lines of paid invoices |
| Voided |
boolean |
No |
Include lines of voided invoices |
| Unapproved |
boolean |
No |
Include lines of unapproved invoices |
| IncludeExcludedOrgs |
boolean |
No |
Include orgs excluded from brand reports |
downloadinvoicesettings
| Parameter |
Type |
Required |
Description |
| Open |
boolean |
No |
Include open invoices |
| Paid |
boolean |
No |
Include paid invoices |
| Voided |
boolean |
No |
Include voided invoices |
| Unapproved |
boolean |
No |
Include unapproved invoices |
| IncludeLines |
boolean |
No |
Add invoice line rows (datasubscriber/startdownload only) |
| IncludeExcludedOrgs |
boolean |
No |
Include orgs excluded from brand reports (datasubscriber/startdownload only) |
downloadorganizationsettings
| Parameter |
Type |
Required |
Description |
| IncludeExcludedOrgs |
boolean |
No |
Include orgs excluded from brand reports |
downloadpartsettings
| Parameter |
Type |
Required |
Description |
| IncludeExcludedOrgs |
boolean |
No |
Include orgs excluded from brand reports |
downloadproposalsettings
| Parameter |
Type |
Required |
Description |
| IncludeBundled |
boolean |
No |
Include bundled proposals |
| IncludeTags |
boolean |
No |
Add tag columns |
| IncludeLines |
boolean |
No |
Add proposal line rows |
| IncludeCustomFields |
boolean |
No |
Add proposal custom field columns |
| IncludeOrgCustomFields |
boolean |
No |
Add organization custom field columns (datasubscriber/startdownload only) |
| IncludeGeoZones |
boolean |
No |
Add geo zone columns |
| IncludeGeoShapes |
boolean |
No |
Add geo shape columns |
| IncludeSolutions |
boolean |
No |
Add solution columns |
| IncludeExcludedOrgs |
boolean |
No |
Include orgs excluded from brand reports (datasubscriber/startdownload only) |
| AcceptedBefore |
datetime |
No |
Accepted before this date (datasubscriber/startdownload only) |
| AcceptedAfter |
datetime |
No |
Accepted after this date (datasubscriber/startdownload only) |
| Status |
int32 |
No |
Proposal status number to filter on (datasubscriber/startdownload only) |
downloadrevenueforecastsettings
| Parameter |
Type |
Required |
Description |
| Year |
int32 |
Yes |
Forecast year to export |
downloadservicesettings
| Parameter |
Type |
Required |
Description |
| IncludeExcludedOrgs |
boolean |
No |
Include orgs excluded from brand reports |
forecast
| Parameter |
Type |
Required |
Description |
| Year |
int32 |
|
Year |
| Month |
int32 |
|
Month, 1-12 |
| Target |
decimal |
|
Revenue target for the month |
idname
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
ID |
| Name |
string |
|
Name |
invoice
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Invoice ID |
| Number |
string |
No |
Invoice number. Auto-assigned if omitted; reusing one replaces that invoice |
| Date |
datetime |
No |
Invoice date. Defaults to today on import |
| DatePaid |
datetime |
No |
Date paid in full |
| Status |
invoicestatus |
|
0 Voided, 1 Unapproved, 2 Paid, 3 Open |
| InvoiceType |
invoicetype |
|
0 Invoice, 1 Credit memo, 2 Refund, 3 Write-off |
| ContactId |
int32 |
Yes |
Customer the invoice is for |
| ProposalId |
int32 |
|
Original proposal, if any |
| AppointmentId |
int32 |
|
Appointment the invoice is for, if any |
| Subtotal |
decimal |
No |
Subtotal. Ignored on import |
| Tax |
decimal |
Yes, if taxed |
Total tax. Tax rate applies on import only when above 0 |
| Total |
decimal |
No |
Total. Ignored on import |
| BalanceDue |
decimal |
|
Amount still owed |
| IncludedInEop |
boolean |
|
Included in an end-of-period report |
| TaxRate |
double |
No |
Tax rate. Applied on import when Tax is above 0 |
| RateName |
string |
No |
Tax rate name. Ignored on import |
| Terms |
string |
|
Payment terms |
| CustomerNotes |
string |
|
Notes shown to the customer |
| CanAcceptClientPayment |
boolean |
|
Customer can pay online |
| ClientPayUrl |
string |
|
Customer-facing pay link |
| ClientPdfUrl |
string |
|
Link to the invoice PDF |
| Lines |
InvoiceLine[]
|
Yes |
Invoice lines. The first becomes the service line |
| Contact |
contact
|
|
Customer details, when IncludeContact is set |
| AssociatedAppointmentIds |
Int32[] |
|
Related appointment IDs (invoice/query only) |
invoiceline
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Line ID |
| ServiceId |
int32 |
Yes, or PartId |
Service for the line; its name names the invoice service |
| PartId |
int32 |
Yes, or ServiceId |
Part for the line |
| Description |
string |
No |
Line description |
| Rate |
decimal |
No |
Unit price |
| Qty |
double |
No |
Quantity |
| Extended |
decimal |
No |
Line total |
| Taxable |
boolean |
No |
Line is taxed |
namedtaxrate
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Tax rate id |
| Name |
string |
|
Tax rate name |
| TaxRate |
double |
|
Rate value |
note
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
No |
Note id; send in addupdate to edit that note |
| Title |
string |
No |
Note title, up to 64 characters |
| Body |
string |
No |
Note text |
organizationdetails
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Organization Id |
| PublicName |
string |
|
Public name |
| InternalName |
string |
|
Internal name |
| LegalEntityName |
string |
|
Legal business name |
| TaxpayerID |
string |
|
Taxpayer Id (EIN) |
| PrimaryPhone |
string |
|
Main phone |
| Email |
string |
|
Organization email |
| Website |
string |
|
Website |
| Timezone |
string |
|
Time zone Id, e.g. Eastern Standard Time |
| StartAddress |
address
|
|
Not filled (always empty) |
| Radius |
int32 |
|
Self-service radius in miles |
| BillingAddress |
address
|
|
Not filled (always empty) |
| OpenTimeGranularity |
int32 |
|
Open-time appointment suggestion granularity |
| PostalCodes |
string |
|
Service-area postal codes |
| LocationID |
string |
|
Brand's location Id |
| CancelDate |
datetime |
|
Date canceled, if canceled |
| TrialExpirationDate |
datetime |
|
Trial end date |
| Suspended |
boolean |
|
True if the account is suspended |
| BillingPlan |
string |
|
Billing plan name |
| BillingMethod |
int32 |
|
Billing method code |
| Users |
User[]
|
|
All users of the organization |
| CustomFields |
CustomField[]
|
|
Organization custom field values |
| AccountManager |
user
|
|
Brand account manager user |
| Region |
string |
|
Brand region name |
organizationforecast
| Parameter |
Type |
Required |
Description |
| Organization |
idname
|
|
Organization Id and name |
| Forecasts |
Forecast[]
|
|
Monthly revenue targets, by year then month |
part
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Part id |
| Name |
string |
|
Part name |
| Description |
string |
|
Description |
| Category |
string |
|
Part category name |
| Taxable |
boolean |
|
Is taxable |
| RequiredForService |
boolean |
|
Required with the service |
| ExcludeFromMinimum |
boolean |
|
Excluded from minimum charge |
| RangePricing |
boolean |
|
Has quantity pricing tiers |
| IsActive |
boolean |
|
Is active |
| SelfSelect |
boolean |
|
Customers can pick it online |
| IsAssembly |
boolean |
|
Is an assembly of other parts |
| IsAssemblySynchronizePricing |
boolean |
|
Assembly price follows its items |
| IsInternal |
boolean |
|
Internal only |
| IsZeroAssemblyItemPrices |
boolean |
|
Assembly items priced at zero |
| UnitPrice |
decimal |
|
Price per unit |
| UnitPriceMax |
decimal |
|
Maximum unit price |
| UnitCost |
decimal |
|
Not set (always empty) |
| UnitDuration |
int32 |
|
Minutes per unit |
| DurationForQtyUnits |
int32 |
|
Quantity the duration applies to |
| UnitOfMeasure |
string |
|
Unit name |
| QuantityOverrideCustomFieldId |
int32 |
|
Custom field that sets quantity |
| QtyPricing |
PartQtyPricing[]
|
|
Quantity pricing tiers |
| AssemblyItems |
AssemblyItem[]
|
|
Parts in the assembly |
| PartTemplate |
parttemplate
|
|
Template option, if active |
| StoreItemId |
int32 |
|
Linked store item |
| DistributionStart |
datetime |
|
Distribution start date |
| DistributionEnd |
datetime |
|
Distribution end date |
partqtypricing
| Parameter |
Type |
Required |
Description |
| AtLeast |
double |
|
Tier starts at this quantity |
| LessThan |
double |
|
Tier ends below this quantity |
| Price |
double |
|
Unit price in this tier |
| ExcludeQuantity |
boolean |
|
Tier excludes quantity |
| OverageMode |
boolean |
|
Prices only the overage |
| Formula |
string |
|
Pricing formula |
parttemplate
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Template id |
| OptionName |
string |
|
Option name |
| Selected |
boolean |
|
Selected by default |
payment
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Payment ID |
| InvoiceId |
int32 |
Yes |
Invoice the payment is for |
| ContactId |
int32 |
|
Customer who paid |
| InvoiceNumber |
string |
|
Number of that invoice |
| Reference |
string |
No |
Check number or other reference |
| TransactionId |
string |
|
Processor transaction ID |
| Date |
datetime |
Yes |
Payment date (no default) |
| Amount |
decimal |
Yes |
Amount paid |
| Method |
string |
Yes |
cash, check, card, or a method number; other text = cash |
pricingband
| Parameter |
Type |
Required |
Description |
| AtLeast |
double |
|
Band starts at this quantity |
| LessThan |
double |
|
Band ends below this quantity |
| Price |
double |
|
Price in this band |
| IsExcludeQuantity |
boolean |
|
Band excludes quantity |
| IsOverageMode |
boolean |
|
Not set (always false) |
| CapacityDemand |
double |
|
Capacity demand for the band |
| Formula |
string |
|
Pricing formula |
| Duration |
int32 |
|
Duration in minutes |
| InitialNRecurringPrice |
decimal |
|
Price for initial recurring visits |
| IsOverageBand |
boolean |
|
Is an overage band |
proposal
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Proposal ID |
| ContactId |
int32 |
|
Customer the proposal is for |
| Contact |
contact
|
|
Customer details, when IncludeContact is set |
| ClientUrl |
string |
|
Customer-facing link to view and accept |
| Date |
string |
|
Proposal date, e.g. 2026-11-10 |
| Status |
string |
|
Current status, as shown in the app |
| AcceptedDate |
string |
|
Date accepted, if accepted |
| ServiceId |
int32 |
|
Service on the proposal |
| ServiceName |
string |
|
Name of the service |
| Description |
string |
|
Service line description |
| Duration |
int32 |
|
Estimated duration in minutes |
| BasePrice |
decimal |
|
Service base price |
| UnitPrice |
decimal |
|
Service unit price |
| Quantity |
double |
|
Service quantity |
| Subtotal |
decimal |
|
Not filled (always empty) |
| Tax |
decimal |
|
Total tax |
| NamedTaxRate |
namedtaxrate
|
|
Named tax rate applied, if any |
| Taxable |
boolean |
|
True if a tax rate applies |
| Title |
string |
|
Proposal title |
| DeliveryUri |
string |
|
Email address the proposal is sent to |
| OwnerUserId |
int32 |
|
User who owns the proposal |
| ServiceAgentId |
int32 |
|
Assigned service agent |
| DepositRate |
double |
|
Not filled (always empty) |
| DepositRequired |
boolean |
|
Whether a deposit is required |
| SelectedSolution |
idname
|
|
Chosen part solution, if any |
| ProposalLines |
ProposalLine[]
|
|
Part lines |
| ChangeOrders |
ProposalSummary[]
|
|
Change orders against this proposal |
| BundledProposals |
ProposalSummary[]
|
|
Proposals bundled with this one |
| ProposalNotes |
ProposalNote[]
|
|
Not filled (always empty) |
| CustomerNotes |
string |
|
Notes shown to the customer |
| ChangeOrderForProposalId |
int32 |
|
Original proposal, if a change order |
| BundleWithProposalId |
int32 |
|
Proposal this one is bundled with |
| IncludePaymentPlans |
boolean |
|
Not filled (always empty) |
| PaymentPlanRequired |
boolean |
|
Whether a payment plan must be chosen |
| DistributeParts |
boolean |
|
Not filled (always empty) |
| CustomFields |
CustomField[]
|
|
Not filled (always empty) |
| AccountingClass |
accountingclasspostalcodes
|
|
Not filled (always empty) |
| ApiKey |
string |
|
Not used on nested objects |
| ResultCode |
int32 |
|
Not used on nested objects |
| Message |
string |
|
Not used on nested objects |
proposaldateline
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Line ID |
| ProposalOptionId |
int32 |
|
Option the line belongs to |
| ProposalScheduleDateId |
int32 |
|
Visit date the line belongs to |
| SortOrder |
int32 |
|
Display order |
| Part |
idname
|
|
Part on the line |
| Quantity |
double |
|
Quantity |
| UnitPrice |
decimal |
|
Unit price |
| UnitCost |
decimal |
|
Unit cost |
| Extended |
decimal |
|
Line total |
| Taxable |
boolean |
|
Line is taxed |
| Tax |
decimal |
|
Tax on the line |
| Duration |
int32 |
|
Minutes for the line |
| Internal |
boolean |
|
Hidden from customer |
| Description |
string |
|
Line description |
| Notes |
string |
|
Line notes |
| OptionName |
string |
|
Option group name |
proposalline
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Line ID |
| Quantity |
double |
No |
Quantity. Defaults from part settings |
| UnitPrice |
decimal |
No |
Unit price. Looked up from part pricing if omitted |
| UnitCost |
decimal |
No |
Unit cost |
| RatePercent |
double |
No |
Rate as a percent |
| MaxDiscount |
decimal |
No |
Largest discount allowed |
| ExtendedTotal |
decimal |
No |
Line total. Used as sent only if no quantity |
| LineTax |
decimal |
|
Tax on the line |
| Taxable |
boolean |
No |
Whether the line is taxed |
| IsInternal |
boolean |
No |
Hide from customer. Defaults to the part's setting |
| Discount |
decimal |
|
Discount on the line |
| LineDescription |
string |
No |
Line description |
| Notes |
string |
No |
Line notes |
| SortIndex |
int32 |
|
Display order |
| AssemblyLineId |
int32 |
No |
Parent assembly line, if part of an assembly |
| Part |
part
|
Yes |
Part, by Id or Name. Lines without a Part are skipped |
| ProposalOption |
proposaloption
|
No |
Option group the line belongs to |
| CustomFields |
CustomField[]
|
No |
Line custom field values, by field HTML name |
proposalnote
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Note ID |
| ProposalId |
int32 |
|
Proposal the note is on |
| Note |
string |
Yes |
Note text |
| CreatedAt |
datetime |
No |
When written. Defaults to now |
proposaloption
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Option ID |
| Name |
string |
No |
Option name. Lines with the same name are grouped |
| Selected |
boolean |
No |
Option is selected |
proposalsummary
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Proposal ID |
| Service |
idname
|
|
Service on the proposal |
| Date |
string |
|
Proposal date, e.g. 2026-11-10 |
| Status |
string |
|
Current status |
proposaltemplate
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Template ID |
| Name |
string |
|
Template name |
| IsActive |
boolean |
|
Template is active |
| Quantity |
double |
|
Default service quantity |
| ServiceId |
int32 |
|
Service the template is for |
| ServiceDescription |
string |
|
Service description text |
| CustomerNote |
string |
|
Note shown to the customer |
| OrganizationId |
int32 |
|
Your org ID |
| CreatedAt |
datetime |
|
When created |
| UpdatedAt |
datetime |
|
When last changed |
| ProposalTemplateLines |
ProposalTemplateLine[]
|
|
Template lines, in order |
proposaltemplateline
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Line ID |
| Option |
string |
|
Option group name |
| Quantity |
double |
|
Default quantity |
| Name |
string |
|
Not filled (always empty) |
| Description |
string |
|
Line description. Defaults to the part's |
| ProposalTemplateId |
int32 |
|
Template the line belongs to |
| PartId |
int32 |
|
Part on the line |
| Order |
int32 |
|
Display order |
| IsInternal |
boolean |
|
Hidden from customer |
| IsZeroPrice |
boolean |
|
Priced at zero |
| QtyIsPercent |
boolean |
|
Quantity is a percent |
service
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Service id |
| Name |
string |
|
Service name |
| Description |
string |
|
Description |
| BasePrice |
decimal |
|
Base price |
| UnitPrice |
decimal |
|
Price per unit |
| UnitOfMeasure |
string |
|
Unit name, e.g. sq ft |
| UnitDuration |
int32 |
|
Minutes per unit |
| Category |
string |
|
Service category name |
| MinimumCharge |
decimal |
|
Minimum charge |
| Duration |
int32 |
|
Estimated duration in minutes |
| SelfSelect |
boolean |
|
Customers can pick it online |
| Subscription |
boolean |
|
Is a subscription service |
| Prorating |
boolean |
|
Subscription is prorated |
| SubscriptionVisits |
int32 |
|
Visits per subscription |
| SubscriptionInterval |
int32 |
|
Days between visits (subscriptions only) |
| SeasonStart |
datetime |
|
Season start date |
| SeasonExpiration |
datetime |
|
Season end date |
| RecurringDescription |
string |
|
Recurrence in words |
| AvailableParts |
Part[]
|
|
Parts (options) for the service |
| PartCategories |
String[] |
|
Distinct part category names |
| PricingBands |
PricingBand[]
|
|
Quantity pricing bands |
| QuantityOverrideCustomFieldId |
int32 |
|
Custom field that sets quantity |
| UnitPriceOverrideCustomFieldId |
int32 |
|
Custom field that sets unit price |
| DurationOverrideCustomFieldId |
int32 |
|
Custom field that sets duration |
| CapacityDemandOverrdieCustomFieldId |
int32 |
|
Custom field that sets capacity demand |
| MinimumOptions |
int32 |
|
Minimum number of options |
| MinimumSubtotal |
decimal |
|
Minimum subtotal |
| QuantityFormula |
string |
|
Formula for quantity |
| RecordWeatherData |
boolean |
|
Records weather data on visits |
| CustomProperties |
dictionary`2 |
|
Branding custom fields, by name (branded orgs only) |
serviceagent
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Service agent id |
| Name |
string |
|
Name |
| Email |
string |
|
Email |
| MobilePhone |
string |
|
Mobile phone |
| StartDate |
string |
|
Employment start date (server-formatted text) |
| EndDate |
string |
|
Employment end date, empty if none |
| TimeSlots |
TimeSlot[]
|
|
Weekly working time slots |
servicedocumentlink
| Parameter |
Type |
Required |
Description |
| Date |
string |
|
Invoice or proposal date (yyyy-mm-dd) |
| Service |
string |
|
Service name |
| Link |
string |
|
Customer-facing link |
| Id |
int32 |
|
Invoice or proposal id |
smsconsent
| Parameter |
Type |
Required |
Description |
| Account |
smsconsententry
|
No |
Consent for account (transactional) texts |
| Marketing |
smsconsententry
|
No |
Consent for marketing texts |
| StopLockedAt |
string |
No |
When the customer texted STOP, UTC (output only) |
smsconsententry
| Parameter |
Type |
Required |
Description |
| Status |
string |
Yes |
opted_in or opted_out (output may be unknown) |
| Method |
string |
Yes, to opt in |
How consent was captured: web_form, paper, keyword, verbal |
| CapturedAt |
string |
Yes, to opt in |
When consent was captured, ISO-8601; not in the future |
| SourceUrl |
string |
No |
Page where consent was captured |
| Ip |
string |
No |
Consumer's IP address |
| UserAgent |
string |
No |
Consumer's browser user agent |
| DisclosureText |
string |
Yes, to opt back in after an opt-out |
Consent wording shown to the consumer |
| EvidenceUrl |
string |
No |
Link to stored proof of consent |
| At |
string |
No |
When the current status was set, UTC (output only) |
| Source |
string |
No |
Where the current status came from (output only) |
subscriptiondate
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Date ID |
| Label |
string |
|
Display label |
| Date |
datetime |
|
Visit date |
| Service |
idname
|
|
Service for the visit |
| ServiceId |
int32 |
|
Service ID for the visit |
| DateIso |
string |
|
Visit date, e.g. 2026-11-10 |
| DateStr |
string |
|
Visit date, e.g. 11/10/2026 |
| DateFriendly |
string |
|
Visit date in friendly text |
| BasePrice |
decimal |
|
Base price for the visit |
| UnitPrice |
decimal |
|
Unit price for the visit |
| SelectedDate |
string |
|
Selected date text |
| Subtotal |
decimal |
|
Visit subtotal |
| TaxableSubtotal |
decimal |
|
Taxable part of the subtotal |
| Duration |
string |
|
Formatted visit duration |
| InternalNotes |
string |
|
Internal notes |
| IsExcludeFromProRating |
boolean |
|
Excluded from pro-rating |
| IsRecurringMaster |
boolean |
|
First visit of a recurring series |
| IsRecurringShadow |
boolean |
|
Later visit of a recurring series |
| Lines |
ProposalDateLine[]
|
|
Part lines for the visit |
| AlternateDates |
DateTime[] |
|
Other possible dates |
tag
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
Yes, or Name |
Tag id; matched first on input |
| Name |
string |
Yes, or Id |
Tag name; exact match used if Id doesn't match |
task
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
Task id |
| ContactId |
int32 |
|
Customer the task is for, if any |
| TaskType |
int32 |
|
1 = Task, 2 = Call, 3 = Email |
| TaskTypeDisplay |
string |
|
Task type name, e.g. Call |
| Description |
string |
|
What the task is |
| Note |
string |
|
Task note, e.g. completion note |
| TaskCategory |
string |
|
Category name |
| Due |
datetime |
|
Org-local due date and time |
| Duration |
int32 |
|
Expected length in minutes |
| AssignedTo |
string |
|
Name of the assigned user |
| AssignedToUserId |
int32 |
|
Id of the assigned user |
| CompletedAt |
datetime |
|
When the task was completed; empty if open |
| CompletedBy |
string |
|
Name of the user who completed it |
| UpdatedAt |
datetime |
|
When the task last changed |
| ApiKey |
string |
|
Not used on nested objects |
| ResultCode |
int32 |
|
Not used on nested objects |
| Message |
string |
|
Not used on nested objects |
timeslot
| Parameter |
Type |
Required |
Description |
| DayOfWeek |
int32 |
|
Day of week number |
| NameOfDay |
string |
|
Day name |
| StartMinute |
int32 |
|
Start time, minutes after midnight |
| Minutes |
int32 |
|
Length in minutes |
| StartDate |
string |
|
First date the slot applies |
| EndDate |
string |
|
Last date the slot applies, empty if none |
| ServiceCategoryName |
string |
|
Service category the slot is for |
| PostalCodes |
string |
|
Postal codes the slot is limited to, if any |
| ApiKey |
string |
|
Not used on nested objects |
| ResultCode |
int32 |
|
Not used on nested objects |
| Message |
string |
|
Not used on nested objects |
upload
| Parameter |
Type |
Required |
Description |
| ContactId |
int32 |
Yes |
Contact to attach the files to |
| AppointmentId |
int32 |
No |
Also link files to this appointment of the contact (flag) |
| TaskId |
int32 |
No |
Also link files to this task of the contact (flag) |
| Note |
string |
No |
Note saved with pictures and documents |
| TagIds |
string |
No |
Tag ids as a JSON array string, e.g. [12,34] |
| UploadIds |
Int32[] |
|
Ids of the saved pictures, videos and documents (output) |
| ApiKey |
string |
|
Not used on nested objects |
| ResultCode |
int32 |
|
Not used on nested objects |
| Message |
string |
|
Not used on nested objects |
upload
| Parameter |
Type |
Required |
Description |
| ProposalId |
int32 |
Yes |
Proposal to attach files to |
| Note |
string |
No |
Caption for uploaded images (ignored for documents) |
| TagIds |
string |
No |
JSON array of tag IDs for images, e.g. [1,2] |
| UploadIds |
Int32[] |
|
IDs of the pictures/documents created |
| ApiKey |
string |
|
Not used on nested objects |
| ResultCode |
int32 |
|
Not used on nested objects |
| Message |
string |
|
Not used on nested objects |
user
| Parameter |
Type |
Required |
Description |
| Id |
int32 |
|
User Id (output) |
| Email |
string |
Yes |
Email; an existing user with this email is linked instead of created |
| Name |
string |
Yes |
Full name |
| Active |
boolean |
|
True if the user is active (output) |
| ServiceAgentId |
int32 |
|
Linked service agent Id (output) |
| Role |
string |
No |
Role name in the brand; defaults to the owner role |
| ApiKey |
string |
|
Not used on nested objects |
| ResultCode |
int32 |
|
Not used on nested objects |
| Message |
string |
|
Not used on nested objects |