API Reference: Contacts

Preamble

The Solve External API is implemented over HTTP and is RESTful. Every item has its own URI and is manipulated in isolation.

You will normally send your Request data in XML format, but we understand JSON and form encoded data just as well. If you want to use a non-XML request format, simply set the HTTP “Content-type” header to either application/json or application/x-www-form-urlencoded. Conversely, we will normally send response data in XML form, unless you set the HTTP “Accept” header to application/json.

To receive a response in JSON with padding (JSONP) format, simply pass a ‘callback’ parameter in the query string. For example, appending callback=myFunction to your request will result in a response body of: myFunction(…). Callbacks may only contain alphanumeric characters and underscores; any invalid characters will be stripped.

Please note, access to features and data is limited to the actual user account being used to access the API. Likewise, admin actions cannot be performed via API (i.e. granting workgroup permissions, etc.). The admin has to do this from within the main system.

You can find a list of all Field Names, Field IDs, Category Tag IDs and Ownership IDs under: Solve menu > My Account > API Reference.

Unless otherwise specified, date/time is always reported in UTC and formatted according to ISO 8601. When saving date/time data, values must first be converted from local time to UTC and follow one of these formats: 2004-02-12T15:19:21+00:00 (ISO 8601), 2004-02-12 15:19:21, or just 2004-02-12.

Reference

The API methods and parameters are the same for all record types, i.e. Contacts, Companies and Project Blogs. Simply use the appropriate segment name for the record type. For example, if creating a:

  • Contact, you’d use: https://secure.solve360.com/contacts/..
  • Companies, you’d use: https://secure.solve360.com/companies/..
  • Project Blogs, you’d use: https://secure.solve360.com/projectblogs/..

Interface Summary

https://secure.solve360.com

URI HTTP Methods
/contacts/ [GET, POST]
/contacts/{contactId}/ [GET, PUT, DELETE]
/contacts/categories/ [POST, GET]
/contacts/fields/ [GET]
/ownership/ [GET]
/contacts/{activitySegmentName}/ [POST]
/contacts/{activitySegmentName}/{activityId}/ [PUT, DELETE]

Methods

Create

POST https://secure.solve360.com/contacts

Creates a new contact.

Request

curl -u '{userEmail}:{userApiToken}' -X POST -H 'Content-Type: application/xml' -d '<request><firstname>Aaron</firstname><lastname>Baileys</lastname><categories><add><category>315890</category></add></categories><ownership>83421</ownership></request>' https://secure.solve360.com/contacts  `

Parameters

  • there are no required fields
  • ownership will be the id of the current user if not otherwise provided, to share the item set <ownership>{groupId}</ownership>
  • to add the item to one or more category tags use <categories><add><category>{categoryTagId}</category>…</add></categories>
  • to link the item to one or more contacts, companies or project blogs use <relateditems><add><relatedto><id>{relatedtoid}</id><note>{how they relate}</note></relatedto>…</add></relateditems>

Response

...
<response>
  ...
  <status>success</status>
</response> `

Update

PUT https://secure.solve360.com/contacts/{contactId}/

Updates an existing contact.

Request

curl -u '{userEmail}:{userApiToken}' -X PUT -H 'Content-Type: application/xml' -d '<request><businessemail>support@workplate.com</businessemail><categories><add><category>53966</category></add></categories></request>' https://secure.solve360.com/contacts/31507

Parameters

  • there are no required fields
  • ownership will be the id of the current user if not otherwise provided, to share the item set <ownership>{groupId}</ownership>
  • to add or remove the item to one or more category tags use <categories><add><category>{categoryTagId}</category> …</add>\ remove><category>{categoryTagId}</category>…</remove></categories>
  • to link or unlink the item to one or more contacts, companies or project blogs use <relateditems><add><relatedto> <id> relatedtoid}</id></relatedto>…</add><remove><relatedto><id>{relatedtoid}</id></relatedto>…</remove></relateditems>

Response

...
<response>
  ...
  <status>success</status>
</response>

Show

GET https://secure.solve360.com/contacts/{contactId}/

Shows all data related to an existing contact including companies, related-to, category tags and all activities (excluding email messages).

Request

curl -u '{userEmail}:{userApiToken}' -X GET https://secure.solve360.com/contacts/31507  `

Response

