General Tips

Issue Possible Cause Possible Solution
PUT|POST requests failing Required properties could be missing. Best practice is to 1) retrieve JSON content by calling GET; 2) edit the JSON returned by the GET; 3) use the modified JSON as the body of your PUT|POST.
500 Error on PUT|POST Resource Routes that Support EAs PUT|POST routes that support EAs need to include EA collections, even if the collection is empty. The exception to this is PUT routes that support field-level updates (marked with an ‘*’ on the routes page) If no EA values are being populated, include empty collections in the body of your request:
“extendedAttributes”: [],
“multipleValueExtendedAttributes”: []
null response AccessToken could be expired. Refresh your accessToken. The best practice is to use your refreshToken (see Authorization section for details).
Omitting required EAs doesn’t throw an error Functioning as expected. Because EAs may be required in one DCT or page layout, but not another, validation does not ensure that “required” EAs are present on PUT|POST requests.
EAs not being validated ‘disable-api-ea-validation’ feature flag could be set. When the ‘disable-api-ea-validation’ feature flag is set, validations (such as data type, data length, range, etc) are bypassed. When this feature flag is not set, standard validations are performed (see previous tip for an exception on required EAs). Note that this feature flag is deprecated and should no longer be used. Please contact Aprimo Support if you believe this is enabled on your tenant.
My PUT route supports field-level updates, but I can’t update an individual EA. 1) Syntax
2)Conflict with EA collections.
1) the syntax for updating an individual EA is:

{
	"extrAttr<eaID>":"<value>"
  }

2) if you’re updating an individual EA, be sure you aren’t also updating an EA collection. EA collections (collections are in square brackets) work by flush-and-fill. If you omit an item in the collection, you’re indicating that you want it deleted (if it exists). This conflicts with the update on the individual field.

Date-Only EA is returned as DateTime Functioning as Expected Behind the scenes, date-only EAs are stored in a DateTime format, where the time component is set to zero. For example, a Date-Only EA showing 02/15/2021 in the UI, will be returned as “2021-02-15T00:00:00.000. Integrations are responsible for converting the data format if necessary.

Resource-Specific Tips

Resource Issue Possible Solution
user-roles Can’t update laborRateBase field The value of ‘laborRateBase’ is calculated by the field ‘laborRateEntered’ and ‘ExchangeRate’, there is no ‘ExchangeRate’ in user-roles, so ‘laborRateBase’ always equals ‘laborRateEntered’. ‘laborRateBase’ cannot be set separately. In the UI, the field ‘Labor Rate’ is ‘laborRateEntered’, not ‘laborRateBase’.
activities Workflows not starting The field names surfaced in the activity API don’t match the names in the UI, which can be confusing:

  • UI Attribute: Begin Date = API Attribute: beginDate
  • UI Attribute: Project Anchor Date = API Attribute: endDate
  • UI Attribute: End Date = API Attribute: visualEndDate

In the UI, the Project Anchor Date detaults to the Activity Begin Date when an activity is created. So when creating an activity via the API, the beginDate and endDate field need to be set to the same value. Failure to do this can cause workflows not to start if the Project Anchor Date (endDate) is set as the End Date (visualEndDate).

Attachments Find all attachments related to an activity Use POST api/attachments/search, and use a body similar to the following to identify all attachments on a specific activity:

{
  "and" :
  
  [
    {
  "equals" :
  {
    "fieldName" : "objectTypeId",
    "fieldValue" : "1"
    }
  },
    {
  "equals" :
  {
    "fieldName" : "objectId",
    "fieldValue" : "62302"
    }
  }
 
 
  ]
}

This searches for attachments associated with objectType 1 (activities), where the activity ID (objectID) is (in this case, 62302).