Tenant API

Errors

Every error response documented across the Tenant API, grouped by status code. 139 documented failure modes in total.

Error envelope

Failures return a JSON body with the HTTP status repeated in statusCode, a short error label, and a message describing what went wrong. Validation failures may return several messages at once.

application/json
{
  "statusCode": 400,
  "message": [
    "pageSize must not be greater than 50"
  ],
  "error": "Bad Request"
}

Status codes

400 Bad Request

The request was rejected before it reached your data — a missing field, a value out of range, or a reference that could not be resolved.

CodeWhen it happensEndpoints
—dateAssignment is missing or malformed (type not one of the accepted values, timeRange without type or numeric value).
—A referenced entity could not be resolved: service variant, product (by sku), product unit (by serial), or providerReference not found. Also when productUnits length exceeds quantity.
—id is not a positive integer, or serialNumber is empty.
—Missing or invalid fields, an invalid/unknown dynamic form, or an item that cannot be resolved (e.g. product, product unit, or warranty not found).
—Invalid extendedWarrantyStartMode, or extendedWarrantyStartDate missing or invalid when extendedWarrantyStartMode is "CUSTOM_DATE".
—A pagination parameter has the wrong type or is out of range (for example pageSize above 50).
—The referenced product is not a component, the component lookup type is not supported, an area id is not numeric, an area reference is ambiguous, an area appears in more than one group, or a group mixes areas of different currencies.
_(validation messages)_One or more fields are missing or invalid. The body carries message as an **array of strings**, one per failed validation.
\NO\_ACTIVE\_ADDON\_OPERATION\_FOUND\_FOR: ADDON\_{IDSKU}: {value} VARIANT\_ID: {variantId}\
ADDON_ID_IS_NOT_A_VALID_POSITIVE_INTEGERAn "addonId" value is not a positive integer.
Address {id} has no customer associatedThe address is a customer address but has no customer linked to it.
Address {id} is not a customer addressThe address exists but is not associated to a customer entity.
Address {id} not foundNo Sodtrack address exists with that ID.
ADDRESS_REFERENCE_NOT_SUPPORTEDaddress.type was sent as addressReference. Resolution by external address reference is not yet supported; use addressId.
BOOKING_CANNOT_BE_RESCHEDULED: status {status}The booking is in execution, done or cancelled.
BOOKING_NOT_FOUND_FOR_IDNo booking found for the given entity ID.
BOOKING_NOT_FOUND_FOR_REFERENCENo booking found for the given entity reference.
Date is required when type is DIRECTdateAssignment.date is missing.
ENTITY_IDENTIFIER_REQUIREDentity.value is missing or empty.
ENTITY_TYPE_NOT_SUPPORTEDentityType is not supported for creation. Only booking, lead, and work_order are supported.
Exactly one of id or sku must be providedNeither or both identifiers were sent.
FIELD_REFERENCE_IS_REQUIREDA qualifying question entry is missing fieldReference.
id must be an integer number / id must not be less than 1id is not a positive integer.
INCIDENT_NOT_FOUNDNo incident found for the given ID or reference.
INCIDENT_REASON_NOT_FOUNDThe incident reason ID does not exist in Sodtrack.
INCIDENT_REASON_REFERENCE_NOT_SUPPORTEDResolution by reasonReference is not yet supported. Use reasonId.
INCIDENT_STATUS_NOT_FOUNDThe incident status ID does not exist in Sodtrack.
INCIDENT_STATUS_REFERENCE_NOT_SUPPORTEDResolution by statusReference is not yet supported. Use statusId.
Invalid addressId: {value}address.value is not a positive integer.
Invalid productId: {value}product.value is not a positive integer when product.type is productId.
INVALID_ACCOUNTABLE_USERaccountableUser was provided but could not be resolved to an existing user.
INVALID_CREATOR_USERcreatorUser was provided but could not be resolved.
INVALID_DATE: expected ISO 8601dateAssignment.date is not a valid ISO 8601 date.
INVALID_INCIDENT_REASON_IDReason id must be a number.
INVALID_INCIDENT_REASON_TYPEInvalid incident reason identifier type.
INVALID_INCIDENT_STATUS_IDStatus id must be a number.
INVALID_INCIDENT_STATUS_TYPEInvalid incident status identifier type.
INVALID_INCIDENT_TYPEInvalid incident identifier type (must be incidentId or incidentReference).
INVALID_LATITUDE_OR_LONGITUDEaddress.coordinate was sent with lat/lng outside valid ranges (lat -90–90, lng -180–180).
INVALID_PHONE_NUMBERphoneNumber could not be parsed as a valid phone number.
INVALID_QUALIFYING_QUESTION_WITH_ID_REFERENCE: {fieldReference}A qualifying question fieldReference does not match any dynamic field for the service’s lead form.
INVALID_REPORTER_USERreporterUser was provided but could not be resolved.
INVALID_SALES_CHANNELThe given saleChannel was not found (in strict mode).
INVALID_SALES_CHANNELThe given salesChannelId does not exist or is invalid.
INVALID_SALES_CHANNELsaleChannel.value is not a valid sales channel reference, or is not a positive integer when type is "id".
INVALID_SALES_CHANNELThe sale channel could not be resolved from saleChannel.
INVALID_SERVICEThe given serviceId does not exist or has no associated lead form.
INVALID_STATUS_TO_RESOLVE_APPROVALThe budget execution is not in a status that accepts an approval decision, typically because it was already approved.
INVALID_USER_TYPEInvalid user identifier type.
INVALID_WORK_ORDER_IDentity.value is not a number when resolving a work order by ID.
InvalidParametersOne or more required fields are missing or invalid.
InvalidParametersOne or more required fields are missing or invalid (e.g. validation pipeline).
InvalidParametersA required field is missing or invalid (e.g. quantity < 1, or type not in the allowed values for variant / product / product units).
InvalidParametersbudgetExecutionId is not a number.
InvalidParametersA required field (sku, name) is missing or a field has an invalid value (e.g. unsupported type).
InvalidParametersThe product selector is missing/invalid, or product.type is not "productId" / "productSku".
InvalidParametersA query parameter is not an integer or falls outside its allowed range: id or bookingId below 1, pageNumber below 1, or pageSize outside 1–50.
InvalidParameterscustomerId is not a valid integer.
InvalidParameterscustomerId is not a number, or a pagination parameter is not an integer or falls outside its allowed range.
InvalidParametersMissing or invalid request parameters.
LEAD_NOT_FOUNDThe lead could not be found for the given leadId or leadReference.
LEAD_NOT_FOUND_FOR_IDNo lead found for the given entity ID.
LEAD_NOT_FOUND_FOR_REFERENCENo lead found for the given entity reference.
MAINTENANCE_PLAN_EXECUTION_ALREADY_IN_PROGRESSThe unit already has an open cycle (PENDING or IN_PROGRESS) for this execution variant.
MAINTENANCE_PLAN_NOT_EXISTSNo maintenance plan covers the unit's product for the given execution variant.
MAINTENANCE_RULE_NOT_EXISTSThe plan exists but holds no rule for the given execution variant.
MULTIPLE_BOOKINGS_FOUND_FOR_REFERENCEMore than one booking shares the given reference.
MULTIPLE_CUSTOMERS_FOUND_FOR_REFERENCEMore than one customer matches the provided reference/email; resolution is ambiguous. Use a unique reference or contact.
MULTIPLE_INCIDENTS_FOUND_FOR_REFERENCEMore than one incident matches the given reference.
NO_ACTIVE_ADDON_OPERATION_FOUND_FOR: ADDON_{IDSKU}: {value} VARIANT_ID: {variantId}
NO_COVERAGE_FOR_ADDON: {addonId} (Reference: {reference})The addon is not offered at the location.
NO_VARIANT_FOUND_FOR_ID / NO_VARIANT_FOUND_FOR_SKUA variant could not be found by its id or SKU.
One or more required fields are missing or invalid.—
pageNumber must not be less than 1pageNumber out of range.
pageSize must not be greater than 50 / pageSize must not be less than 1pageSize out of range.
Product not found in the product module: sku={value}No catalog product matches the given SKU.
PRODUCT_NOT_EXISTSThe unit has no catalog product associated, so no plan can be matched.
PRODUCT_UNIT_NOT_EXISTSNo product unit matches the given ID or serial number.
PRODUCT_UNIT_SERIAL_NUMBER_AMBIGUOUSThe serial number matches units of more than one product. Use productUnitId.
PROJECT_REFERENCE_ALREADY_USED: {reference}A project with the given reference already exists. The reference must be unique.
Provide exactly one of \id\ or \serialNumber\\Neither identifier was sent, or both were.
REQUIRES_ADDRESS_OR_ZIP_CODEThe service is not an in-store service and the request did not include coordinates, address text, or zip code.
Service variant not found: type={type}, value={value}No service variant matches the given ID or SKU.
TIME_RANGE_NOT_FOUND: {type} {value}No time range matches the id or index sent.
Validation errorA query parameter has an invalid value: id or customerId is not a positive integer, pageSize is outside 1–50, or pageNumber is below 1. The response body lists the offending parameters.
Validation errorA query parameter has an invalid value: id or bookingId is not a positive integer, pageSize is outside 1–50, or pageNumber is below 1. The response body lists the offending parameters.
Validation failed (numeric string is expected)bookingId is not an integer.
Validation failed (numeric string is expected)customerId is not an integer.
Validation message, e.g. date must be a valid ISO 8601 date stringA field is missing, has an invalid value, or a variant or addon is repeated.
Validation message, e.g. variants should not be empty, quantityOfDays must not be greater than 31A field is missing, has an invalid value, or a variant or addon is repeated.
Validation message, e.g. variants should not be empty, startDate must be a valid ISO 8601 date stringA field is missing, has an invalid value, or a variant or addon is repeated.
VARIANT_ID_IS_NOT_A_VALID_POSITIVE_INTEGERA "variantId" value is not a positive integer.
WORK_ORDER_NOT_FOUND_FOR_IDNo work order found for the given entity ID.
WORK_ORDER_NOT_FOUND_FOR_REFERENCENo work order found for the given entity reference.

