Not logged in - Login
< back

API - Item Edit


First, we will do a get request to retrieve the item object. Note the item id is provided in the url (in this example the number 53519075351907)
GET
http:localhost:55571/api/items/http://localhost:55571/api/items/5351907


This will return a json object for the item:


{
"sequentialCaseId": "1",
"sequentialCaseIdNested": {
"section": 1,
"nested": null
},
"barcode": "0ea938ac-664c-4dfa-96cf-26b6aed6725e",
"description": "test",
"recoveryDate": "2020-11-27T17:01:00Z",
"recoveryLocation": "Norwood, OH, USA",
"recoveryLocationLatitude": null,
"recoveryLocationLongitude": null,
"active": true,
"locationId": 1,
"location": "root",
"fullLocation": null,
"lastLocationId": 1,
"lastLocation": "root",
"statusId": 1,
"status": "Checked In",
"categoryId": 195,
"category": "Alcohol",
"custodyReasonId": 57,
"custodyReason": "Evidence",
"recoveredById": 0,
"recoveredBy": "",
"submittedById": 1,
"submittedBy": "Jack 3176D103FF Sparrow",
"custodianId": null,
"custodian": null,
"currentOfficeId": 1,
"currentOfficeName": "1 Office, LLC",
"primaryCaseId": 2934782,
"primaryCaseNumber": "2020-1127-01",
"primaryCaseOfficerId": 1,
"primaryCaseOfficer": "Jack 3176D103FF Sparrow",
"primaryCaseOffenseTypeId": 74,
"primaryCaseOffenseType": "Alcohol Related",
"isPrimaryCaseRestricted": false,
"make": null,
"model": null,
"serialNumber": null,
"creatingOrgId": 1,
"dateCreated": "2020-11-27T17:01:12.895Z",
"loaningOrgId": null,
"incomingOrgId": null,
"sequentialOrgId": 163139,
"cases": [
2934782
],
"caseModels": [],
"media": null,
"mediaAmount": 1,
"rootMediaFolderId": 294800,
"formData": null,
"formDataAmount": 0,
"notes": [],
"notesAmount": 0,
"tags": [],
"tagsAmount": 0,
"barcodes": [],
"barcodesAmount": 0,
"id": 5351907,
"sqlId": 0,
"people": null,
"peopleIds": [],
"peopleNames": null,
"peopleGuids": null,
"parentItemId": null,
"parentItemDescription": null,
"parentSequentialOrgId": null,
"childItems": [],
"childItemsAmount": 0,
"tasks": [],
"tasksAmount": 0,
"historiesAmount": 0,
"checkoutReasonId": null,
"checkoutTakenById": null,
"checkedOutById": null,
"checkoutExpectedReturnDate": null,
"checkoutNotes": null,
"checkoutSignature": null,
"isNewItemCheckout": false,
"isForbidden": false
}



2. Now you can use the returned item object, make any changes to the item, and then submit update to the following endpoint using the item id in a PUT request: -request.
Note - formData in the above GET is null, for the update to process correctly, your request should have an empty array.

https://secure.trackerproducts.com/api/cases/2933671PUT
http://localhost:55571/api/items/5351907
Here is the body of the request: {
"id": 2933671,
"caseNumber": "2018-0521-01",
"caseOfficerId": 1,
"caseOfficer": "Jack Sparrow",
"offenseTypeId": 74,
"offenseType": "Alcohol Related",
"offenseDescription": "Public Intoxication at a shopping mall",
"offenseLocation": "Newport, KY, USA",
"offenseDate": "2018-05-21T04:00:00Z",
"followUpDate": null,
"active": true,
"officeId": 1,
"officeName": "1 Office",
"creatorId": 1,
"creator": "Jack Sparrow",
"createdDate": "2018-05-21T10:06:56.692Z",
"organizationId": 1,
"organizationName": "Tracker Products",
"items": [
4932605
],
"nextItemId": "2",
"media": null,
"mediaAmount": 0,
"rootMediaFolderId": 153738,
"formData": [

],]
,
"formDataAmount": 0,
"notes": null,
"notesAmount": 0,
"tags": [

],
"tagsAmount": 0,
"peopleAmount": 1,
"tasksAmount": 0,
"historiesAmount": 14,
"closedDate": null,
"reviewDate": "2018-09-13T04:00:00Z",
"reviewDateNotes": "",
"isRestricted": false,
"permissionAmount": 0,
"permissions": null,
"isForbidden": false
}

There is no returned content. A successful update will return a status code 204 No Content.


Case update to add custom form data
1. you must retrieve custom form data.

Here is the endpoint to retrieve available custom forms:
Note there are 4 options for retrieving forms - All, Cases, Items, People
(see the request header below)

https://securelb.trackerproducts.com/api/forms?formType=Cases