...
<response>
  <item>
    <id>31507</id>
    <name>Aaron Baileys</name>
    <typeid>1</typeid>
    <created>2009-06-20T14:49:39+00:00</created>
    <viewed>2009-06-20T15:13:07+00:00</viewed>
    <updated>2009-06-20T15:12:09+00:00</updated>
    <ownership>12830</ownership>
    <flagged>1</flagged>
    <fields>
      <businessphonedirect>(382) 853-8544</businessphonedirect>
      <homephone>(333) 934-9392</homephone>
      <cellularphone>(333) 828-4633</cellularphone>
      <businessfax>(111) 222-3333</businessfax>
      <firstname>Aaron</firstname>
      <custom329972>7363273</custom329972>
      <assignedto>53936</assignedto>
      <businessaddress>1710, 840 7th Ave. SW
      Calgary, Alberta</businessaddress>
      <businessphonemain>(580) 648-9094</businessphonemain>
      <lastname>Baileys</lastname>
      <custom18432>Farm</custom18432>
      <jobtitle>Maintenance Mechanic</jobtitle>
      <background>
      Referred by David, he's built three other homes in the valley.<br>
      </background>
      <businessemail>support@workplate.com</businessemail>
      <website>www.clientsite.com</website>
    </fields>
  </item>
  <activities>
    <id603944>
      <level>1</level>
      <cn>Task List Title</cn>
      <created>2009-06-20T14:59:18+00:00</created>
      <viewed>2009-06-20T15:32:37+00:00</viewed>
      <updated>2009-06-20T15:12:09+00:00</updated>
      <flagged/>
      <typeid>22</typeid>
      <parent>603938</parent>
      <creatorid>28230</creatorid>
      <creatorname>Steve Ireland</creatorname>
      <position>1</position>
      <fields>
        <completed>0</completed>
        <description>task list description</description>
        <title>Task List Title</title>
      </fields>
      <modificatorid>28230</modificatorid>
      <modificatorname>Gerald Black</modificatorname>
      <id>603944</id>
    </id603944>
  </activities>
  <categories>
    <category>
      <id>568907</id>
      <name>New Prospect</name>
    </category>
    <category>
      <id>315890</id>
      <name>Qualified Prospect</name>
    </category>
  </categories>
  <relateditems>
    <relatedto>
      <id>45531</id>
      <typeid>1</typeid>
      <name>Brenda Arnett</name>
      <note>Spouse</note>
    </relatedto>
    <relatedto>
      <id>31358</id>
      <typeid>40</typeid>
      <name>Systectro</name>
      <note>Employee</note>
    </relatedto>
    <relatedto>
     <id>31477</id>
      <typeid>40</typeid>
      <name>Inconactron Technology</name>
      <note>2001-2006</note>
    </relatedto>
    <relatedto>
      <id>31404</id>
      <typeid>40</typeid>
      <name>Exactratems Consulting</name>
      <note>Board member</note>
    </relatedto>
    <relatedto>
      <id>46335</id>
      <typeid>1</typeid>
      <name>Steve Austin</name>
      <note>brother</note>
    </relatedto>
  </relateditems>
  <status>success</status>
</response>

Destroy

DELETE https://secure.solve360.com/contacts/{contactId}/

Deletes a contact.

Request

curl -u '{userEmail}:{userApiToken}' -X DELETE https://secure.solve360.com/contacts/31507  `

Response

...
<response>
  <status>success</status>
</response> `

List

GET https://secure.solve360.com/contacts

Returns a collection of contacts that match the requested criteria.

Request

curl -u '{userEmail}:{userApiToken}' -v -X GET -H 'Content-Type: application/xml' -o 'result.xml' -d '<request><layout>1</layout><searchmode>Cany</searchmode><searchvalue>aaron</searchvalue><filtermode></filtermode><filtervalue></filtervalue><special></special><limit>100</limit><start></start><sortfield></sortfield><sortdir></sortdir></request>' https://secure.solve360.com/contacts  `

Parameters

layout
Output summary fields or all fields
  • [0,1]
fieldslist
List fields to output when layout = 1
  • fieldname (delimited by comma)
categories
Output categories when layout = 1
  • [0,1]
filtermode
Primary search context
  • [flagged, assigned, nocategory, viewed, created, updated, notviewed, notupdated duetoday, duesoon, tasksoverdue, owner, category, archived, unsent, byphone (any phone field), byemail (any email field)]