401 Unauthorized

Authentication failed. The bearer token is missing, malformed or expired.

CodeWhen it happensEndpoints
—API key missing or invalid, or the request does not come from an authorized network.
—Authentication token missing or expired.
—Missing or invalid x-api-key, or the request does not come from an authorized origin.
—The API key is missing or invalid.
—x-api-key is missing or invalid, or the request does not originate from an authorized network.
—Missing or invalid x-api-key.
—x-api-key is missing or invalid.
—The API key is missing, invalid, or the request origin is not authorized.
—API key missing or invalid.
—x-api-key is missing or invalid, or the request does not reach Sodtrack through the authorized network.
—API key missing/invalid, or request not from an authorized network.
—Missing or expired authentication token.
—Authentication failed or token expired.
Authentication token missing or expired.—

403 Forbidden

Authenticated, but not permitted. Usually the request origin is not on the allowlist for your integration.

CodeWhen it happensEndpoints
—The request origin is not allowed.
—The API key or origin is not authorized.
—Origin not authorized for the inbound integration network.
—The API key or origin is not authorized to access this resource.
—The API key or origin is not authorized to access this endpoint.
The API key or origin is not authorized.—

404 Not Found

A referenced entity does not exist, or is not visible to your tenant.

CodeWhen it happensEndpoints
—A referenced variant, provider, project, or channel could not be found.
—saleChannel.type is "id" and no sales channel exists with that id.
—No product exists for the given id or sku.
—The component (by id/SKU) or a referenced area (by id/reference) was not found.
—The specified variant or provider does not exist or is not linked to the given location.
—No availability found for the given date or parameters.
A referenced variant, provider, or area could not be found.—
ADDRESS_NOT_FOUNDaddressId does not match an existing address.
BOOKING_NOT_FOUND: {bookingId}No booking exists with that id.
BUDGET_EXECUTION_NOT_FOUNDNo budget execution exists for the given id.
BUDGET_EXECUTION_NOT_FOUND: {budgetExecutionId}No budget exists with that id, or the id belongs to a budget template.
CUSTOMER_NOT_FOUND: {customerId}No customer exists with that id, or the id belongs to a Sodtrack user that is not a customer.
CUSTOMER_NOT_FOUND: {customerId}No customer exists with that id.
Product with id {id} not found / Product with sku '{sku}' not foundNo product matches the identifier.
PRODUCT_UNIT_NOT_FOUND: {identifier}No product unit exists with that id or serial number. The message echoes the identifier sent.

406 Not Acceptable

The request could not be satisfied in the format requested.

CodeWhen it happensEndpoints
PRODUCT_UNIT.SERIAL_NUMBER_ALREADY_IN_USEThe generated serial number collided with an existing one. Rare; retry the request.
PRODUCT.SKU_ALREADY_IN_USEA product with the given sku already exists.

409 Conflict

The request conflicts with the current state of the resource.

CodeWhen it happensEndpoints
ACQUISITION_ALREADY_EXISTSAn acquisition already exists for the given reference.

500 Internal Server Error

An unexpected server error. Safe to retry with backoff; contact support if it persists.

502 Bad Gateway

CodeWhen it happensEndpoints
Error in createProductUnitForCustomer: {message}The product module is unavailable or failed. Safe to retry.
Error in startMaintenancePlan: {message}The product module is unavailable or failed. Safe to retry.

503 Service Unavailable

The service is temporarily unavailable. Retry with backoff.

CodeWhen it happensEndpoints
PRODUCT_MODULE_UNAVAILABLESodtrack's product inventory service could not be reached. Retry later.

Retries

Retry 500 and 503 with exponential backoff. Do not retry 400, 403 or 404 — the request will fail identically until the payload or configuration changes. For 401, request a fresh token and retry once.