Here are the results:
[
{
"id": 34,
"name": "Case Status (Sys Template)",
"schema": "{\"fields\":[{\"type\":\"selectlist\",\"name\":\"field3377\",\"displayName\":\"Case Status\",\"options\":[{\"value\":\"1\",\"text\":\"Active\",\"$$hashKey\":\"object:19459\"},{\"value\":\"2\",\"text\":\"Closed\",\"$$hashKey\":\"object:19460\"},{\"value\":\"3\",\"text\":\"Review\",\"$$hashKey\":\"object:19461\"}],\"value\":\"1\",\"$$hashKey\":\"object:19444\",\"$_invalid\":false,\"$_displayProperties\":true},{\"type\":\"selectlist\",\"name\":\"field9715\",\"displayName\":\"Disposition Review\",\"options\":[{\"value\":\"1\",\"text\":\"Six Months\",\"$$hashKey\":\"object:2806\"},{\"value\":\"2\",\"text\":\"One Year\",\"$$hashKey\":\"object:2807\"},{\"value\":\"3\",\"text\":\"Five Years\",\"$$hashKey\":\"object:2808\"}],\"value\":\"2\",\"$$hashKey\":\"object:2786\",\"$_invalid\":false,\"$_displayProperties\":true}],\"$_invalid\":false}",
"organizationId": 1,
"organization": null,
"modelTypeId": 4,
"modelType": null,
"locked": false,
"isSharedForm": true,
"categoryForms": null,
"offenseTypeForms": null
},

{
"id": 759,
"name": "Legal Level",
"schema": "{\"fields\":[{\"type\":\"radiobuttonlist\",\"name\":\"field733\",\"displayName\":\"What is legal level?\",\"options\":[{\"value\":\"3\",\"text\":\"Going to trial\",\"$$hashKey\":\"object:8464\"},{\"value\":\"2\",\"text\":\"No trial\",\"$$hashKey\":\"object:8463\"},{\"value\":\"1\",\"text\":\"Thrown Out\",\"$$hashKey\":\"object:8462\"}],\"value\":null,\"$$hashKey\":\"object:8456\",\"$_displayProperties\":true,\"$_invalid\":false,\"validation\":{\"messages\":{}}}]}",
"organizationId": 1,
"organization": null,
"modelTypeId": 4,
"modelType": null,
"locked": false,
"isSharedForm": false,
"categoryForms": null,
"offenseTypeForms": null
},

{
"id": 830,
"name": "state lab form",
"schema": "{\"fields\":[{\"type\":\"text\",\"name\":\"field2866\",\"displayName\":\"Textbox\",\"$$hashKey\":\"object:6914\"},{\"type\":\"email\",\"name\":\"field2868\",\"displayName\":\"Email\",\"$$hashKey\":\"object:6921\"}]}",
"organizationId": 1,
"organization": null,
"modelTypeId": 4,
"modelType": null,
"locked": false,
"isSharedForm": false,
"categoryForms": null,
"offenseTypeForms": null
},

{
"id": 911,
"name": "Precinct2",
"schema": "{\"fields\":[{\"type\":\"selectlist\",\"name\":\"field8538\",\"displayName\":\"Select List\",\"options\":[{\"value\":\"3\",\"text\":\"East\",\"$$hashKey\":\"object:7258\"},{\"value\":\"1\",\"text\":\"North\",\"$$hashKey\":\"object:7256\"},{\"value\":\"\",\"text\":\"Select an option\",\"$$hashKey\":\"object:7255\"},{\"value\":\"2\",\"text\":\"South\",\"$$hashKey\":\"object:7257\"},{\"value\":\"4\",\"text\":\"West\",\"isNew\":true,\"$$hashKey\":\"object:7345\"}],\"value\":\"\",\"$$hashKey\":\"object:7248\",\"$_displayProperties\":true,\"$_invalid\":false,\"validation\":{\"messages\":{}}}]}",
"organizationId": 1,
"organization": null,
"modelTypeId": 4,
"modelType": null,
"locked": false,
"isSharedForm": false,
"categoryForms": null,
"offenseTypeForms": null
}
]


The below request will add "Precint2" form to the case
An example PUT request will look like the following:

https://securelb.trackerproducts.com/api/cases/2933671

Note- within formData.data double quotes are escaped with a backward slash