filtervalue
  • {string}
special
Result must match any specified categories or all specified categories
  • [AND, OR]
searchmode
Sub filter search context
  • [Sany, Cany, Canyitem, Sanyitem, Canyjournal, Sanyjournal, C{fieldId}, S{fieldId}, E{fieldId}, N{fieldId}]\S = field starts with, C =field contains, E = field is empty, N = field is not empty
searchvalue
  • {string}
limit
How many contacts to display per page
  • {integer} (default = 50, maximum = 5,000)
start
  • Record to start from (zero based)*
  • {integer}
sortfield
Which field is used for sorting
  • [name, created, flagged, update_time]
sortdir
Sort direction
  • [ASC, DESC]

Response

...
<response>
  <id31507>
    <id>31507</id>
    <name>Aaron Baileys</name>
    <parentid>84265</parentid>
    <flagged>1</flagged>
    <businessphonedirect>(382) 853-8544</businessphonedirect>
    <businessfax>(111) 222-3333</businessfax>
    <cellularphone>(333) 828-4633</cellularphone>
    <homephone>(333) 934-9392</homephone>
    <businessphonemain>(580) 648-9094</businessphonemain>
    <businessaddress>1710, 840 7th Ave. SW
    Calgary, Alberta</businessaddress>
    <assignedto>53936</assignedto>
    <custom329972>7363273</custom329972>
    <firstname>Aaron</firstname>
    <lastname>Baileys</lastname>
    <custom18432>Farm</custom18432>
    <jobtitle>Maintenance Mechanic</jobtitle>
    <background>
    Referred by David, he's built three other homes in the valley.<br>
    </background>
    <businessemail>support@workcompedge.com</businessemail>
    <website>www.clientsite.com</website>
    <company>
    Exactratems Consulting, Inconactron Technology, Systectro
    </company>
    <created>2008-08-04T00:00:10+00:00</created>
    <viewed>2009-06-23T00:50:35+00:00</viewed>
    <updated>2009-06-18T21:53:24+00:00</updated>
  </id31507>
  <id34943>
    <id>34943</id>
    <name>Aaron Grant</name>
    <parentid>28227</parentid>
    <flagged/>
    <firstname>Aaron</firstname>
    <businessemail>Aaron.E.Grant@spambob.com</businessemail>
    <jobtitle>Design Drafter Cad/Cam</jobtitle>
    <lastname>Grant</lastname>
    <businessaddress>4437, Grand Avenue
    Winter Park FL 32789
    US</businessaddress>
    <businessphonemain>(407) 713-0145</businessphonemain>
    <company>Acle</company>
    <created>2008-08-04T00:03:05+00:00</created>
    <viewed>2009-01-19T15:49:29+00:00</viewed>
    <updated>2008-08-31T18:41:42+00:00</updated>
  </id34943>
  ...
  <count>21</count>
  <status>success</status>
</response>

Create Category Tags

POST https://secure.solve360.com/contacts/categories/

Creates a category tag

Request

curl -u '{userEmail}:{userApiToken}' -X POST -H 'Content-Type: application/xml' -d '<request><name>A New Category</name></request>' https://secure.solve360.com/contacts/categories  `

Response

...
<response>
  <id>136957</id>
  <status>success</status>
