Overview
Basics
The Json format is based on a hierarchical structure. You have one object that can contain a bunch of other objects, and each of those objects can contain even more objects. In the case of ServiceMinder, the most common group of objects in question are appointments. Each appointment can contain information like starting times, the contact's name, the duration, etc. However, a single appointment can also contain an invoice, which in turn can contain several invoice lines, which each contain their own set of information.
Below is an example of a single appointment with a few lines attached in Json format:
[{
"ScheduledStart":"2020-01-21",
"ServiceName":"Appointment",
"Quantity":"1",
"Notes":"Notes go here.",
"BasePriceOverride":30.0,
"Queued":false,
"Finish":true,
"Taxable":false,
"TaxRate":0.0,
"InvoiceLines":
[{
"Name":"Appointment",
"Quantity":"1",
"UnitPrice":15,
"Description":"The service line."
},
{
"Name":"Part One",
"Quantity":"2",
"UnitPrice":5,
"Description":"The second line."
}]
}]
This is what the standard appointment looks like when being imported via Json. Date, Service, Quantity, and at least one InvoiceLine are the only fields required to successfully import an appointment. The other fields must exist, but are allowed to be nullable. It should be noted that BasePriceOverride determines a fixed price to be added to the appointment before everything else is calculated. The above Json should result in an appointment that has a subtotal of $55. The first line must also have a Name that matches the name of the appointment's service.
There are other Json columns used in the import process besides appointments. Below, you'll find an example and brief explanation of each column.
Notes
This column is used to import notes alongside a contact. These notes are not to be confused with appointment or proposal notes; these belong to the contact directly.
[{
"Date":"4/30/2013",
"Title":"Info",
"Note":"This note contains info."
}]
The above is all that is a contact note. They are very simple, considering notes are nothing more than a few lines of text in most cases. You may also use straight text instead of Json to import a single note.
Proposals
[{
"Description":"This is a description.",
"Notes":"Notes go here.",
"Service":"Service Name",
"Date":"2020-01-21",
"BasePrice":0.0,
"Quantity":1,
"Taxable":false,
"ProposalLines":
[{
"Quantity":1.0,
"UnitPrice":275.0,
"ExtendedTotal":275.0
"Name":"Service Name",
"Description":"Description field.",
"Taxable":false
},
{
"Quantity":1.0,
"UnitPrice":375.0,
"ExtendedTotal":375.0,
"Name":"Part One",
"Description":"The second line.",
"Taxable":false
}]
}]
The above is a basic proposal. If the description field is empty for a proposal line, ServiceMinder will simply use the associated part's description. A similar process occurs if the proposal's description is empty. That case will use the service's description.
Additional Contacts
This column is used to import any additional contacts that are attached to a single contact. These additional contacts are less detailed than a normal contact, but are still worth noting if the primary contact is unavailable to speak with. 'AdditionalContacts' and 'AddtlContacts' are acceptable column names.
[{
"Name":"Cherie Panteck",
"Phone":"0000000000/Home",
"AltPhone":"0000000000/Mobile",
"Notes":null,
"Email":"fakeemail@fakeemails.com",
"Address1":"",
"Address2":"",
"City":"",
"State":"",
"Zip":""
}]
Many of these fields can be left as empty strings and are entirely optional. The name field, however, is required. Phone numbers can be appended with a '/' plus a string to assign that phone number a label in ServiceMinder. A label will be created if it does not already exist.