{
"id": 2933671,
"caseNumber": "2018-0521-01",
"caseOfficerId": 1,
"caseOfficer": "Jack Sparrow",
"offenseTypeId": 74,
"offenseType": "Alcohol Related",
"offenseDescription": "Public Intoxication at a train station, again",
"offenseLocation": "Newport, KY, USA",
"offenseDate": "2018-05-21T04:00:00Z",
"followUpDate": null,
"active": true,
"officeId": 1,
"officeName": "1 Office",
"creatorId": 1,
"creator": "Jack Sparrow",
"createdDate": "2018-05-21T10:06:56.692Z",
"organizationId": 1,
"organizationName": "Tracker Products",
"items": [
4932605
],
"nextItemId": "2",
"media": null,
"mediaAmount": 0,
"rootMediaFolderId": 153738,
"formData": [
{
"formId": 911,
"formName": "Precinct2",
"data": "{\"field8538\":\"2\"}",
"entityId": "2933671",
"dateFields": [

]
}
],
"formDataAmount": 0,
"notes": null,
"notesAmount": 0,
"tags": [

],
"tagsAmount": 0,
"peopleAmount": 1,
"tasksAmount": 0,
"historiesAmount": 18,
"closedDate": null,
"reviewDate": "2018-09-13T04:00:00Z",
"reviewDateNotes": "",
"isRestricted": false,
"permissionAmount": 0,
"permissions": null,
"isForbidden": false
}

Adding tags to a case is a similar process.
Here is an endpoint to retrieve all available tags for an organization:
This is a GET request
https://securelb.trackerproducts.com/api/tags

This returns an array of tags avaialble

[
{
"itemsCount": 0,
"casesCount": 2,
"id": 2388,
"name": "Test Tag",
"organizationId": 1,
"organization": null,
"active": true
},
{
"itemsCount": 0,
"casesCount": 1,
"id": 2389,
"name": "Test Tag 2",
"organizationId": 1,
"organization": null,
"active": true
},
{
"itemsCount": 0,
"casesCount": 1,
"id": 2390,
"name": "Test Tag 3",
"organizationId": 1,
"organization": null,
"active": true
},
{
"itemsCount": 0,
"casesCount": 0,
"id": 2391,
"name": "Test Tag 4",
"organizationId": 1,
"organization": null,
"active": true
}

]

Here is a PUT request for a case adding the Tag, "Test Tag" to the case

https://securelb.trackerproducts.com/api/cases/2933671

{
"id": 2933671,
"caseNumber": "2018-0521-01",
"caseOfficerId": 1,
"caseOfficer": "Jack Sparrow",
"offenseTypeId": 74,
"offenseType": "Alcohol Related",
"offenseDescription": "Public Intoxication at a train station, again",
"offenseLocation": "Newport, KY, USA",
"offenseDate": "2018-05-21T04:00:00Z",
"followUpDate": null,
"active": true,
"officeId": 1,
"officeName": "1 Office",
"creatorId": 1,
"creator": "Jack Sparrow",
"createdDate": "2018-05-21T10:06:56.692Z",
"organizationId": 1,
"organizationName": "Tracker Products",
"items": [
4932605
],
"nextItemId": "2",
"media": null,
"mediaAmount": 0,
"rootMediaFolderId": 153738,
"formData": [
{
"id": "5b2cec7a185c8a62b89ad500",
"active": true,
"entityId": 2933671,
"formId": 911,
"formName": "Precinct2",
"dateFields": [

],
"data": "{\"field8538\":\"2\"}",
"organizationId": 1,
"officeId": 1,
"visibilityId": 0,
"route": "formdata",
"reqParams": null,
"restangularized": true,
"fromServer": true,
"parentResource": {
"route": "cases",
"parentResource": null,
"id": "2933671"
},
"restangularCollection": false
}
],
"formDataAmount": 1,
"notes": null,
"notesAmount": 0,
"tags": [
{
"tagModelId": 2388,
"name": "Test Tag"
}
],
"tagsAmount": 0,
"peopleAmount": 1,
"tasksAmount": 0,
"historiesAmount": 20,
"closedDate": null,
"reviewDate": "2018-09-13T04:00:00Z",
"reviewDateNotes": "",
"isRestricted": false,
"permissionAmount": 0,
"permissions": null,
"isForbidden": false
}￿￿￿

Possible Error Scenarios


In this section, we will look at errors returned during a case POST.

Auto Disposition Error


This error occurs when auto disposition is turned on for an organization and the organization does not have auto disposition settings for all offense types.
Here is an example of the error I will receive when attempting to do a PUT request for a case with offense type Bomb Threat:


{
"autoDispoErrors": [
"Offense Type and Auto Disposition Settings are not found"
]
} )
This message is the result of missing auto disposition settings for the offense type, Bomb Threat.


To resolve, first get the auto disposition settings for the organization.

GET https://{api url}/api/autoDisposition/settings/

