Read-only endpoints that expose your company's configuration catalogs and return the real IDs that task creation needs. Before creating a task, your integration queries these catalogs to resolve which origin, product, coverage, service, cause, geography, finalization, form, and dynamic fields it can send.
Every catalog returns the real ID alongside the human-readable name — so you can reference each entry exactly when building a task payload.
All endpoints require a valid JWT token, API key, and tenant header. See Authentication .
Several catalogs are hierarchical: a child catalog is filtered by its parent's ID, passed in the path. For example, to list the products of an origin you call /catalogs/origins/{proid}/products; to list cities you walk country → department → city → zone. Always list a level to discover the IDs you'll feed into the next level — there is no name-based lookup.
IDs are opaque strings (BigInt) — never parse them as numbers. Pass them back exactly as received.
Active records only. Every catalog returns active entries; inactive ones are never listed.
No pagination. Catalogs are small — the full flat list is returned. The name query filter narrows results by a case-insensitive substring match.
Rate limit: all catalog endpoints share a budget of 60 req/min (sliding window).
Response envelope: { success, data, meta } where meta.count is the number of rows.
Geographic
The geographic catalogs form a strict four-level cascade: Country → Department → City → Zone . Each level is filtered by the IDs of the levels above it, all passed in the path.
Countries
GET /apidev/v1/catalogs/countries
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the country name. Omit to list all.
Response Fields
Field Type Description paiidstring Country ID (use in task creation). namestring Country name. gmtnumber Timezone offset (whole hours).
curl -s "https://$TENANT/apidev/v1/catalogs/countries" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT"
const response = await fetch (
` https:// ${ TENANT } /apidev/v1/catalogs/countries ` ,
{ headers }
) ;
const { data } = await response . json ( ) ;
console . log ( data . map ( ( c ) => ` ${ c . paiid } : ${ c . name } ` ) ) ;
response = requests . get (
f"https:// { TENANT } /apidev/v1/catalogs/countries" ,
headers = headers ,
)
for country in response . json ( ) [ "data" ] :
print ( f" { country [ 'paiid' ] } : { country [ 'name' ] } " )
Example Response
{
"success" : true ,
"data" : [
{ "paiid" : "1" , "name" : "Uruguay" , "gmt" : -3 } ,
{ "paiid" : "2" , "name" : "Argentina" , "gmt" : -3 }
] ,
"meta" : { "count" : 2 }
}
Departments of a Country
GET /apidev/v1/catalogs/countries/{paiid}/departments
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Path Parameters
Parameter Type Required Description paiidstring Yes Country ID (parent).
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the department name.
Response Fields
Field Type Description paiidstring Country ID (parent). paideplinstring Department ID (use in task creation). namestring Department name.
curl -s "https://$TENANT/apidev/v1/catalogs/countries/1/departments" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT"
const response = await fetch (
` https:// ${ TENANT } /apidev/v1/catalogs/countries/1/departments ` ,
{ headers }
) ;
const { data } = await response . json ( ) ;
response = requests . get (
f"https:// { TENANT } /apidev/v1/catalogs/countries/1/departments" ,
headers = headers ,
)
data = response . json ( ) [ "data" ]
Example Response
{
"success" : true ,
"data" : [
{ "paiid" : "1" , "paideplin" : "4" , "name" : "Montevideo" } ,
{ "paiid" : "1" , "paideplin" : "5" , "name" : "Canelones" }
] ,
"meta" : { "count" : 2 }
}
Cities of a Department
GET /apidev/v1/catalogs/countries/{paiid}/departments/{paideplin}/cities
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Path Parameters
Parameter Type Required Description paiidstring Yes Country ID. paideplinstring Yes Department ID.
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the city name.
Response Fields
Field Type Description paiidstring Country ID. paideplinstring Department ID. paidepciulinstring City ID (use in task creation). namestring City name.
curl -s "https://$TENANT/apidev/v1/catalogs/countries/1/departments/4/cities?name=mont" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT"
const response = await fetch (
` https:// ${ TENANT } /apidev/v1/catalogs/countries/1/departments/4/cities?name=mont ` ,
{ headers }
) ;
const { data } = await response . json ( ) ;
response = requests . get (
f"https:// { TENANT } /apidev/v1/catalogs/countries/1/departments/4/cities" ,
headers = headers ,
params = { "name" : "mont" } ,
)
data = response . json ( ) [ "data" ]
Example Response
{
"success" : true ,
"data" : [
{ "paiid" : "1" , "paideplin" : "4" , "paidepciulin" : "21" , "name" : "Montevideo" }
] ,
"meta" : { "count" : 1 }
}
Zones of a City
GET /apidev/v1/catalogs/countries/{paiid}/departments/{paideplin}/cities/{paidepciulin}/zones
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Path Parameters
Parameter Type Required Description paiidstring Yes Country ID. paideplinstring Yes Department ID. paidepciulinstring Yes City ID.
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the zone name.
Response Fields
Field Type Description paiidstring Country ID. paideplinstring Department ID. paidepciulinstring City ID. paidepciuzonlinstring Zone ID (use in task creation). namestring Zone name.
Example Response
{
"success" : true ,
"data" : [
{ "paiid" : "1" , "paideplin" : "4" , "paidepciulin" : "21" , "paidepciuzonlin" : "7" , "name" : "Centro" }
] ,
"meta" : { "count" : 1 }
}
Special Places
Points of interest defined for your company. Returns only the places the integration user is allowed to see.
GET /apidev/v1/catalogs/special-places
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the place name.
Response Fields
Field Type Description lugespidstring Special place ID. namestring Place name. latstring | null Latitude (raw decimal string). lngstring | null Longitude (raw decimal string).
Example Response
{
"success" : true ,
"data" : [
{ "lugespid" : "31" , "name" : "Central Warehouse" , "lat" : "-34.8721" , "lng" : "-56.1234" }
] ,
"meta" : { "count" : 1 }
}
Special Place Types
GET /apidev/v1/catalogs/special-place-types
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the type name.
Response Fields
Field Type Description idstring Special place type ID. namestring Type name.
Example Response
{
"success" : true ,
"data" : [
{ "id" : "1" , "name" : "Warehouse" } ,
{ "id" : "2" , "name" : "Branch office" }
] ,
"meta" : { "count" : 2 }
}
Domain
Classification catalogs used to describe a task: where it comes from, what product and coverage apply, the service requested, and its cause/subcause.
Origins
Origins (procedences) — the source that generates a task.
GET /apidev/v1/catalogs/origins
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the origin name.
Response Fields
Field Type Description proidstring Origin ID (use in task creation). namestring Origin name. statestring Always "A" (active).
curl -s "https://$TENANT/apidev/v1/catalogs/origins" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT"
const response = await fetch (
` https:// ${ TENANT } /apidev/v1/catalogs/origins ` ,
{ headers }
) ;
const { data } = await response . json ( ) ;
response = requests . get (
f"https:// { TENANT } /apidev/v1/catalogs/origins" ,
headers = headers ,
)
data = response . json ( ) [ "data" ]
Example Response
{
"success" : true ,
"data" : [
{ "proid" : "12" , "name" : "Seguros ACME" , "state" : "A" }
] ,
"meta" : { "count" : 1 }
}
Products of an Origin
GET /apidev/v1/catalogs/origins/{proid}/products
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Path Parameters
Parameter Type Required Description proidstring Yes Origin ID (parent).
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the product name.
Response Fields
Field Type Description proidstring Origin ID (parent). protipclilinstring Product ID (use in task creation). namestring Product name.
curl -s "https://$TENANT/apidev/v1/catalogs/origins/12/products?name=gru" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT"
const response = await fetch (
` https:// ${ TENANT } /apidev/v1/catalogs/origins/12/products?name=gru ` ,
{ headers }
) ;
const { data } = await response . json ( ) ;
response = requests . get (
f"https:// { TENANT } /apidev/v1/catalogs/origins/12/products" ,
headers = headers ,
params = { "name" : "gru" } ,
)
data = response . json ( ) [ "data" ]
Example Response
{
"success" : true ,
"data" : [
{ "proid" : "12" , "protipclilin" : "3" , "name" : "Light Tow Truck" } ,
{ "proid" : "12" , "protipclilin" : "7" , "name" : "Heavy Tow Truck" }
] ,
"meta" : { "count" : 2 }
}
Coverages of a Product
GET /apidev/v1/catalogs/origins/{proid}/products/{protipclilin}/coverages
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Path Parameters
Parameter Type Required Description proidstring Yes Origin ID. protipclilinstring Yes Product ID.
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the coverage name.
Response Fields
Field Type Description proidstring Origin ID. protipclilinstring Product ID. procoblinstring Coverage ID (use in task creation). namestring Coverage name. monthly_quotanumber Configured monthly quota. yearly_quotanumber Configured yearly quota. quota_controlstring | null Quota control flag/code.
Example Response
{
"success" : true ,
"data" : [
{
"proid" : "12" ,
"protipclilin" : "7" ,
"procoblin" : "5" ,
"name" : "Premium Coverage" ,
"monthly_quota" : 4 ,
"yearly_quota" : 24 ,
"quota_control" : "S"
}
] ,
"meta" : { "count" : 1 }
}
Services
Services (prestaciones) — the type of service requested for a task.
GET /apidev/v1/catalogs/services
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the service name.
Response Fields
Field Type Description prestaidstring Service ID (use in task creation). namestring Service name. requires_destinationboolean Whether a destination cause/subcause is required. statestring Always "A" (active).
Example Response
{
"success" : true ,
"data" : [
{ "prestaid" : "20" , "name" : "Roadside Assistance" , "requires_destination" : false , "state" : "A" }
] ,
"meta" : { "count" : 1 }
}
Causes of a Service
Returns only the causes assigned to the service — not the general cause catalog. This is what task creation expects.
GET /apidev/v1/catalogs/services/{prestaid}/causes
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Path Parameters
Parameter Type Required Description prestaidstring Yes Service ID (parent).
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the cause name.
Response Fields
Field Type Description prestaidstring Service ID (parent). cauidstring Cause ID (use in task creation). namestring Cause name. assigned_subcausesnumber How many subcauses are assigned under this service.
Example Response
{
"success" : true ,
"data" : [
{ "prestaid" : "20" , "cauid" : "8" , "name" : "Flat Tire" , "assigned_subcauses" : 3 }
] ,
"meta" : { "count" : 1 }
}
Listing causes by service guarantees you only get causes that the service actually accepts. A cause that exists in the general catalog but is not assigned to the service would be rejected at task creation.
Subcauses of a Cause
GET /apidev/v1/catalogs/causes/{cauid}/subcauses
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Path Parameters
Parameter Type Required Description cauidstring Yes Cause ID (parent).
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the subcause name.
Response Fields
Field Type Description cauidstring Cause ID (parent). causubcaulinstring Subcause ID (use in task creation). namestring Subcause name. priority_namestring | null Associated priority name (may be null).
Example Response
{
"success" : true ,
"data" : [
{ "cauid" : "8" , "causubcaulin" : "15" , "name" : "Front Left" , "priority_name" : "High" }
] ,
"meta" : { "count" : 1 }
}
Reasons
Service reasons (motivos) — used in the simple task-creation mode.
GET /apidev/v1/catalogs/reasons
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the reason name.
Response Fields
Field Type Description motidstring Reason ID (use in task creation). namestring Reason name.
Example Response
{
"success" : true ,
"data" : [
{ "motid" : "3" , "name" : "Vehicle breakdown" }
] ,
"meta" : { "count" : 1 }
}
Priorities
GET /apidev/v1/catalogs/priorities
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the priority name.
Response Fields
Field Type Description priidstring Priority ID. namestring Priority name. valuenumber Numeric ordering value (typically 1–3).
Example Response
{
"success" : true ,
"data" : [
{ "priid" : "1" , "name" : "High" , "value" : 1 } ,
{ "priid" : "2" , "name" : "Medium" , "value" : 2 }
] ,
"meta" : { "count" : 2 }
}
Task Statuses
GET /apidev/v1/catalogs/task-statuses
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the status name.
Response Fields
Field Type Description idstring Status ID. codestring Status code (SA, ASI, ACE, INI, USU, FIN, CAN). namestring Human-readable status label.
Example Response
{
"success" : true ,
"data" : [
{ "id" : "1" , "code" : "SA" , "name" : "Unassigned" } ,
{ "id" : "6" , "code" : "FIN" , "name" : "Finished" }
] ,
"meta" : { "count" : 2 }
}
Shifts
GET /apidev/v1/catalogs/shifts
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the shift name.
Response Fields
Field Type Description turidstring Shift ID (use in task reserve). namestring Shift name.
Example Response
{
"success" : true ,
"data" : [
{ "turid" : "1" , "name" : "Morning" } ,
{ "turid" : "2" , "name" : "Night" }
] ,
"meta" : { "count" : 2 }
}
Resources
Operational catalogs: end reasons, forms, form lists, vehicle types, and the two flota-sensitive catalogs (providers and devices) that require a dedicated permission.
End Reasons
GET /apidev/v1/catalogs/end-reasons
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the end reason name.
Response Fields
Field Type Description finseridstring End reason ID. namestring End reason name. successfulboolean Whether it marks the task as successful. pendingboolean Whether it leaves the task pending.
Example Response
{
"success" : true ,
"data" : [
{ "finserid" : "3" , "name" : "Resolved on site" , "successful" : true , "pending" : false }
] ,
"meta" : { "count" : 1 }
}
End Reasons by Products
Resolve the end reasons for several products in a single call. The request body is a filter (it is read-only and cacheable, not a mutation), which is why this endpoint uses POST.
POST /apidev/v1/catalogs/products/end-reasons
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Request Body
Field Type Required Description productsarray Yes 1 to 50 product pairs. products[].proidstring Yes Origin ID. products[].protipclilinstring Yes Product ID.
Response Fields
data is an array grouped by product. If a product has no configured end reasons, it falls back to all active ones.
Field Type Description proidstring Origin ID of the requested product. protipclilinstring Product ID of the requested product. end_reasons[].finseridstring End reason ID. end_reasons[].namestring End reason name.
curl -s -X POST "https://$TENANT/apidev/v1/catalogs/products/end-reasons" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
-H "Content-Type: application/json" \
-d '{ "products": [ { "proid": "12", "protipclilin": "7" } ] }'
const response = await fetch (
` https:// ${ TENANT } /apidev/v1/catalogs/products/end-reasons ` ,
{
method : "POST" ,
headers : { ... headers , "Content-Type" : "application/json" } ,
body : JSON . stringify ( { products : [ { proid : "12" , protipclilin : "7" } ] } ) ,
}
) ;
const { data } = await response . json ( ) ;
response = requests . post (
f"https:// { TENANT } /apidev/v1/catalogs/products/end-reasons" ,
headers = { ** headers , "Content-Type" : "application/json" } ,
json = { "products" : [ { "proid" : "12" , "protipclilin" : "7" } ] } ,
)
data = response . json ( ) [ "data" ]
Example Response
{
"success" : true ,
"data" : [
{
"proid" : "12" ,
"protipclilin" : "7" ,
"end_reasons" : [
{ "finserid" : "3" , "name" : "Resolved on site" } ,
{ "finserid" : "8" , "name" : "Towed to workshop" }
]
}
] ,
"meta" : { "count" : 1 }
}
GET /apidev/v1/catalogs/forms
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the form name.
Response Fields
Field Type Description formidstring Form ID. namestring Form name.
Example Response
{
"success" : true ,
"data" : [
{ "formid" : "9" , "name" : "Damage Report" }
] ,
"meta" : { "count" : 1 }
}
Forms enabled for a specific product.
GET /apidev/v1/catalogs/products/{proid}/{protipclilin}/forms
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Path Parameters
Parameter Type Required Description proidstring Yes Origin ID. protipclilinstring Yes Product ID.
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the form name.
Response Fields
Field Type Description formidstring Form ID. namestring Form name. requiredboolean Whether the form is mandatory for the product.
Example Response
{
"success" : true ,
"data" : [
{ "formid" : "9" , "name" : "Damage Report" , "required" : true }
] ,
"meta" : { "count" : 1 }
}
Form/OAV option lists. Each list is referenced by the list_id of a dynamic field.
GET /apidev/v1/catalogs/form-lists
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the list name.
Response Fields
Field Type Description forlisidstring List ID (referenced by oav-fields.list_id). namestring List name.
Example Response
{
"success" : true ,
"data" : [
{ "forlisid" : "5" , "name" : "Vehicle Colors" }
] ,
"meta" : { "count" : 1 }
}
Vehicle Types
GET /apidev/v1/catalogs/vehicle-types
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the vehicle type name.
Response Fields
Field Type Description tipvehidstring Vehicle type ID (use in task creation). namestring Vehicle type name.
Example Response
{
"success" : true ,
"data" : [
{ "tipvehid" : "1" , "name" : "Car" } ,
{ "tipvehid" : "2" , "name" : "Motorcycle" }
] ,
"meta" : { "count" : 2 }
}
Providers
Providers expose person/fleet links to the company. This endpoint requires the dedicated APICLI_FLEET_DEVICES_READ permission, not APICLI_CATALOGS_READ.
GET /apidev/v1/catalogs/providers
Permission APICLI_FLEET_DEVICES_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the provider name.
Response Fields
Field Type Description preidstring Provider ID (use in task reserve). namestring Provider name.
Example Response
{
"success" : true ,
"data" : [
{ "preid" : "30" , "name" : "North Region Towing" }
] ,
"meta" : { "count" : 1 }
}
Devices
Devices expose fleet links to the company. This endpoint requires APICLI_FLEET_DEVICES_READ. Returns only the devices the integration user is allowed to see.
GET /apidev/v1/catalogs/devices
Permission APICLI_FLEET_DEVICES_READ
Rate Limit 60 req/min (sliding window)
Query Parameters
Parameter Type Required Description namestring No Partial, case-insensitive match on the device name.
Response Fields
Field Type Description vehidstring Device ID (use in task reserve). namestring Device name. platestring | null License plate / alias. vehicle_typestring | null Vehicle type name. providerstring | null Provider name.
Example Response
{
"success" : true ,
"data" : [
{
"vehid" : "104820579301" ,
"name" : "Movil 10" ,
"plate" : "ABC123" ,
"vehicle_type" : "Tow Truck" ,
"provider" : "North Region Towing"
}
] ,
"meta" : { "count" : 1 }
}
OAV
OAV (dynamic fields) define the custom fields a product requires. This is the key catalog for building a task payload: cross it against your dynamic_fields to avoid OAV_REQUIRED_MISSING, OAV_TYPE_MISMATCH, and OAV_LIST_VALUE_INVALID errors at task creation.
Dynamic Fields of a Product
Returns each dynamic field of the product with its type, whether it's required, and — when the field is a list — its valid options resolved in the same response.
GET /apidev/v1/catalogs/products/{proid}/{protipclilin}/oav-fields
Permission APICLI_CATALOGS_READ
Rate Limit 60 req/min (sliding window)
Path Parameters
Parameter Type Required Description proidstring Yes Origin ID. protipclilinstring Yes Product ID.
Response Fields
Field Type Description item_idstring Dynamic field ID. labelstring Human-readable field name. typestring TEXT, NUMBER, BOOLEAN, DATE, DATETIME, or LISTA.requiredboolean Whether the field is mandatory to create the task. readonlyboolean Informational read-only flag. ordernumber Display order. list_idstring | null When type is LISTA, the option list ID. list_optionsarray Valid options when type is LISTA; empty otherwise. Each: { value, label }.
curl -s "https://$TENANT/apidev/v1/catalogs/products/12/7/oav-fields" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT"
const response = await fetch (
` https:// ${ TENANT } /apidev/v1/catalogs/products/12/7/oav-fields ` ,
{ headers }
) ;
const { data } = await response . json ( ) ;
const required = data . filter ( ( f ) => f . required ) ;
console . log ( ` Required fields: ${ required . map ( ( f ) => f . label ) . join ( ", " ) } ` ) ;
response = requests . get (
f"https:// { TENANT } /apidev/v1/catalogs/products/12/7/oav-fields" ,
headers = headers ,
)
fields = response . json ( ) [ "data" ]
required = [ f [ "label" ] for f in fields if f [ "required" ] ]
print ( f"Required fields: { ', ' . join ( required ) } " )
Example Response
{
"success" : true ,
"data" : [
{
"item_id" : "42" ,
"label" : "Policy" ,
"type" : "TEXT" ,
"required" : true ,
"readonly" : false ,
"order" : 1 ,
"list_id" : null ,
"list_options" : [ ]
} ,
{
"item_id" : "55" ,
"label" : "Damage Type" ,
"type" : "LISTA" ,
"required" : true ,
"readonly" : false ,
"order" : 2 ,
"list_id" : "9" ,
"list_options" : [
{ "value" : "MEC" , "label" : "Mechanical" } ,
{ "value" : "ELE" , "label" : "Electrical" }
]
}
] ,
"meta" : { "count" : 2 }
}
List options come resolved
When a field's type is LISTA, its valid options are already nested under list_options. You don't need to call Form Lists separately to validate a dynamic field — use list_options[].value as the accepted value.
Errors
All catalog endpoints use the modern error envelope: { success: false, error: { code, message, hint } }. See Error Handling for the full reference.
Code HTTP Description INVALID_ID400 A path ID is not a valid identifier. INVALID_BODY400 products[] is empty, missing, or exceeds 50 (on End Reasons by Products ).UNAUTHORIZED401 Missing, invalid, or expired tenant / Authorization / X-API-Key. FORBIDDEN403 Token lacks APICLI_CATALOGS_READ (or APICLI_FLEET_DEVICES_READ on providers/devices). NOT_FOUND404 A cascade parent does not exist in your company. RATE_LIMITED429 Exceeded 60 req/min. INTERNAL_ERROR500 Unexpected server error.