This section lists the errors produced by the RZ APIs:

  • /dataload/project/descriptions
  • /dataload/project/projectcomponents
  • /dataload/project


The APIs always return an HTTP status of 200.
The success of failure is specified in the status field of the response.
 There are no numeric error codes, just error messages.

Errors are returned as follows: {"row": "0", "status": "failure", "error": "<message>"}

Errors happen in two stages:

  • Stage 1: Request-level (before any record is touched)
  • Stage 2: Per-record (if one row fails validation, others can still succeed).
  • Stage 3: DML / System (internal Salesforce errors)

 

Stage 1: Request-level (whole call rejected)

Internal Identifier

Not sent in response

Error message (request level)

How it occurs

PERMISSION_API

You do not have enough permissions to use this service. Check your profile and ensure you have permission on all fields to load.

DataLoadAPI.innerCheckDataLoadHandlerPermission() runs first and checks object/field-level (FLS) access on every field the DTO touches (e.g. PSProject__c, PSComponent__c, PSDescription__c and their fields). Fails if the running user's profile/permission set is missing read/create/update on any of those fields.

REQUEST_EMPTY

Your attempt to use the service is not valid. Json is null (and cannot be deserialized).

Request body is blank/null.

REQUEST_MALFORMED

Your attempt to use the service is not valid. Json is malformed (and cannot be deserialized).

JSON.deserializeStrict throws a JSONException — invalid JSON, wrong data types, or unexpected/missing fields for the DTO shape.

NOT_AVAILABLE_API_TYPE

The API Type has not been specified in the call or implemented.

This is a defensive fallback error that shouldn't be occurring in practice.

DEFAULT_PERMISSION_ACTION_ERROR

You do not have the required permissions to perform this action

The user running the API doesn’t have the required permissions

NO_RECORDS_SPECIFIED

No records has been specified.

The detail list provided in projectDetailList / projectAndComponentDetailList / descriptionDetailList is null or empty.

TOO_MANY_RECORD

There is a 200 records limits.

More than 200 rows in the detail list (only enforced when not run as a batch job).

 

Stage 2: Per-record (that row fails, others in are still  imported)

Internal Identifier

Not sent in response

Applies to

Error message (request level)

How it occurs

PROJECTID_IS_REQUIRED

loadProjects  loadProjectsAndComponents

The Project ID or External ID is required.

A row has neither projectId nor projectExtSysId set

PRODUCTID_IS_REQUIRED

loadProjectsAndComponents

The Product ID or External ID is required.

A row has neither productId nor productExtSysId set

PRODUCT_LONG_OR_SHORT_TITLE_IS_REQUIRED

loadProjects, loadProjectsAndComponents

The Long Title (longTitle) or Short Title (productShortTitle) fields are required.

A row has neither longTitle nor productShortTitle populated.

DESCRIPTIONID_IS_REQUIRED

loadDescriptions

The Project External ID is required.

A row has a blank projectExtSysId (name is a bit misleading — it's actually checking the linked project's external ID, not a description ID).

 

Stage 3: DML / System (internal Salesforce errors)

When a row passes validation and is actually upserted, any Salesforce DML failure (validation rule, required-field-missing, duplicate rule, field-level data error, etc.) can still occur.
 When caught these errors are returned as follow:

{
"row": "0",
"status": "failure", //or "Project:failure" for project+component endpoint
"error": "Salesforce error message",
"projectId": "a0X...", //extra field, not present in stage 1/2 errors
"projectExternalId": "EXT-123", //extra field, not present in stage 1/2 errors
"objectList": [
{ "source": "Project Upsert", "sfId": "a0X...", "externalId": "EXT-123" }
]
 }