{
"isAutoDispositionOn": true,
"officeAutoDispositionReviewers": [
{
"officeId": 1,
"officeName": "1 Office, LLC",
"generalTaskFromUserId": 1,
"generalTaskFromUserGroupId": null,
\ "isDefault": true,
"isGeneralTaskFromUser": true
},
{
"officeId": 175,
"officeName": "175 Office",
"generalTaskFromUserId": null,
"generalTaskFromUserGroupId": 76,
"isDefault": false,
"isGeneralTaskFromUser": false
}
],
"settings": [
{
"id": 1,
"active": true,
"daysToFollowUp": 1000,
"organizationId": 1,
"organization": null,
"offenseTypeId": 1,
"offenseType": {
"organizationOffenseTypeFollowUpDays": null,
"id": 1,
"name": "Other",
"active": true,
"offenseTypeForms": null,
"organizations": [],
"autoDispositionSettings": [],
"customDropdownCategoryId": 1,
"customDropdownCategory": null
}
},
{
"id": 2,
"active": true,
"daysToFollowUp": 1000,
"organizationId": 1,
"organization": null,
"offenseTypeId": 2,
"offenseType": {
"organizationOffenseTypeFollowUpDays": null,
"id": 2,
"name": "Arson",
"active": true,
"offenseTypeForms": null,
"organizations": [],
"autoDispositionSettings": [],
"customDropdownCategoryId": 1,
"customDropdownCategory": null
}
},
{
"id": 3,
"active": true,
"daysToFollowUp": 1000,
"organizationId": 1,
"organization": null,
"offenseTypeId": 3,
"offenseType": {
"organizationOffenseTypeFollowUpDays": null,
"id": 3,
"name": "Assault",
"active": true,
"offenseTypeForms": null,
"organizations": [],
"autoDispositionSettings": [],
"customDropdownCategoryId": 1,
"customDropdownCategory": null
}
},
{
"id": 0,
"active": false,
"daysToFollowUp": 0,
"organizationId": 0,
"organization": null,
"offenseTypeId": 178,
"offenseType": {
"organizationOffenseTypeFollowUpDays": null,
"id": 178,
"name": "Bomb Threat",
"active": true,
"offenseTypeForms": null,
"organizations": [],
"autoDispositionSettings": [],
"customDropdownCategoryId": 1,
"customDropdownCategory": null
}
}
,


The response is rather long - I have abbreviated to include the pertinent information. Note that for offense type Bomb Threat id is 0, days to follow up is 0, organizationId is 0. We need to add settings for this offense type.
To accomplish this, the api user token must belong to a user with orgAdmin permissions.

PUT https://{api url}/api/autoDisposition/settings/
{
"isAutoDispositionOn": true,
"officeAutoDispositionReviewers": [
{
"officeId": 1,
"officeName": "1 Office, LLC",
"generalTaskFromUserId": 1,
"generalTaskFromUserGroupId": null,
\ "isDefault": true,
"isGeneralTaskFromUser": true
},
{
"officeId": 175,
"officeName": "175 Office",
"generalTaskFromUserId": null,
"generalTaskFromUserGroupId": 76,
"isDefault": false,
"isGeneralTaskFromUser": false
}
], "settings": [
{
"id": 0,
"active": false,
"daysToFollowUp": 100,
"organizationId": 1,
"organization": null,
"offenseTypeId": 178,
"offenseType": {
"organizationOffenseTypeFollowUpDays": null,
"id": 178,
"name": "Bomb Threat",
"active": true,
"offenseTypeForms": null,
"organizations": [],
"autoDispositionSettings": [],
"customDropdownCategoryId": 1,
"customDropdownCategory": null
}
}

],
"listPermissionGroupIds": [
1,68,69,1387,1388, 1389
],
"createPermissionGroupIds": [
1,68,69,1387,1389
],
"updatePermissionGroupIds": [
43,68,69,1387,1389
]
}


Some Notes:

  • The above PUT does not need to have all of the offense types returned in the GET request - just the offense types which have no settings.
  • Note that the above error will continue to be returned until all of the organization offense types have a valid auto disposition setting.
  • The PUT for auto disposition settings must include the arrays of permission groups - "listPermissionGroupIds", "createPermissionGroupIds", "updatePermissionGroupIds"
    These permissions can be found here:
    GET https://{api url}/api/autoDisposition/{accesssType}/groups/


    There are 3 access types which you will provide in the above request:
  • List - value of 1
  • Create - value of 4
  • Update - value of 3
    Here is my complete request:
    GET https://{api url}/api/autoDisposition/1/groups/


    This returns an array:
    [
    {
    "id": 1,
    "text": "Not used Admin"
    },
    {
    "id": 68,
    "text": "Power User"
    },
    {
    "id": 69,
    "text": "Basic User"
    },
    {
    "id": 1387,
    "text": "Has CLP Access"
    },
    {
    "id": 1388,
    "text": "Has NO CLP Access"
    },
    {
    "id": 1389,
    "text": "Has CLP No Create Transactions"
    }
    ]
    The ids in the above array are what you will use to populate "listPermissionGroupIds", "createPermissionGroupIds", "updatePermissionGroupIds" when updating auto disposition settings.