Changes

Jump to: navigation, search

SmartConnect - RESTful API

7,396 bytes added, 16:07, 25 October 2021
Searching of Empty or Non-empty Values
{{Banner-UnderConstruction}}
 
 
 
=Overview=
SmartSimple's SmartConnect API provides a relatively easy to use method of integrating SmartSimple information with other web services and systems. It is a RESTful API and loosely follows the principles of REST integration.
* This API uses industry standard JSON syntax and constructs. If you are not familiar with JSON you should take a look at the [https://www.w3schools.com/js/js_json_intro.asp following tutorial] before venturing much further in this topic.* If you wish to export and import large amounts of information then this API should not be used.
==Interactive Demonstration Page==For * This API does not place metering restrictions as to the number of records that can be retrieved by a demo of how the single API works, you can test some sample functions on our [https://api.smartsimple.com/devtools/dev_api.html interactive demonstration page]query. This page is connected to   However retrieving a specific demonstration instance containing sample data. We strongly encourage you to review this page in order to gain large number of records (greater than 1000 records) will have a better understanding of the syntax negative impact on performance and functionality of may cause the APIquery to fail. 
=Prerequisites=
# After saving your function, take note of the ''API Token'' as you will need to include this in your API calls to identify this pre-defined function.
Here is a more detailed look at [[Creating JSON functionsSmartConnect Functions|creating SmartConnect functions]].
===Field List Syntax===
||sf_First Name
|-
||cf_''CustomFieldName'' cf_''CustomFieldID'' 
||
Custom fields are denoted by their field name, preceded by a prefix of 'cf_'.
cf_My Custom Field
cf_fieldidcf_12345
|-
==Usage==
Make sure that SmartConnect API functions were created in the instance before proceeding to using the API.
Make sure [[Creating JSON functions|JSON API functions]] were created in the instance before you can use them.
 
First, here are some rules to be aware of when calling the API functions.
 
* All update functions have a jsonrset parameter. When updating a record, the jsonrset must include all fields in the field list to ensure it works properly. If the value is not being changed, set it to the current value.
* If updating a new field, that field must also be added to the field list within the function configuration.
* Date fields in the jsonrset should be formatted as yyyy-mm-dd.
* Fields with pre-defined options (eg. drop down, check box, etc.) can be set by giving the stored value of the desired option, not the display caption
* The update functions are also used to create new records. This can be done by setting the recordid to 0. The response will then display the recordid of the record created.
 
=== ===
===Posting Endpoints===
To make an API call you will need to post to the appropriate endpoint which will simply be based on the ''Record Type'' of the API function. The general endpoint will be in the form of:
||Report
||/API/1/report/
||<nowiki>https://example.smartsimple.com/API/1/report/</nowiki>
|-
||Company
||/API/1/company/
||<nowiki>https://example.smartsimple.com/API/1/company/</nowiki>
|-
||User
||/API/1/user/
||<nowiki>https://example.smartsimple.com/API/1/user/</nowiki>
|-
||System Variables
||/API/1/sysvar/
||<nowiki>https://example.smartsimple.com/API/1/sysvar/</nowiki>
|-
||UTA Level 1
||/API/1/levelone/
||<nowiki>https://example.smartsimple.com/API/1/levelone/</nowiki>
|-
||UTA Level 2
||/API/1/leveltwo/
||https<nowiki>tps://example.smartsimple.com/API/1/leveltwo/</nowiki>
|-
||UTA Level 3
||/API/1/levelthree/
||<nowiki>https://example.smartsimple.com/API/1/levelthree/</nowiki>
|-
||UTA Level Transaction
||/API/1/transactions/
||<nowiki>https://example.smartsimple.com/API/1/transactions/</nowiki>
|}
The message body that you post will need to include various parameters depending on the ''Record Type'' and ''Action Type'' being used. The required and optional parameters will be listed for each different function on the configuration page of each SmartConnect function.
 At minimum, you will always need to includethe following parameters:
* '''url''': String containing the URL to which the request is sent
* '''apitoken''': Encrypted token generated and associated to each SmartConnect function.
* '''jsonrset''' (update functions only): JSON array containing one or more records to update. The top node should be named 'records', with each sub-node representing a record to update. Each record sub-node is identified by a 'recordid' value that is the unique SmartSimple ID for that record (e.g. userid for a user/contact record), and must include every field and only fields that were defined in the field list of the SmartConnect function. If the field value is not being changed, set it to the current value.
If you are making a remote call from an external system you will also need to include:
* '''password''': The corresponding password to the above user account.
* '''companyid''': The root companyid of your SmartSimple instance. This is the companyid of the organization at the root of your instance.
* '''alias''': The web alias of your SmartSimple instance. This will typically be the leading portion of your instance URL, and can be found in your Global Settings -> Branding configuration. E.g. for <nowiki>https://example.smartsimple.com </nowiki> the alias would be 'example'.  Here is a more detailed look at [[Using JSON functions|using SmartConnect functions]]. 
<pre>Sample call within SmartSimple instance:
}
</pre>
 
 
<pre>Sample Remote call outside of Smartsimple instance:
 