</response> `

List Category Tags

GET https://secure.solve360.com/contacts/categories/

Returns a collection of available contact tags

Response

...
<response>
  <categories>
    <category>
      <id>315890</id>
      <name>1. Lead</name>
    </category>
    <category>
      <id>568907</id>
      <name>2. Prospect</name>
    </category>
    <category>
      <id>355922</id>
      <name>3. High Value Prospect</name>
    </category>
    <category>
      <id>471194</id>
      <name>4. Client</name>
    </category>
  </categories>
  <status>success</status>
</response>

List Fields

GET https://secure.solve360.com/contacts/fields/

Returns a collection of available contact fields

Response

...
<response>
  <fields>
    <field>
      <id>9793</id>
      <name>firstname</name>
      <label>First Name</label>
      <type/>
    </field>
    <field>
      <id>9794</id>
      <name>lastname</name>
      <label>Last Name</label>
      <type/>
    </field>
    <field>
      <id>3530279</id>
      <name>custom3530279</name>
      <label>Elected Amenities</label>
      <type>text</type>
      <categories>
        <category>7940151</category>
        <category>11948598</category>
      </categories>
    </field>
    <field>
      <id>1473638</id>
      <name>custom1473638</name>
      <label>Floor plan</label>
      <type>select</type>
      <options>
        <option>Single</option>
        <option>Double</option>
        <option>Split</option>
      </options>
      <categories>
        <category>7940151</category>
      </categories>
    </field>
  </fields>
  <status>success</status>
</response>

List Ownership

GET https://secure.solve360.com/ownership

Returns a collection of available users and workgroups

Response

...
<response>
  <users>
    <user>
      <id>28227</id>
      <name>Terry Black</name>
      <email>tblack@northrock.com</email>
      <preventlogin>0</preventlogin>
      <preventprivatedata>0</preventprivatedata>
      <administrator>1</administrator>      
    </user>
    <user>
      <id>53936</id>
      <name>Mike Bautista</name>
      <email>mbautista@northrock.com</email>
      <preventlogin>0</preventlogin>
      <preventprivatedata>1</preventprivatedata>
      <administrator>0</administrator>      
    </user>    
  </users>
  <groups>
    <group>
      <id>53915</id>
      <name>Northrock</name>
      <email>northrock@northrock.solve360.com</email>
    </group>
    <group>
      <id>83421</id>
      <name>Customer Service</name>
      <email>customerservice@northrock.solve360.com</email>
    </group>
  </groups>  
  <status>success</status>
</response>

Parameters

deleted
Include deleted users and groups
  • [1]

Create Activity

POST https://secure.solve360.com/contacts/{activitySegmentName}/

Creates a new activity linked to a parent item. Refer to the “Supported Activity Hierarchies” chart below to see what each activity type can be linked to.

Request (e.g. create a task within tasklist having id 353687)

curl -u '{userEmail}:{userApiToken}' -X POST -H 'Content-Type: application/xml' -d '<request><parent>353687</parent><data><title>Inspect Property</title><duedate>2009-10-11</duedate><priority>3</priority></data></request>' https://secure.solve360.com/contacts/task  `

Parameters

  • providing <after>{id}</after> or <before>{id}</before> will position the created activity relative to the specified activity

  • <parent>{parentId}</parent> is the parent to which we attaching the activity to and is required

Activity Definitions

Activity Segment Name Fields Type Id
Attached File attachmentfile * (file) 55
Call call details (text)
dateoccured (datetime)
duration (integer, minutes)
73
Comment comment posttext (text) 91
Constant Contact constantcontactwidget contactid (integer [from Constant Contact]) 29
Event event title (text)
details (text)
completed (integer, [0, 1], new events cannot be created as completed)
timestart (date or datetime)
timeend (date or datetime)
location (text)
eventtype (text, [keep, remove])
priority (ingeter, [0-6])
noticenow (integer, [0, 1])
remindtime (integer, [0, 1])
attendees (integers delimited by comma, [user id])
externalattendees (email addresses delimited by comma)
repeats (text, [{blank}, daily, weekly, monthly, yearly])
repeatevery (integer when repeats != weekly)
repeatuntil (date)
repeatinterval (integers separated by comma when repeats = weekly, days of week 0-6)
4 or 5
File file caption (text)
file (must be uploaded as form-encoded data)
23
Follow-up followup details (text)
assignedto (integer, [group id, user id])
nodate (integer, [0, 1])
duedate (date, if nodate = 0)
completed (integer, [0, 1, new follow-ups cannot be created as completed])
sendnotification (integer, [0, 1])
remindtime (integer, [minutes])
6
Freshbooks freshbookswidget clientid (integer [from Freshbooks]) 27
Google Doc googledoc title (text)
url (text)
37
Linked Emails linkedemails fields (fieldnames delimited by comma)
keywords (text delimited by comma)
exceptions (text delimited by comma)
90
MailChimp mailchimpwidget 39
Note note details (text) 3
Opportunity opportunity description (text)
valueunit (decimal)
valuecurrency (text, [USD, EUR, GBP, CAD, AUD, BRL, CHF, CNY, DKK, HKD, HRK, HUF, INR, JPY, MXN, MYR, NOK, NZD, RUB, SEK, SGD, THB, ZAR])
valueinterval (text, [fixed price, per hour, per day, per week, per month, per quarter, per month, per quarter, per year])
valueduration (integer)
stage (integer, 0-100)
probability (integer, 0-100)
closingdate (date)
responsible (integer, group or user id)
status (text, [Discussion, Pending, Won, Lost, On-hold])
32
Photo photo caption (text)
file
24
Photo list photolist title (text) 31
Separator separator title (text)
hidesiblings (integer, [0, 1])
57
Scheduled Email scheduledemail to (text, [user@example.com or John Doe <user@example.com>, may be more than one separated by comma])
cc (text, [same as to field])
bcc (text, [same as to field])
from (text, [user@example.com or John Doe <user@example.com>)
subject (text)
priority (integer, [0=low, 1=normal, 2=high])
body (string, [if html is provided the text part is created automatically])
scheduledtime (date))
88
Task task title (text)
details (text)
assignedto (integer, [group id, user id])
nodate (integer, [0, 1])
duedate (date, if nodate = 0)
completed (integer, [0, 1], new tasks cannot be created as completed)
sendnotification (integer, [0, 1])
remindtime (integer, [minutes])
priority (integer, [0-6])
billed (integer, [0, 1])
ignoreweekends (integer, [0, 1])
timespent (integer)
timespentmeasure (text, [days, hours, weeks])
timeremains (integer)
timeremainsmeasure (text, [days, hours, weeks])
invoiced (text)
notifyoncomplete (text, [email address(es) delimited by comma])
14
Task list tasklist title (text)
description (text)
nodate (integer, [0, 1])
milestonedate (date, if nodate = 0)
completed (integer, [0, 1]
22
Template of activities template templateid (integer, [template id]) 51
Time record timerecord date (date)
person (integer, [group id, user id])
hours (number)
billable (integer, [0, 1])
details (text)
invoiced (text)
15
Website website caption (text)
url (text)
7
Xero xerowidget contactid (integer [from Xero]) 96
Zendesk zendeskwidget userid (integer [From Zendesk]) 97

Required field

Supported Activity Hierarchies

Parent {itemId} [> Child] [> Child]
Contact > Call > Comment
Contact > Constant Contact > Comment
Contact > Event > Comment
Contact > File > Comment
Contact > Follow-up > Comment
Contact > FreshBooks > Comment
Contact > Google Doc > Comment
Contact > Linked emails (one per parent) > Comment
Contact > MailChimp > Comment
Contact > Note > Comment
Contact > Opportunitiy > Comment
Contact > Photolist > Photo
Contact > Photolist > Comment
Contact > Section > Comment
Contact > Scheduled Email
Contact > Scheduled Email > Comment
Contact > Scheduled Email > Attached File
Contact > Tasklist > Task
Contact > Tasklist > Task > File
Contact > Tasklist > Task > File > Comment
Contact > Tasklist > Task > Google Doc
Contact > Tasklist > Task > Google Doc > Comment
Contact > Tasklist > Task > Comment
Contact > Tasklist > Task > Time record
Contact > Tasklist > Comment
Contact > Template of activities
Contact > Website > Comment
Contact > Xero > Comment
Contact > Zendesk > Comment

Response

...
<response>
  <id>589696</id>
  <data>
    <title>Inspect Property</title>
    <duedate>2009-10-11</duedate>
    <priority>3</priority>
  </data>
  <created>Jun 15, 2009 22:19:29</created>
  <status>success</status>
</response>

Update Activity

PUT https://secure.solve360.com/contacts/{activitySegmentName}/{activityId}

Updates an activity related to a contact.

Request e.g. change due date and priority for task with id {activityId}

curl -u '{userEmail}:{userApiToken}' -X PUT -H 'Content-Type: application/xml' -d '<request><data><duedate>2009-12-11</duedate><priority>5</priority></data></request>' https://secure.solve360.com/contacts/task/589696  `

Parameters

  • providing <after>{id}</after> or <before>{id}</before> will position the edited activity relative to the specified activity
  • providing a different <parent>{id}</parent> will move the activity to the specified contact, company, or project blog

Response

...
<response>
  <status>success</status>
</response>`

Destroy Activity

DELETE https://secure.solve360.com/contacts/{activitySegmentName}/{activityId}/

Deletes an activity related to a contact.

Request

curl -u '{userEmail}:{userApiToken}' -X DELETE https://secure.solve360.com/contacts/task/589696  `

Response

...
<response>
  <status>success</status>
</response>`