function api_call() {
$.ajax({
method: "POST",
type: "POST",
url: "/API/1/levelone/",
data: {
username: username,
password: password,
companyid: 825646,
alias: api
apitoken: "QlwYYlJERHVASmlfXWtTWklbXEt9UHpmDw4~",
recordid: 1234567,
},
dataType: "html"
})
.done(function(data) {
json = JSON.parse(data);
});
}
</pre>
 
===POST Response===
With every successful request a an HTTP status of 200 is returned along with a JSON response body that contains the record field datarecordset.
For record updates and creation, the <pre>Sample response body will return the Record ID and a status of "Updated Successfully".format for GET/LIST call based on configured field list:
<pre>Sample Response format for Update:<br />
{
"records":[
{
"recordidsf_Description":"0959-3985", "sf_Transaction ID":"6048788", "recordindexsf_Created Date":"2015-07-23 11:03:17", "sf_End Date":1"2015-07-23 11:03:17", "statussf_Subject":"updated successfullyAPI Test", "sf_Object ID":"0", "sf_Start Date":"2015-07-22 00:00:00", "sf_Modified Date":"2018-05-09 11:14:58", "sf_Type":"Publications", "sf_Created By":"SmartSimple Support",
}
],
</pre>
<pre>Sample Response format for GET/LIST based on configured field list:For record updates and creation, the response body will simply return the recordid and a status of "Updated Successfully".
<pre>Sample response format for UPDATE call:<br />
{
"records":[
{
"sf_Description":"0959-3985", "sf_Transaction IDrecordid":"6048788", "sf_Created Date":"2015-07-23 11:03:17", "sf_End Daterecordindex":"2015-07-23 11:03:17"1, "sf_Subjectstatus":"API Testupdated successfully", "sf_Object ID":"0", "sf_Start Date":"2015-07-22 00:00:00", "sf_Modified Date":"2018-05-09 11:14:58", "sf_Type":"Publications", "sf_Created By":"SmartSimple Support",
}
],
</pre>
===Error MessagesImportant Notes=======Using Update Functions====Here are some important notes to be aware of when calling update functions. * Date field values should be written in the format of YYYY-MM-DD.* Field types with pre-defined options, e.g. Select One, and Select Many type fields, need to be set with their stored value options, rather than their display captions. For failed requestsexample, SmartSimple returns HTTP 4xx status codesa field where you have defined options like "1=Yes;2=No" needs to be set by the values "1" or "2".* The update functions can also be used to create new records. This can be done by setting the recordid to 0. The response will then return the recordid of the new record created.
The most common case is HTTP 401 Unauthorized which could indicate one ====Update Behaviour====Please note when performing updates that the system behaviour will be similar to that of saving the record in the regular browser interface. Namely, the followingwill occur:
* Invalid authentication credentials providedAny existing and applicable template formulas will be triggered and run after a record update.* User Account type is not of "API User"Any existing and applicable workflows will be triggered and run after a record update.* If performing remote calls, make sure the companyid parameter is correctAny existing and applicable status-triggers will run for any status change after a record update.
====Using List Functions====
<!--66823 - SmartConnect grouping criteria-->
<!--75675 - SmartConnect field name and format consistency-->
* The number of records returned by a single SmartSimple API call is capped to 10000 records. If the criteria of your API call matches more than 10000 records, you will need to leverage the pagination parameters in order to make multiple calls to page through the results and return the full data set.
If the request is successful and the response is blank, review the following troubleshooting stepsCustom parameters for List Functions are:
* Ensure criteria - this is an optional json array. This contains the apitoken parameter is correct* If updatingfollowing nodes: "andor", "field", ensure the recordid is correct* Review the post endpoint url is pointing to the correct resource"operator" and "value"
: Values of each nodes:
: "andor" - either "and" or "or"
: "field" - name of the standard/custom field to set the condition to
: "operator" - can use the following: =,>,>=,<=,<,<>,!=,like,not like
: "value" - value for the filter
: '''''sample1: '''''
: criteria: [{"andor":"and","field":"FIELDNAME","operator":"like","value":"PATTERN"},{"andor":"and","field":"FIELDNAME2","operator":"isempty","value":"true"}]
: sortby: [{"field":"FIELDNAME","direction":"asc"}]
: othersettings : {"getstorevalue":"1","keyformat":"0"}
: '''''sample2: '''''
: criteria: [{"andor":"and","field":"FIELDNAME1","operator":"=","value":"100"},{"andor":"or","field":"FIELDNAME2","operator":"like","value":"PATTERN"},{"andor":"and","field":"FIELDNAME3","operator":"isempty","value":"false"}]
: sortby: [{"field":"FIELDNAME","direction":"desc"}]
: othersettings : {"getstorevalue":"0","keyformat":"0"}
: '''''sample3:'''''
: An example query with brackets: ( (cf_somefield1 like '%whatever%' or cf_somefield2 like  '%whatever%'  or cf_somefield3 like  '%whatever%'  or cf_somefield4like  '%whatever%' ) and (cf_someotherfield1='whatever' or cf_someotherfield2='whatever else'))
: criteria: [{ "andor": "(", "field": "cf_somefield1", "operator": "like", "value": "whatever" },{ "andor": "or", "field": "cf_somefield2", "operator": "like", "value": "whatever" },{ "andor": "or", "field": "cf_somefield3", "operator": "like", "value": "whatever" },{ "andor": "or", "field": "cf_somefield4", "operator": "like", "value": "whatever" },{ "andor": ") and (", "field": "cf_someotherfield1", "operator": "=", "value": "whatever" },{ "andor": "or", "field": "cf_someotherfield2", "operator": "=", "value": ""whatever else" }]
: sortby: 
: othersettings : {"getstorevalue":"0","keyformat":"0"}
* sortby - this is an optional json array. This contains the following nodes: "field" and "direction"
: "field" - name of the standard/custom field to sort records by
: "direction" - either "asc" (for ascending) or "desc" (for descending)
* othersettings
** getstorevalue - this is an optional settings for the json array. Options are: int type: '''0''' - to get display value, '''1''' to get stored value (value from the database eg. $25,000 vs 25000)
** keyformat - this is an optional settings for the json array. Options are: '''0''' - to use what is configured in the Field List form the SmartConnect Function, '''1''' - to use the custom field names / standard field names and '''2''' - to use the custom field ID
==Update Behaviour==Report Permission using API Report Function====By default, the [[User|users]] that are able to see any reports thru the API Function are [[User|users]] with the '''[[Manager Permission – Reports and Dashboards|Manager permission]]''' – '''reports'''. <br/>Please note when performing updates make sure that the system behaviour will be similar to that role of saving the record in active SmartSimple user account has the permission to view the regular browser interfacereports. Namely, <br/>Here is the link on how to allow reports to be shared with [[User|users]] in the following will occurAPI Report Function:[[Sharing_Reports_with_People_-_Overview|Sharing Reports with People]]
* Any existing and applicable template formulas will be triggered and run after a record update.===Error Messages===* Any existing and applicable workflows will be triggered and run after a record update.* Any existing and applicable status-triggers will run for any For failed requests, SmartSimple returns HTTP 4xx status change after a record updatecodes.
=Configuration - Advanced==Appendix===Creating SmartConnect functions==SmartConnect functions are created for each individual instance The most common case is HTTP 401 Unauthorized which could indicate one of SmartSimple. You can create multiple functions of the same action if needed, depending on the field list returned.following:
See [[Creating JSON functions|Creating and Managing SmartConnect Functions]] for a more detailed look at creating functions* Invalid authentication credentials provided.* User Account type is not of "API User".* If performing remote calls, make sure the companyid parameter is correct.
If the request is successful and the response is blank, review the following troubleshooting steps:
* Ensure the apitoken parameter is correct.
* If updating, ensure the recordid is correct.
* Ensure the post endpoint URL is pointing to the correct resource.
=Configuration - Advanced=
=Appendix=
==Standard Field Names==
See [[JSON API (SmartConnect) - Appendix: Standard Field Names|SmartConnect Standard Field Names]] for a list of all available Standard Fields that you can reference along with update restrictions.
The standard fields available for reference varies on the Record Type selected in the API call.
 
 
==Options and Settings==
===Available Action Types===
<!--89304 - SmartConnect 'Update Meta' - should be removed from dropdown-->
The following is a full list of available actions. Please note that not all actions will be available for all record types.
 
{| class="wikitable"
|-
|-
||Download File
||Download a single file from a specified record and field. 
|-
||List Files
|-
||Search Files
||Retrieve a list of files containing across a specific object type via keyword search of the file contents. Upload fields searched are restricted based on the field list specified string valuesin the api call. See [[Indexing Multiple and Single File Fields|Indexing Multiple and Single File fields.]]
|-
||Update Associations
||Returns formatted content processed by the variable processor from a specified record.  The system will replace all variables within the content parameter with variable values from that record.  E.g. Passing in "Hello @firstname@" as content for a contact named John Smith will return "Hello John".
|}
===Pagination===
4 new parameters are introduced and should be put inside the "'''othersettings'''" in json object for the API call<br />-''' recordstart, recordend, recordsperpage, pagenum'''<br />*Note: othersettings parameter is also used for other settings introduced earlier, ie. getstorevalue and keyformat, so your othersettings json can look something like this:<br />{"getstorevalue":"1","keyformat":"1","recordsperpage":100,"recordstart":1000}
 
'''Note: only up to 10000 records will be returned for each API call, so multiple API calls will be required to display all records with respective pagination parameters'''<br /><br />Returned json response will include the following (in the message json node) for all records, despite the above parameters have been set or not, results are based on the order by (sortby declared in API call or by default order by, eg. order by L1 ID asc):<br />- '''recordfrom''' (starts from record number xxx)<br />- '''recordto''' (last record number returned xxx)<br />- '''recordcount''' (number of records returned in this API call)<br />- '''allcount''' (number of records in total without the limit)<br />Returned Response:<br />e.g. "message":{"recordto":424,"recordcount":100,"allcount":460,"recordfrom":325}<br /><br />Priority of operations with the 4 new parameters:<br />1. when recordend > 0, only recordstart and recordend parameter will be taken into consideration, eg.<br />othersettings: {"recordend":35} - will return records from start up to and including 35th record, total records = 35<br />othersettings: {"recordstart":10,"recordend":35} - will return 10th to 35th record, total records = 26<br />othersettings: {"recordstart":10,"recordend":350,"recordsperpage":100} - will ignore recordsperpage because you have specified the start and end, return record 10 to 350, total 341 records
 
<br />2. pagenum > 0 and recordsperpage > 0, (to use pagenum, recordsperpage has be to specified), will ignore recordstart and recordend<br />othersettings: {"recordsperpage":50,"pagenum":2} - return records 51-100<br />othersettings: {"recordsperpage":100,"recordstart":12,"pagenum":1} - will ignore recordstart, return records 1-100<br />othersettings: {"recordsperpage":100,"recordstart":12,"pagenum":3} - will ignore recordstart, return records 201-300
 
<br />3. recordsperpage > 0<br />othersettings: {"recordsperpage":100} - return record 1 to 100<br />othersettings: {"recordsperpage":100,"recordstart":1} - return record 1 to 100<br />othersettings: {"recordsperpage":100,"recordstart":101} - return record 101 to 200<br />othersettings: {"recordsperpage":100,"recordstart":325} - return record 325 to 424
 
<br />4. recordstart > 0<br />othersettings: {"recordstart":12}, return all records starting from record 12, up to only 10000 number of records
 
 
 
===Searching of Empty or Non-empty Values===
Add criteria to search for records where a field is empty or not. You may now include an operator of isempty, with a corresponding value of either true or false, within a criteria in order to search for records based on either empty or non-empty value.
 
e.g. criteria:[{"andor":"and","field":"cf_123456","operator":"isempty","value":"true"}]
 
===Hourly API Call Limit===
<!--125991 - Throttle API calls-->
API calls in excess of 1000 per instance within the past hour will receive an error and blocked from using API until the total API calls count in the last hour drops below the limit.
 
=SmartConnect Examples=
See our [https://api.smartsimple.com/devtools/api.html interactive demonstration page] for a demo and live sample of how the API works. This page is connected to a specific demonstration instance containing sample data.
 
We strongly encourage you to review this page in order to gain a better understanding of the syntax and functionality of the API.
 
See [[API Sample Code|API examples]] for a sample list of SmartConnect calls.
 
 
=Examples=
<!--
Smartstaff
1,385
edits

Navigation menu