MENU navbar-image

Introduction

API de gestiΓ³n de usuarios, roles y permisos del sistema.

This documentation aims to provide all the information you need to work with our API.

<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve your token by visiting your dashboard and clicking Generate API token.

Access Control Management

GET api/v1/roles

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/roles" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"search\": \"b\",
    \"is_active_only\": false,
    \"sort_by\": \"description\",
    \"sort_order\": \"asc\",
    \"page\": 22,
    \"per_page\": 7
}"
const url = new URL(
    "http://localhost/api/v1/roles"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "search": "b",
    "is_active_only": false,
    "sort_by": "description",
    "sort_order": "asc",
    "page": 22,
    "per_page": 7
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/roles

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

search   string  optional    

Must not be greater than 255 characters. Example: b

is_active_only   boolean  optional    

Example: false

sort_by   string  optional    

Example: description

Must be one of:
  • name
  • description
sort_order   string  optional    

Example: asc

Must be one of:
  • asc
  • desc
page   integer  optional    

Must be at least 1. Example: 22

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 7

GET api/v1/roles/permissions

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/roles/permissions" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/roles/permissions"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/roles/permissions

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/v1/roles/{id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/roles/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/roles/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/roles/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the role. Example: architecto

GET api/v1/roles/{role}/users

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/roles/architecto/users" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"first\": 27,
    \"max\": 22
}"
const url = new URL(
    "http://localhost/api/v1/roles/architecto/users"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "first": 27,
    "max": 22
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/roles/{role}/users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

role   string     

The role. Example: architecto

Body Parameters

first   integer  optional    

Must be at least 0. Example: 27

max   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 22

GET api/v1/roles/{role}/permissions

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/roles/architecto/permissions" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/roles/architecto/permissions"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/roles/{role}/permissions

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

role   string     

The role. Example: architecto

POST api/v1/roles

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/roles" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Et animi quos velit et fugiat.\",
    \"permissions\": [
        \"architecto\"
    ]
}"
const url = new URL(
    "http://localhost/api/v1/roles"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Et animi quos velit et fugiat.",
    "permissions": [
        "architecto"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/roles

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Must not be greater than 500 characters. Example: Et animi quos velit et fugiat.

permissions   string[]  optional    

PATCH api/v1/roles/{id}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/roles/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Et animi quos velit et fugiat.\",
    \"is_active\": true
}"
const url = new URL(
    "http://localhost/api/v1/roles/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Et animi quos velit et fugiat.",
    "is_active": true
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/v1/roles/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the role. Example: architecto

Body Parameters

name   string  optional    

Must not be greater than 255 characters. Example: b

description   string  optional    

Must not be greater than 500 characters. Example: Et animi quos velit et fugiat.

is_active   boolean  optional    

Example: true

PUT api/v1/roles/{role}/permissions

requires authentication

Example request:
curl --request PUT \
    "http://localhost/api/v1/roles/architecto/permissions" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/roles/architecto/permissions"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "PUT",
    headers,
}).then(response => response.json());

Request      

PUT api/v1/roles/{role}/permissions

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

role   string     

The role. Example: architecto

PUT api/v1/roles/users/{user}/role

requires authentication

Example request:
curl --request PUT \
    "http://localhost/api/v1/roles/users/architecto/role" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"role_name\": \"architecto\"
}"
const url = new URL(
    "http://localhost/api/v1/roles/users/architecto/role"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "role_name": "architecto"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/roles/users/{user}/role

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user   string     

The user. Example: architecto

Body Parameters

role_name   string     

Example: architecto

POST api/v1/roles/assign

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/roles/assign" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"user_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",
    \"role_name\": \"architecto\"
}"
const url = new URL(
    "http://localhost/api/v1/roles/assign"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "user_id": "6ff8f7f6-1eb3-3525-be4a-3932c805afed",
    "role_name": "architecto"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/roles/assign

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

user_id   string     

Must be a valid UUID. Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

role_name   string     

Example: architecto

POST api/v1/roles/unassign

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/roles/unassign" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"user_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",
    \"role_name\": \"architecto\"
}"
const url = new URL(
    "http://localhost/api/v1/roles/unassign"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "user_id": "6ff8f7f6-1eb3-3525-be4a-3932c805afed",
    "role_name": "architecto"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/roles/unassign

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

user_id   string     

Must be a valid UUID. Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

role_name   string     

Example: architecto

Assignment Engine

Get assignment engine configuration

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspections/assignment-engine" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspections/assignment-engine"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/inspections/assignment-engine

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Update assignment engine configuration

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/inspections/assignment-engine" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"is_active\": true,
    \"weight_distance\": 1,
    \"weight_workload\": 1,
    \"weight_hours\": 0
}"
const url = new URL(
    "http://localhost/api/v1/inspections/assignment-engine"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "is_active": true,
    "weight_distance": 1,
    "weight_workload": 1,
    "weight_hours": 0
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/v1/inspections/assignment-engine

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

is_active   boolean  optional    

Example: true

weight_distance   number  optional    

Must be between 0 and 1. Example: 1

weight_workload   number  optional    

Must be between 0 and 1. Example: 1

weight_hours   number  optional    

Must be between 0 and 1. Example: 0

Calendar Management

POST api/v1/calendar-events/import

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/calendar-events/import" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "file=@/tmp/php0oo8an2jfehfchajFlA" 
const url = new URL(
    "http://localhost/api/v1/calendar-events/import"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('file', document.querySelector('input[name="file"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());

Request      

POST api/v1/calendar-events/import

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

Body Parameters

file   file     

Must be a file. Must not be greater than 2048 kilobytes. Example: /tmp/php0oo8an2jfehfchajFlA

POST api/v1/calendar-events

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/calendar-events" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"start_date\": \"2026-02-20T19:44:17\",
    \"end_date\": \"2052-03-15\",
    \"name\": \"n\",
    \"description\": \"Eius et animi quos velit et.\",
    \"is_blocking\": false,
    \"frequency\": {
        \"interval\": 16,
        \"unit\": \"architecto\",
        \"day_of_week\": \"architecto\",
        \"repeat_mode\": \"architecto\",
        \"day_of_month\": 22,
        \"week\": \"architecto\",
        \"month\": \"architecto\",
        \"days_of_month\": [
            22
        ]
    }
}"
const url = new URL(
    "http://localhost/api/v1/calendar-events"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "start_date": "2026-02-20T19:44:17",
    "end_date": "2052-03-15",
    "name": "n",
    "description": "Eius et animi quos velit et.",
    "is_blocking": false,
    "frequency": {
        "interval": 16,
        "unit": "architecto",
        "day_of_week": "architecto",
        "repeat_mode": "architecto",
        "day_of_month": 22,
        "week": "architecto",
        "month": "architecto",
        "days_of_month": [
            22
        ]
    }
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/calendar-events

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

start_date   string     

Must be a valid date. Example: 2026-02-20T19:44:17

end_date   string  optional    

Must be a valid date. Must be a date after or equal to start_date. Example: 2052-03-15

name   string     

Must not be greater than 255 characters. Example: n

description   string  optional    

Example: Eius et animi quos velit et.

is_blocking   boolean  optional    

Example: false

frequency   object  optional    
interval   integer  optional    

This field is required when frequency is present. Must be at least 1. Example: 16

unit   string  optional    

This field is required when frequency is present. Example: architecto

Must be one of:
  • days
  • weeks
  • months
  • years
day_of_week   string  optional    

Example: architecto

Must be one of:
  • monday
  • tuesday
  • wednesday
  • thursday
  • friday
  • saturday
  • sunday
repeat_mode   string  optional    

Example: architecto

Must be one of:
  • date
  • day
day_of_month   integer  optional    

Must be at least 1. Must not be greater than 31. Example: 22

week   string  optional    

Example: architecto

Must be one of:
  • first
  • second
  • third
  • fourth
  • fifth
  • penultimate
  • last
month   string  optional    

Example: architecto

days_of_month   integer[]  optional    

Must be at least 1. Must not be greater than 31.

GET api/v1/calendar-events

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/calendar-events" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"search\": \"b\",
    \"start_date\": \"2026-02-20T19:44:17\",
    \"end_date\": \"2052-03-15\"
}"
const url = new URL(
    "http://localhost/api/v1/calendar-events"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "search": "b",
    "start_date": "2026-02-20T19:44:17",
    "end_date": "2052-03-15"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/calendar-events

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

search   string  optional    

Must not be greater than 100 characters. Example: b

start_date   string  optional    

This field is required when end_date is present. Must be a valid date. Example: 2026-02-20T19:44:17

end_date   string  optional    

This field is required when start_date is present. Must be a valid date. Must be a date after or equal to start_date. Example: 2052-03-15

GET api/v1/calendar-events/{calendarEvent_id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/calendar-events/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/calendar-events/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/calendar-events/{calendarEvent_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

calendarEvent_id   string     

The ID of the calendarEvent. Example: architecto

PATCH api/v1/calendar-events/{calendarEvent_id}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/calendar-events/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Eius et animi quos velit et.\",
    \"start_date\": \"2026-02-20T19:44:17\",
    \"end_date\": \"2052-03-15\",
    \"is_blocking\": false,
    \"frequency\": {
        \"interval\": 22,
        \"unit\": \"architecto\",
        \"day_of_week\": \"architecto\",
        \"repeat_mode\": \"architecto\",
        \"day_of_month\": 22,
        \"week\": \"architecto\",
        \"month\": \"architecto\",
        \"days_of_month\": [
            22
        ]
    }
}"
const url = new URL(
    "http://localhost/api/v1/calendar-events/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Eius et animi quos velit et.",
    "start_date": "2026-02-20T19:44:17",
    "end_date": "2052-03-15",
    "is_blocking": false,
    "frequency": {
        "interval": 22,
        "unit": "architecto",
        "day_of_week": "architecto",
        "repeat_mode": "architecto",
        "day_of_month": 22,
        "week": "architecto",
        "month": "architecto",
        "days_of_month": [
            22
        ]
    }
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/v1/calendar-events/{calendarEvent_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

calendarEvent_id   string     

The ID of the calendarEvent. Example: architecto

Body Parameters

name   string  optional    

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

start_date   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

end_date   string  optional    

Must be a valid date. Must be a date after or equal to start_date. Example: 2052-03-15

is_blocking   boolean  optional    

Example: false

frequency   object  optional    
interval   integer  optional    

This field is required when frequency is present. Must be at least 1. Example: 22

unit   string  optional    

This field is required when frequency is present. Example: architecto

Must be one of:
  • days
  • weeks
  • months
  • years
day_of_week   string  optional    

Example: architecto

Must be one of:
  • monday
  • tuesday
  • wednesday
  • thursday
  • friday
  • saturday
  • sunday
repeat_mode   string  optional    

Example: architecto

Must be one of:
  • date
  • day
day_of_month   integer  optional    

Must be at least 1. Must not be greater than 31. Example: 22

week   string  optional    

Example: architecto

Must be one of:
  • first
  • second
  • third
  • fourth
  • fifth
  • penultimate
  • last
month   string  optional    

Example: architecto

days_of_month   integer[]  optional    

Must be at least 1. Must not be greater than 31.

DELETE api/v1/calendar-events/{calendarEvent_id}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost/api/v1/calendar-events/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/calendar-events/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/calendar-events/{calendarEvent_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

calendarEvent_id   string     

The ID of the calendarEvent. Example: architecto

Get business days configuration

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/business-days" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/business-days"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/business-days

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Update business days configuration

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/business-days" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"monday\": false,
    \"tuesday\": true,
    \"wednesday\": true,
    \"thursday\": true,
    \"friday\": false,
    \"saturday\": false,
    \"sunday\": false
}"
const url = new URL(
    "http://localhost/api/v1/business-days"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "monday": false,
    "tuesday": true,
    "wednesday": true,
    "thursday": true,
    "friday": false,
    "saturday": false,
    "sunday": false
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/v1/business-days

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

monday   boolean  optional    

Example: false

tuesday   boolean  optional    

Example: true

wednesday   boolean  optional    

Example: true

thursday   boolean  optional    

Example: true

friday   boolean  optional    

Example: false

saturday   boolean  optional    

Example: false

sunday   boolean  optional    

Example: false

Endpoints

GET api/v1/health

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/health" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/health"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "success": true,
    "message": "API is healthy",
    "timestamp": "2026-02-20T19:44:16+00:00"
}
 

Request      

GET api/v1/health

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Group Management

GET api/v1/groups

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/groups" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"search\": \"bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnnoqitpxn\",
    \"per_page\": 23,
    \"page\": 80,
    \"sort_by\": \"created_at\",
    \"sort_order\": \"asc\"
}"
const url = new URL(
    "http://localhost/api/v1/groups"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "search": "bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnnoqitpxn",
    "per_page": 23,
    "page": 80,
    "sort_by": "created_at",
    "sort_order": "asc"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/groups

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

search   string  optional    

Must be at least 3 characters. Example: bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnnoqitpxn

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 23

page   integer  optional    

Must be at least 1. Example: 80

sort_by   string  optional    

Example: created_at

Must be one of:
  • name
  • created_at
sort_order   string  optional    

Example: asc

Must be one of:
  • asc
  • desc

GET api/v1/groups/{id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/groups/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/groups/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "success": false,
    "message": "Not found",
    "errors": null
}
 

Request      

GET api/v1/groups/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the group. Example: architecto

POST api/v1/groups

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/groups" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Et animi quos velit et fugiat.\",
    \"user_ids\": [
        \"5707ca55-f609-3528-be8b-1baeaee1567e\"
    ]
}"
const url = new URL(
    "http://localhost/api/v1/groups"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Et animi quos velit et fugiat.",
    "user_ids": [
        "5707ca55-f609-3528-be8b-1baeaee1567e"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/groups

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Must not be greater than 1000 characters. Example: Et animi quos velit et fugiat.

user_ids   string[]  optional    

Must be a valid UUID. The oauth_client_id of an existing record in the users table.

PUT api/v1/groups/{id}

requires authentication

Example request:
curl --request PUT \
    "http://localhost/api/v1/groups/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Et animi quos velit et fugiat.\",
    \"status\": \"active\"
}"
const url = new URL(
    "http://localhost/api/v1/groups/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Et animi quos velit et fugiat.",
    "status": "active"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/groups/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the group. Example: architecto

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Must not be greater than 1000 characters. Example: Et animi quos velit et fugiat.

status   string     

Example: active

Must be one of:
  • active
  • inactive

DELETE api/v1/groups/{id}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost/api/v1/groups/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/groups/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/groups/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the group. Example: architecto

Inspection

POST api/v1/inspections/{inspection_id}/start

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspections/architecto/start" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"latitude\": -89,
    \"longitude\": -179
}"
const url = new URL(
    "http://localhost/api/v1/inspections/architecto/start"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "latitude": -89,
    "longitude": -179
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/inspections/{inspection_id}/start

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inspection_id   string     

The ID of the inspection. Example: architecto

Body Parameters

latitude   number     

Must be between -90 and 90. Example: -89

longitude   number     

Must be between -180 and 180. Example: -179

POST api/v1/inspections/{inspection_id}/finalize

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspections/architecto/finalize" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "finalize_location[latitude]=-89"\
    --form "finalize_location[longitude]=-179"\
    --form "start_location[latitude]=-90"\
    --form "start_location[longitude]=-179"\
    --form "answers[][template_id]=6ff8f7f6-1eb3-3525-be4a-3932c805afed"\
    --form "answers[][answers][][item_id]=6ff8f7f6-1eb3-3525-be4a-3932c805afed"\
    --form "answers[][answers][][answer_value]=architecto"\
    --form "answers[][answers][][comment]=n"\
    --form "answers[][answers][][latitude]=-90"\
    --form "answers[][answers][][longitude]=-179"\
    --form "answers[][answers][][answered_at]=2026-02-20T19:44:17"\
    --form "signatures[][signer_type]=inspector"\
    --form "signatures[][signer_name]=m"\
    --form "signatures[][signer_document]=iyvdljnikhwaykcm"\
    --form "signatures[][signer_role]=y"\
    --form "signatures[][latitude]=-90"\
    --form "signatures[][longitude]=-180"\
    --form "findings[][title]=p"\
    --form "findings[][description]=Qui commodi incidunt iure odit."\
    --form "findings[][severity]=moderate"\
    --form "findings[][category]=s"\
    --form "findings[][status]=i"\
    --form "findings[][inspection_template_item_id]=665a39c0-48af-31f1-a546-aa4f41372488"\
    --form "findings[][section_title]=p"\
    --form "findings[][latitude]=-90"\
    --form "findings[][longitude]=-180"\
    --form "findings[][recommendations][]=q"\
    --form "answers[][answers][][evidence_files][]=@/tmp/php1e8060pr559q1iDmmeL" \
    --form "signatures[][signature_image]=@/tmp/php6469faustpkg1MCGFfL" \
    --form "signatures[][dui_image]=@/tmp/php4rim0n0iak6mbcgpIfL" \
    --form "findings[][evidence_files][]=@/tmp/phpjmesmhab8pvfaAlfOfL" 
const url = new URL(
    "http://localhost/api/v1/inspections/architecto/finalize"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('finalize_location[latitude]', '-89');
body.append('finalize_location[longitude]', '-179');
body.append('start_location[latitude]', '-90');
body.append('start_location[longitude]', '-179');
body.append('answers[][template_id]', '6ff8f7f6-1eb3-3525-be4a-3932c805afed');
body.append('answers[][answers][][item_id]', '6ff8f7f6-1eb3-3525-be4a-3932c805afed');
body.append('answers[][answers][][answer_value]', 'architecto');
body.append('answers[][answers][][comment]', 'n');
body.append('answers[][answers][][latitude]', '-90');
body.append('answers[][answers][][longitude]', '-179');
body.append('answers[][answers][][answered_at]', '2026-02-20T19:44:17');
body.append('signatures[][signer_type]', 'inspector');
body.append('signatures[][signer_name]', 'm');
body.append('signatures[][signer_document]', 'iyvdljnikhwaykcm');
body.append('signatures[][signer_role]', 'y');
body.append('signatures[][latitude]', '-90');
body.append('signatures[][longitude]', '-180');
body.append('findings[][title]', 'p');
body.append('findings[][description]', 'Qui commodi incidunt iure odit.');
body.append('findings[][severity]', 'moderate');
body.append('findings[][category]', 's');
body.append('findings[][status]', 'i');
body.append('findings[][inspection_template_item_id]', '665a39c0-48af-31f1-a546-aa4f41372488');
body.append('findings[][section_title]', 'p');
body.append('findings[][latitude]', '-90');
body.append('findings[][longitude]', '-180');
body.append('findings[][recommendations][]', 'q');
body.append('answers[][answers][][evidence_files][]', document.querySelector('input[name="answers[][answers][][evidence_files][]"]').files[0]);
body.append('signatures[][signature_image]', document.querySelector('input[name="signatures[][signature_image]"]').files[0]);
body.append('signatures[][dui_image]', document.querySelector('input[name="signatures[][dui_image]"]').files[0]);
body.append('findings[][evidence_files][]', document.querySelector('input[name="findings[][evidence_files][]"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());

Request      

POST api/v1/inspections/{inspection_id}/finalize

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

inspection_id   string     

The ID of the inspection. Example: architecto

Body Parameters

finalize_location   object     
latitude   number     

Must be between -90 and 90. Example: -89

longitude   number     

Must be between -180 and 180. Example: -179

start_location   object  optional    
latitude   number  optional    

This field is required when start_location is present. Must be between -90 and 90. Example: -90

longitude   number  optional    

This field is required when start_location is present. Must be between -180 and 180. Example: -179

answers   object[]     

Must have at least 1 items.

template_id   string     

Must be a valid UUID. The id of an existing record in the inspection_templates table. Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

answers   object[]     

Must have at least 1 items.

item_id   string     

Must be a valid UUID. The id of an existing record in the inspection_template_items table. Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

answer_value   string     

Example: architecto

comment   string  optional    

Must not be greater than 1000 characters. Example: n

latitude   number  optional    

Must be between -90 and 90. Example: -90

longitude   number  optional    

Must be between -180 and 180. Example: -179

evidence_files   file[]  optional    

Must be a file. Must not be greater than 10240 kilobytes.

answered_at   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

signatures   object[]     

Must have at least 1 items.

signer_type   string     

Example: inspector

Must be one of:
  • regulated
  • inspector
signer_name   string     

Must not be greater than 255 characters. Example: m

signer_document   string  optional    

Must not be greater than 20 characters. Example: iyvdljnikhwaykcm

signer_role   string  optional    

Must not be greater than 100 characters. Example: y

signature_image   file     

Must be a file. Must not be greater than 5120 kilobytes. Example: /tmp/php6469faustpkg1MCGFfL

dui_image   file  optional    

Must be a file. Must not be greater than 5120 kilobytes. Example: /tmp/php4rim0n0iak6mbcgpIfL

latitude   number     

Must be between -90 and 90. Example: -90

longitude   number     

Must be between -180 and 180. Example: -180

authorized_signers   object  optional    
findings   object[]  optional    
title   string     

Must not be greater than 255 characters. Example: p

description   string  optional    

Must not be greater than 1000 characters. Example: Qui commodi incidunt iure odit.

severity   string     

Example: moderate

Must be one of:
  • critical
  • moderate
  • minor
category   string  optional    

Must not be greater than 100 characters. Example: s

status   string  optional    

Must not be greater than 50 characters. Example: i

inspection_template_item_id   string  optional    

Must be a valid UUID. The id of an existing record in the inspection_template_items table. Example: 665a39c0-48af-31f1-a546-aa4f41372488

section_title   string  optional    

Must not be greater than 255 characters. Example: p

latitude   number  optional    

Must be between -90 and 90. Example: -90

longitude   number  optional    

Must be between -180 and 180. Example: -180

recommendations   string[]  optional    

Must not be greater than 500 characters.

evidence_files   file[]  optional    

Must be a file. Must not be greater than 10240 kilobytes.

Inspection Change Reason Management

GET api/v1/inspection-change-reasons

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspection-change-reasons" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"page\": 16,
    \"per_page\": 22,
    \"search\": \"g\",
    \"active_only\": false,
    \"sort_by\": \"created_at\",
    \"sort_order\": \"desc\"
}"
const url = new URL(
    "http://localhost/api/v1/inspection-change-reasons"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "page": 16,
    "per_page": 22,
    "search": "g",
    "active_only": false,
    "sort_by": "created_at",
    "sort_order": "desc"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/inspection-change-reasons

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

page   integer  optional    

Must be at least 1. Example: 16

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 22

search   string  optional    

Must not be greater than 100 characters. Example: g

active_only   boolean  optional    

Example: false

sort_by   string  optional    

Example: created_at

Must be one of:
  • name
  • created_at
sort_order   string  optional    

Example: desc

Must be one of:
  • asc
  • desc

GET api/v1/inspection-change-reasons/{reason_id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspection-change-reasons/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-change-reasons/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/inspection-change-reasons/{reason_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

reason_id   string     

The ID of the reason. Example: architecto

POST api/v1/inspection-change-reasons

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspection-change-reasons" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\"
}"
const url = new URL(
    "http://localhost/api/v1/inspection-change-reasons"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/inspection-change-reasons

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

PATCH api/v1/inspection-change-reasons/{reason_id}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/inspection-change-reasons/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"is_active\": true
}"
const url = new URL(
    "http://localhost/api/v1/inspection-change-reasons/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "is_active": true
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/v1/inspection-change-reasons/{reason_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

reason_id   string     

The ID of the reason. Example: architecto

Body Parameters

name   string  optional    

Must not be greater than 255 characters. Example: b

is_active   boolean  optional    

Example: true

DELETE api/v1/inspection-change-reasons/{reason_id}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost/api/v1/inspection-change-reasons/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-change-reasons/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/inspection-change-reasons/{reason_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

reason_id   string     

The ID of the reason. Example: architecto

Inspection Management

GET api/v1/inspections

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspections" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"search\": \"bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnnoqitpxn\",
    \"status\": \"architecto\",
    \"statuses\": [
        \"architecto\"
    ],
    \"zones\": [
        \"architecto\"
    ],
    \"inspection_type_ids\": [
        \"a4855dc5-0acb-33c3-b921-f4291f719ca0\"
    ],
    \"from_date\": \"2026-02-20T19:44:17\",
    \"to_date\": \"2052-03-15\",
    \"inspector_id\": 16,
    \"per_page\": 22,
    \"page\": 67,
    \"sort_by\": \"establishment_name\",
    \"sort_order\": \"asc\"
}"
const url = new URL(
    "http://localhost/api/v1/inspections"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "search": "bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnnoqitpxn",
    "status": "architecto",
    "statuses": [
        "architecto"
    ],
    "zones": [
        "architecto"
    ],
    "inspection_type_ids": [
        "a4855dc5-0acb-33c3-b921-f4291f719ca0"
    ],
    "from_date": "2026-02-20T19:44:17",
    "to_date": "2052-03-15",
    "inspector_id": 16,
    "per_page": 22,
    "page": 67,
    "sort_by": "establishment_name",
    "sort_order": "asc"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/inspections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

search   string  optional    

Must be at least 3 characters. Example: bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnnoqitpxn

status   string  optional    

Example: architecto

Must be one of:
  • pending
  • pending_manual_assignment
  • scheduled
  • in_progress
  • completed
  • cancelled
statuses   string[]     
Must be one of:
  • pending
  • pending_manual_assignment
  • scheduled
  • in_progress
  • completed
  • cancelled
zones   string[]     
Must be one of:
  • centro
  • norte
  • sur
  • este
  • oeste
inspection_type_ids   string[]     

Must be a valid UUID. The id of an existing record in the inspection_types table.

from_date   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

to_date   string  optional    

Must be a valid date. Must be a date after or equal to from_date. Example: 2052-03-15

inspector_id   integer  optional    

The id of an existing record in the users table. Example: 16

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 22

page   integer  optional    

Must be at least 1. Example: 67

sort_by   string  optional    

Example: establishment_name

Must be one of:
  • establishment_name
sort_order   string  optional    

Example: asc

Must be one of:
  • asc
  • desc

POST api/v1/inspections

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspections" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"procedure_id\": \"b\",
    \"inspection_type_ids\": [
        \"a4855dc5-0acb-33c3-b921-f4291f719ca0\"
    ],
    \"inspection_template_ids\": [
        \"c90237e9-ced5-3af6-88ea-84aeaa148878\"
    ],
    \"establishment_name\": \"i\",
    \"establishment_phone\": \"yvdljnikhwaykcmy\",
    \"associated_checklist_id\": \"u\",
    \"associated_checklist_name\": \"w\",
    \"checklist_questions_count\": 67,
    \"previous_score\": 0,
    \"estimated_duration_minutes\": 32,
    \"required_inspectors_count\": 10,
    \"procedure_submission_status\": \"q\",
    \"status\": \"architecto\",
    \"zone\": \"architecto\",
    \"occurrences\": 22,
    \"location\": {
        \"latitude\": -90,
        \"longitude\": -179,
        \"address\": \"m\"
    },
    \"instructions\": \"architecto\",
    \"procedure_data\": {
        \"request_id\": \"a4855dc5-0acb-33c3-b921-f4291f719ca0\",
        \"procedure_number\": \"z\",
        \"procedure_status\": \"m\",
        \"regulated_entity\": \"i\",
        \"responsible_person\": \"y\",
        \"responsible_phone\": \"vdljnikhwaykcmyu\",
        \"responsible_email\": \"hirthe.theo@example.com\",
        \"form_id\": \"deea2dce-ea5d-340f-90ce-c06cddd4c879\",
        \"form_name\": \"r\",
        \"submission_date\": \"2026-02-20T19:44:17\",
        \"form_status\": \"s\",
        \"comments\": [
            \"architecto\"
        ],
        \"observations\": [
            {
                \"id\": \"a4855dc5-0acb-33c3-b921-f4291f719ca0\",
                \"comment\": \"architecto\",
                \"author\": \"n\",
                \"created_at\": \"2026-02-20T19:44:17\"
            }
        ]
    },
    \"non_working_days\": [
        \"2026-02-20\"
    ],
    \"report_file\": {
        \"status\": \"n\",
        \"generated_at\": \"2026-02-20T19:44:17\",
        \"url\": \"http:\\/\\/crooks.biz\\/et-fugiat-sunt-nihil-accusantium\",
        \"file_size\": 52,
        \"generation_error\": \"architecto\"
    },
    \"scheduled_at\": \"2026-02-20T19:44:17\",
    \"assigned_inspectors\": [
        {
            \"inspector_id\": 16,
            \"role\": \"architecto\"
        }
    ],
    \"checklists\": [
        {
            \"id\": \"6b72fe4a-5b40-307c-bc24-f79acf9a1bb9\",
            \"name\": \"m\",
            \"items\": [
                {
                    \"id\": \"a1a0a47d-e8c3-3cf0-8e6e-c1ff9dca5d1f\",
                    \"description\": \"Eius et animi quos velit et.\",
                    \"completed\": true
                }
            ]
        }
    ],
    \"authorized_inspectors\": [
        {
            \"name\": \"v\",
            \"dui\": \"dljnikhwaykcmyuw\",
            \"image\": \"p\",
            \"phone\": \"wlvqwrsitcpscqld\",
            \"role\": \"architecto\"
        }
    ],
    \"notes\": [
        {
            \"note\": \"architecto\",
            \"source\": \"n\"
        }
    ],
    \"findings\": [
        {
            \"title\": \"g\",
            \"description\": \"Eius et animi quos velit et.\",
            \"severity\": \"moderate\",
            \"category\": \"v\",
            \"status\": \"d\",
            \"resolved_at\": \"2026-02-20T19:44:17\",
            \"photos\": [
                \"l\"
            ],
            \"recommendations\": [
                \"architecto\"
            ]
        }
    ],
    \"comments\": [
        {
            \"comment\": \"architecto\",
            \"inspector_id\": 16
        }
    ]
}"
const url = new URL(
    "http://localhost/api/v1/inspections"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "procedure_id": "b",
    "inspection_type_ids": [
        "a4855dc5-0acb-33c3-b921-f4291f719ca0"
    ],
    "inspection_template_ids": [
        "c90237e9-ced5-3af6-88ea-84aeaa148878"
    ],
    "establishment_name": "i",
    "establishment_phone": "yvdljnikhwaykcmy",
    "associated_checklist_id": "u",
    "associated_checklist_name": "w",
    "checklist_questions_count": 67,
    "previous_score": 0,
    "estimated_duration_minutes": 32,
    "required_inspectors_count": 10,
    "procedure_submission_status": "q",
    "status": "architecto",
    "zone": "architecto",
    "occurrences": 22,
    "location": {
        "latitude": -90,
        "longitude": -179,
        "address": "m"
    },
    "instructions": "architecto",
    "procedure_data": {
        "request_id": "a4855dc5-0acb-33c3-b921-f4291f719ca0",
        "procedure_number": "z",
        "procedure_status": "m",
        "regulated_entity": "i",
        "responsible_person": "y",
        "responsible_phone": "vdljnikhwaykcmyu",
        "responsible_email": "hirthe.theo@example.com",
        "form_id": "deea2dce-ea5d-340f-90ce-c06cddd4c879",
        "form_name": "r",
        "submission_date": "2026-02-20T19:44:17",
        "form_status": "s",
        "comments": [
            "architecto"
        ],
        "observations": [
            {
                "id": "a4855dc5-0acb-33c3-b921-f4291f719ca0",
                "comment": "architecto",
                "author": "n",
                "created_at": "2026-02-20T19:44:17"
            }
        ]
    },
    "non_working_days": [
        "2026-02-20"
    ],
    "report_file": {
        "status": "n",
        "generated_at": "2026-02-20T19:44:17",
        "url": "http:\/\/crooks.biz\/et-fugiat-sunt-nihil-accusantium",
        "file_size": 52,
        "generation_error": "architecto"
    },
    "scheduled_at": "2026-02-20T19:44:17",
    "assigned_inspectors": [
        {
            "inspector_id": 16,
            "role": "architecto"
        }
    ],
    "checklists": [
        {
            "id": "6b72fe4a-5b40-307c-bc24-f79acf9a1bb9",
            "name": "m",
            "items": [
                {
                    "id": "a1a0a47d-e8c3-3cf0-8e6e-c1ff9dca5d1f",
                    "description": "Eius et animi quos velit et.",
                    "completed": true
                }
            ]
        }
    ],
    "authorized_inspectors": [
        {
            "name": "v",
            "dui": "dljnikhwaykcmyuw",
            "image": "p",
            "phone": "wlvqwrsitcpscqld",
            "role": "architecto"
        }
    ],
    "notes": [
        {
            "note": "architecto",
            "source": "n"
        }
    ],
    "findings": [
        {
            "title": "g",
            "description": "Eius et animi quos velit et.",
            "severity": "moderate",
            "category": "v",
            "status": "d",
            "resolved_at": "2026-02-20T19:44:17",
            "photos": [
                "l"
            ],
            "recommendations": [
                "architecto"
            ]
        }
    ],
    "comments": [
        {
            "comment": "architecto",
            "inspector_id": 16
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/inspections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

procedure_id   string     

Must not be greater than 255 characters. Example: b

inspection_type_ids   string[]     

Must be a valid UUID. The id of an existing record in the inspection_types table.

inspection_template_ids   string[]     

Must be a valid UUID.

assigned_inspectors   object[]  optional    
inspector_id   integer     

The id of an existing record in the users table. Example: 16

role   string     

Example: architecto

Must be one of:
  • principal
  • assistant
establishment_name   string  optional    

Must not be greater than 255 characters. Example: i

establishment_phone   string  optional    

Must not be greater than 20 characters. Example: yvdljnikhwaykcmy

associated_checklist_id   string  optional    

Must not be greater than 255 characters. Example: u

associated_checklist_name   string  optional    

Must not be greater than 255 characters. Example: w

checklist_questions_count   integer  optional    

Must be at least 0. Example: 67

previous_score   number  optional    

Must be between 0 and 100. Example: 0

estimated_duration_minutes   integer  optional    

Must be at least 1. Example: 32

required_inspectors_count   integer  optional    

Must be at least 1. Must not be greater than 10. Example: 10

procedure_submission_status   string  optional    

Must not be greater than 50 characters. Example: q

status   string  optional    

Example: architecto

Must be one of:
  • pending
  • pending_manual_assignment
  • scheduled
  • in_progress
  • completed
  • cancelled
zone   string  optional    

Example: architecto

Must be one of:
  • centro
  • norte
  • sur
  • este
  • oeste
occurrences   integer  optional    

Must be at least 1. Must not be greater than 365. Example: 22

location   object  optional    
latitude   number  optional    

Must be between -90 and 90. Example: -90

longitude   number  optional    

Must be between -180 and 180. Example: -179

address   string  optional    

Must not be greater than 500 characters. Example: m

instructions   string  optional    

Example: architecto

procedure_data   object  optional    
request_id   string  optional    

Must be a valid UUID. Example: a4855dc5-0acb-33c3-b921-f4291f719ca0

procedure_number   string  optional    

Must not be greater than 50 characters. Example: z

procedure_status   string  optional    

Must not be greater than 50 characters. Example: m

regulated_entity   string  optional    

Must not be greater than 255 characters. Example: i

responsible_person   string  optional    

Must not be greater than 255 characters. Example: y

responsible_phone   string  optional    

Must not be greater than 20 characters. Example: vdljnikhwaykcmyu

responsible_email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: hirthe.theo@example.com

form_id   string  optional    

Must be a valid UUID. Example: deea2dce-ea5d-340f-90ce-c06cddd4c879

form_name   string  optional    

Must not be greater than 255 characters. Example: r

submission_date   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

form_status   string  optional    

Must not be greater than 50 characters. Example: s

forms   object  optional    
comments   string[]  optional    
observations   object[]  optional    
id   string  optional    

This field is required when procedure_data.observations is present. Must be a valid UUID. Example: a4855dc5-0acb-33c3-b921-f4291f719ca0

comment   string  optional    

This field is required when procedure_data.observations is present. Example: architecto

author   string  optional    

This field is required when procedure_data.observations is present. Must not be greater than 255 characters. Example: n

created_at   string  optional    

This field is required when procedure_data.observations is present. Must be a valid date. Example: 2026-02-20T19:44:17

checklists   object[]  optional    
id   string  optional    

This field is required when checklists is present. Must be a valid UUID. Example: 6b72fe4a-5b40-307c-bc24-f79acf9a1bb9

name   string  optional    

This field is required when checklists is present. Must not be greater than 255 characters. Example: m

items   object[]  optional    

This field is required when checklists is present.

id   string  optional    

This field is required when checklists.*.items is present. Must be a valid UUID. Example: a1a0a47d-e8c3-3cf0-8e6e-c1ff9dca5d1f

description   string  optional    

This field is required when checklists.*.items is present. Example: Eius et animi quos velit et.

completed   boolean  optional    

This field is required when checklists.*.items is present. Example: true

authorized_inspectors   object[]  optional    
name   string  optional    

This field is required when authorized_inspectors is present. Must not be greater than 255 characters. Example: v

dui   string  optional    

This field is required when authorized_inspectors is present. Must not be greater than 20 characters. Example: dljnikhwaykcmyuw

image   string  optional    

Must be a valid URL. Must not be greater than 500 characters. Example: p

phone   string  optional    

Must not be greater than 20 characters. Example: wlvqwrsitcpscqld

role   string  optional    

Example: architecto

Must be one of:
  • tramitante
  • tramitante_suplente
  • otro_tramitante
  • adicional
notes   object[]  optional    
note   string  optional    

This field is required when notes is present. Example: architecto

source   string  optional    

This field is required when notes is present. Must not be greater than 50 characters. Example: n

Must be one of:
  • previous_inspection
  • manual
findings   object[]  optional    
title   string  optional    

This field is required when findings is present. Must not be greater than 255 characters. Example: g

description   string  optional    

Example: Eius et animi quos velit et.

severity   string  optional    

This field is required when findings is present. Example: moderate

Must be one of:
  • critical
  • moderate
  • minor
category   string  optional    

Must not be greater than 100 characters. Example: v

status   string  optional    

This field is required when findings is present. Must not be greater than 50 characters. Example: d

resolved_at   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

photos   string[]  optional    

Must be a valid URL. Must not be greater than 500 characters.

recommendations   string[]  optional    
comments   object[]  optional    
comment   string  optional    

This field is required when comments is present. Example: architecto

inspector_id   integer  optional    

This field is required when comments is present. The id of an existing record in the users table. Example: 16

non_working_days   string[]  optional    

Must be a valid date. Must be a valid date in the format Y-m-d.

metadata   object  optional    
report_file   object  optional    
status   string  optional    

This field is required when report_file is present. Must not be greater than 50 characters. Example: n

generated_at   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

url   string  optional    

Must be a valid URL. Must not be greater than 500 characters. Example: http://crooks.biz/et-fugiat-sunt-nihil-accusantium

file_size   integer  optional    

Must be at least 0. Example: 52

generation_error   string  optional    

Example: architecto

scheduled_at   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

GET api/v1/inspections/{id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspections/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspections/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "success": false,
    "message": "Not found",
    "errors": null
}
 

Request      

GET api/v1/inspections/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the inspection. Example: architecto

PATCH api/v1/inspections/{id}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/inspections/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"procedure_id\": \"b\",
    \"inspection_type_ids\": [
        \"a4855dc5-0acb-33c3-b921-f4291f719ca0\"
    ],
    \"inspection_template_ids\": [
        \"c90237e9-ced5-3af6-88ea-84aeaa148878\"
    ],
    \"establishment_name\": \"i\",
    \"establishment_phone\": \"yvdljnikhwaykcmy\",
    \"associated_checklist_id\": \"u\",
    \"associated_checklist_name\": \"w\",
    \"checklist_questions_count\": 67,
    \"previous_score\": 0,
    \"estimated_duration_minutes\": 32,
    \"required_inspectors_count\": 10,
    \"procedure_submission_status\": \"q\",
    \"status\": \"architecto\",
    \"zone\": \"architecto\",
    \"occurrences\": 22,
    \"location\": {
        \"latitude\": -90,
        \"longitude\": -179,
        \"address\": \"m\"
    },
    \"instructions\": \"architecto\",
    \"procedure_data\": {
        \"request_id\": \"a4855dc5-0acb-33c3-b921-f4291f719ca0\",
        \"procedure_number\": \"z\",
        \"procedure_status\": \"m\",
        \"regulated_entity\": \"i\",
        \"responsible_person\": \"y\",
        \"responsible_phone\": \"vdljnikhwaykcmyu\",
        \"responsible_email\": \"hirthe.theo@example.com\",
        \"form_id\": \"deea2dce-ea5d-340f-90ce-c06cddd4c879\",
        \"form_name\": \"r\",
        \"submission_date\": \"2026-02-20T19:44:17\",
        \"form_status\": \"s\",
        \"comments\": [
            \"architecto\"
        ],
        \"observations\": [
            {
                \"id\": \"a4855dc5-0acb-33c3-b921-f4291f719ca0\",
                \"comment\": \"architecto\",
                \"author\": \"n\",
                \"created_at\": \"2026-02-20T19:44:17\"
            }
        ]
    },
    \"non_working_days\": [
        \"2026-02-20\"
    ],
    \"report_file\": {
        \"status\": \"n\",
        \"generated_at\": \"2026-02-20T19:44:17\",
        \"url\": \"http:\\/\\/crooks.biz\\/et-fugiat-sunt-nihil-accusantium\",
        \"file_size\": 52,
        \"generation_error\": \"architecto\"
    },
    \"scheduled_at\": \"2026-02-20T19:44:17\",
    \"started_at\": \"2026-02-20T19:44:17\",
    \"completed_at\": \"2026-02-20T19:44:17\",
    \"assigned_inspectors\": [
        {
            \"inspector_id\": 16,
            \"role\": \"architecto\"
        }
    ],
    \"checklists\": [
        {
            \"id\": \"6b72fe4a-5b40-307c-bc24-f79acf9a1bb9\",
            \"name\": \"m\",
            \"items\": [
                {
                    \"id\": \"a1a0a47d-e8c3-3cf0-8e6e-c1ff9dca5d1f\",
                    \"description\": \"Eius et animi quos velit et.\",
                    \"completed\": false
                }
            ]
        }
    ],
    \"authorized_inspectors\": [
        {
            \"name\": \"v\",
            \"dui\": \"dljnikhwaykcmyuw\",
            \"image\": \"p\",
            \"phone\": \"wlvqwrsitcpscqld\",
            \"role\": \"architecto\"
        }
    ],
    \"notes\": [
        {
            \"note\": \"architecto\",
            \"source\": \"n\"
        }
    ],
    \"findings\": [
        {
            \"title\": \"g\",
            \"description\": \"Eius et animi quos velit et.\",
            \"severity\": \"minor\",
            \"category\": \"v\",
            \"status\": \"d\",
            \"resolved_at\": \"2026-02-20T19:44:17\",
            \"photos\": [
                \"l\"
            ],
            \"recommendations\": [
                \"architecto\"
            ]
        }
    ],
    \"comments\": [
        {
            \"comment\": \"architecto\",
            \"inspector_id\": 16
        }
    ]
}"
const url = new URL(
    "http://localhost/api/v1/inspections/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "procedure_id": "b",
    "inspection_type_ids": [
        "a4855dc5-0acb-33c3-b921-f4291f719ca0"
    ],
    "inspection_template_ids": [
        "c90237e9-ced5-3af6-88ea-84aeaa148878"
    ],
    "establishment_name": "i",
    "establishment_phone": "yvdljnikhwaykcmy",
    "associated_checklist_id": "u",
    "associated_checklist_name": "w",
    "checklist_questions_count": 67,
    "previous_score": 0,
    "estimated_duration_minutes": 32,
    "required_inspectors_count": 10,
    "procedure_submission_status": "q",
    "status": "architecto",
    "zone": "architecto",
    "occurrences": 22,
    "location": {
        "latitude": -90,
        "longitude": -179,
        "address": "m"
    },
    "instructions": "architecto",
    "procedure_data": {
        "request_id": "a4855dc5-0acb-33c3-b921-f4291f719ca0",
        "procedure_number": "z",
        "procedure_status": "m",
        "regulated_entity": "i",
        "responsible_person": "y",
        "responsible_phone": "vdljnikhwaykcmyu",
        "responsible_email": "hirthe.theo@example.com",
        "form_id": "deea2dce-ea5d-340f-90ce-c06cddd4c879",
        "form_name": "r",
        "submission_date": "2026-02-20T19:44:17",
        "form_status": "s",
        "comments": [
            "architecto"
        ],
        "observations": [
            {
                "id": "a4855dc5-0acb-33c3-b921-f4291f719ca0",
                "comment": "architecto",
                "author": "n",
                "created_at": "2026-02-20T19:44:17"
            }
        ]
    },
    "non_working_days": [
        "2026-02-20"
    ],
    "report_file": {
        "status": "n",
        "generated_at": "2026-02-20T19:44:17",
        "url": "http:\/\/crooks.biz\/et-fugiat-sunt-nihil-accusantium",
        "file_size": 52,
        "generation_error": "architecto"
    },
    "scheduled_at": "2026-02-20T19:44:17",
    "started_at": "2026-02-20T19:44:17",
    "completed_at": "2026-02-20T19:44:17",
    "assigned_inspectors": [
        {
            "inspector_id": 16,
            "role": "architecto"
        }
    ],
    "checklists": [
        {
            "id": "6b72fe4a-5b40-307c-bc24-f79acf9a1bb9",
            "name": "m",
            "items": [
                {
                    "id": "a1a0a47d-e8c3-3cf0-8e6e-c1ff9dca5d1f",
                    "description": "Eius et animi quos velit et.",
                    "completed": false
                }
            ]
        }
    ],
    "authorized_inspectors": [
        {
            "name": "v",
            "dui": "dljnikhwaykcmyuw",
            "image": "p",
            "phone": "wlvqwrsitcpscqld",
            "role": "architecto"
        }
    ],
    "notes": [
        {
            "note": "architecto",
            "source": "n"
        }
    ],
    "findings": [
        {
            "title": "g",
            "description": "Eius et animi quos velit et.",
            "severity": "minor",
            "category": "v",
            "status": "d",
            "resolved_at": "2026-02-20T19:44:17",
            "photos": [
                "l"
            ],
            "recommendations": [
                "architecto"
            ]
        }
    ],
    "comments": [
        {
            "comment": "architecto",
            "inspector_id": 16
        }
    ]
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/v1/inspections/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the inspection. Example: architecto

Body Parameters

procedure_id   string  optional    

Must not be greater than 255 characters. Example: b

inspection_type_ids   string[]     

Must be a valid UUID. The id of an existing record in the inspection_types table.

inspection_template_ids   string[]     

Must be a valid UUID.

assigned_inspectors   object[]  optional    
inspector_id   integer     

The id of an existing record in the users table. Example: 16

role   string     

Example: architecto

Must be one of:
  • principal
  • assistant
establishment_name   string  optional    

Must not be greater than 255 characters. Example: i

establishment_phone   string  optional    

Must not be greater than 20 characters. Example: yvdljnikhwaykcmy

associated_checklist_id   string  optional    

Must not be greater than 255 characters. Example: u

associated_checklist_name   string  optional    

Must not be greater than 255 characters. Example: w

checklist_questions_count   integer  optional    

Must be at least 0. Example: 67

previous_score   number  optional    

Must be between 0 and 100. Example: 0

estimated_duration_minutes   integer  optional    

Must be at least 1. Example: 32

required_inspectors_count   integer  optional    

Must be at least 1. Must not be greater than 10. Example: 10

procedure_submission_status   string  optional    

Must not be greater than 50 characters. Example: q

status   string  optional    

Example: architecto

Must be one of:
  • pending
  • pending_manual_assignment
  • scheduled
  • in_progress
  • completed
  • cancelled
zone   string  optional    

Example: architecto

Must be one of:
  • centro
  • norte
  • sur
  • este
  • oeste
occurrences   integer  optional    

Must be at least 1. Must not be greater than 365. Example: 22

location   object  optional    
latitude   number  optional    

Must be between -90 and 90. Example: -90

longitude   number  optional    

Must be between -180 and 180. Example: -179

address   string  optional    

Must not be greater than 500 characters. Example: m

instructions   string  optional    

Example: architecto

procedure_data   object  optional    
request_id   string  optional    

Must be a valid UUID. Example: a4855dc5-0acb-33c3-b921-f4291f719ca0

procedure_number   string  optional    

Must not be greater than 50 characters. Example: z

procedure_status   string  optional    

Must not be greater than 50 characters. Example: m

regulated_entity   string  optional    

Must not be greater than 255 characters. Example: i

responsible_person   string  optional    

Must not be greater than 255 characters. Example: y

responsible_phone   string  optional    

Must not be greater than 20 characters. Example: vdljnikhwaykcmyu

responsible_email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: hirthe.theo@example.com

form_id   string  optional    

Must be a valid UUID. Example: deea2dce-ea5d-340f-90ce-c06cddd4c879

form_name   string  optional    

Must not be greater than 255 characters. Example: r

submission_date   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

form_status   string  optional    

Must not be greater than 50 characters. Example: s

forms   object  optional    
comments   string[]  optional    
observations   object[]  optional    
id   string  optional    

This field is required when procedure_data.observations is present. Must be a valid UUID. Example: a4855dc5-0acb-33c3-b921-f4291f719ca0

comment   string  optional    

This field is required when procedure_data.observations is present. Example: architecto

author   string  optional    

This field is required when procedure_data.observations is present. Must not be greater than 255 characters. Example: n

created_at   string  optional    

This field is required when procedure_data.observations is present. Must be a valid date. Example: 2026-02-20T19:44:17

checklists   object[]  optional    
id   string  optional    

This field is required when checklists is present. Must be a valid UUID. Example: 6b72fe4a-5b40-307c-bc24-f79acf9a1bb9

name   string  optional    

This field is required when checklists is present. Must not be greater than 255 characters. Example: m

items   object[]  optional    

This field is required when checklists is present.

id   string  optional    

This field is required when checklists.*.items is present. Must be a valid UUID. Example: a1a0a47d-e8c3-3cf0-8e6e-c1ff9dca5d1f

description   string  optional    

This field is required when checklists.*.items is present. Example: Eius et animi quos velit et.

completed   boolean  optional    

This field is required when checklists.*.items is present. Example: false

authorized_inspectors   object[]  optional    
name   string  optional    

This field is required when authorized_inspectors is present. Must not be greater than 255 characters. Example: v

dui   string  optional    

This field is required when authorized_inspectors is present. Must not be greater than 20 characters. Example: dljnikhwaykcmyuw

image   string  optional    

Must be a valid URL. Must not be greater than 500 characters. Example: p

phone   string  optional    

Must not be greater than 20 characters. Example: wlvqwrsitcpscqld

role   string  optional    

Example: architecto

Must be one of:
  • tramitante
  • tramitante_suplente
  • otro_tramitante
  • adicional
notes   object[]  optional    
note   string  optional    

This field is required when notes is present. Example: architecto

source   string  optional    

This field is required when notes is present. Must not be greater than 50 characters. Example: n

Must be one of:
  • previous_inspection
  • manual
findings   object[]  optional    
title   string  optional    

This field is required when findings is present. Must not be greater than 255 characters. Example: g

description   string  optional    

Example: Eius et animi quos velit et.

severity   string  optional    

This field is required when findings is present. Example: minor

Must be one of:
  • critical
  • moderate
  • minor
category   string  optional    

Must not be greater than 100 characters. Example: v

status   string  optional    

This field is required when findings is present. Must not be greater than 50 characters. Example: d

resolved_at   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

photos   string[]  optional    

Must be a valid URL. Must not be greater than 500 characters.

recommendations   string[]  optional    
comments   object[]  optional    
comment   string  optional    

This field is required when comments is present. Example: architecto

inspector_id   integer  optional    

This field is required when comments is present. The id of an existing record in the users table. Example: 16

non_working_days   string[]  optional    

Must be a valid date. Must be a valid date in the format Y-m-d.

metadata   object  optional    
report_file   object  optional    
status   string  optional    

This field is required when report_file is present. Must not be greater than 50 characters. Example: n

generated_at   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

url   string  optional    

Must be a valid URL. Must not be greater than 500 characters. Example: http://crooks.biz/et-fugiat-sunt-nihil-accusantium

file_size   integer  optional    

Must be at least 0. Example: 52

generation_error   string  optional    

Example: architecto

scheduled_at   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

started_at   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

completed_at   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

POST api/v1/inspections/{inspection_id}/reschedule

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspections/architecto/reschedule" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"inspector_ids\": [
        16
    ],
    \"comment\": \"architecto\"
}"
const url = new URL(
    "http://localhost/api/v1/inspections/architecto/reschedule"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "inspector_ids": [
        16
    ],
    "comment": "architecto"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/inspections/{inspection_id}/reschedule

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inspection_id   string     

The ID of the inspection. Example: architecto

Body Parameters

inspector_ids   integer[]  optional    

The id of an existing record in the users table.

comment   string  optional    

Example: architecto

POST api/v1/inspections/{inspection_id}/cancel

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspections/architecto/cancel" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reason_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",
    \"comment\": \"architecto\",
    \"source\": \"app\"
}"
const url = new URL(
    "http://localhost/api/v1/inspections/architecto/cancel"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "reason_id": "6ff8f7f6-1eb3-3525-be4a-3932c805afed",
    "comment": "architecto",
    "source": "app"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/inspections/{inspection_id}/cancel

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inspection_id   string     

The ID of the inspection. Example: architecto

Body Parameters

reason_id   string     

Must be a valid UUID. The id of an existing record in the inspection_change_reasons table. Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

comment   string  optional    

Example: architecto

source   string     

Example: app

Must be one of:
  • app
  • backoffice

DELETE api/v1/inspections/{id}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost/api/v1/inspections/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspections/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/inspections/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the inspection. Example: architecto

Reschedule Requests

POST api/v1/inspections/{inspection_id}/reschedule-requests

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspections/architecto/reschedule-requests" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"type\": \"reschedule\",
    \"reason_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",
    \"comment\": \"g\"
}"
const url = new URL(
    "http://localhost/api/v1/inspections/architecto/reschedule-requests"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "type": "reschedule",
    "reason_id": "6ff8f7f6-1eb3-3525-be4a-3932c805afed",
    "comment": "g"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/inspections/{inspection_id}/reschedule-requests

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inspection_id   string     

The ID of the inspection. Example: architecto

Body Parameters

type   string     

Example: reschedule

Must be one of:
  • reschedule
  • cancellation
reason_id   string     

Must be a valid UUID. The id of an existing record in the inspection_change_reasons table. Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

comment   string  optional    

Must not be greater than 1000 characters. Example: g

POST api/v1/inspections/reschedule-requests/{rescheduleRequest_id}/process

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspections/reschedule-requests/architecto/process" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"pending_approval\",
    \"resolution_comment\": \"b\"
}"
const url = new URL(
    "http://localhost/api/v1/inspections/reschedule-requests/architecto/process"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "status": "pending_approval",
    "resolution_comment": "b"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/inspections/reschedule-requests/{rescheduleRequest_id}/process

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

rescheduleRequest_id   string     

The ID of the rescheduleRequest. Example: architecto

Body Parameters

status   string     

Example: pending_approval

Must be one of:
  • pending_approval
  • approved
  • rejected
resolution_comment   string  optional    

Must not be greater than 1000 characters. Example: b

Inspection Skill Management

GET api/v1/inspection-skills

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspection-skills" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"page\": 16,
    \"per_page\": 22,
    \"search\": \"g\",
    \"active_only\": false,
    \"sort_by\": \"inspectors_count\",
    \"sort_order\": \"asc\"
}"
const url = new URL(
    "http://localhost/api/v1/inspection-skills"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "page": 16,
    "per_page": 22,
    "search": "g",
    "active_only": false,
    "sort_by": "inspectors_count",
    "sort_order": "asc"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/inspection-skills

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

page   integer  optional    

Must be at least 1. Example: 16

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 22

search   string  optional    

Must not be greater than 100 characters. Example: g

active_only   boolean  optional    

Example: false

sort_by   string  optional    

Example: inspectors_count

Must be one of:
  • name
  • created_at
  • inspectors_count
sort_order   string  optional    

Example: asc

Must be one of:
  • asc
  • desc

GET api/v1/inspection-skills/{skill_id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspection-skills/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-skills/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/inspection-skills/{skill_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

skill_id   string     

The ID of the skill. Example: architecto

GET api/v1/inspection-skills/{skill_id}/users

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspection-skills/architecto/users" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"page\": 16,
    \"per_page\": 22,
    \"search\": \"g\"
}"
const url = new URL(
    "http://localhost/api/v1/inspection-skills/architecto/users"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "page": 16,
    "per_page": 22,
    "search": "g"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/inspection-skills/{skill_id}/users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

skill_id   string     

The ID of the skill. Example: architecto

Body Parameters

page   integer  optional    

Must be at least 1. Example: 16

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 22

search   string  optional    

Must not be greater than 255 characters. Example: g

POST api/v1/inspection-skills

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspection-skills" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Et animi quos velit et fugiat.\"
}"
const url = new URL(
    "http://localhost/api/v1/inspection-skills"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Et animi quos velit et fugiat."
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/inspection-skills

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Must not be greater than 1000 characters. Example: Et animi quos velit et fugiat.

user_ids   string[]  optional    

The id of an existing record in the users table.

PATCH api/v1/inspection-skills/{skill_id}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/inspection-skills/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Et animi quos velit et fugiat.\"
}"
const url = new URL(
    "http://localhost/api/v1/inspection-skills/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Et animi quos velit et fugiat."
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/v1/inspection-skills/{skill_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

skill_id   string     

The ID of the skill. Example: architecto

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Must not be greater than 1000 characters. Example: Et animi quos velit et fugiat.

PATCH api/v1/inspection-skills/{skill_id}/toggle

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/inspection-skills/architecto/toggle" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-skills/architecto/toggle"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "PATCH",
    headers,
}).then(response => response.json());

Request      

PATCH api/v1/inspection-skills/{skill_id}/toggle

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

skill_id   string     

The ID of the skill. Example: architecto

DELETE api/v1/inspection-skills/{skill_id}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost/api/v1/inspection-skills/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-skills/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/inspection-skills/{skill_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

skill_id   string     

The ID of the skill. Example: architecto

Inspection Template Management

GET api/v1/inspection-templates

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspection-templates" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"search\": \"b\",
    \"from_date\": \"2026-02-20T19:44:18\",
    \"to_date\": \"2052-03-15\",
    \"sort_by\": \"created_at\",
    \"sort_order\": \"asc\",
    \"per_page\": 22,
    \"page\": 67
}"
const url = new URL(
    "http://localhost/api/v1/inspection-templates"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "search": "b",
    "from_date": "2026-02-20T19:44:18",
    "to_date": "2052-03-15",
    "sort_by": "created_at",
    "sort_order": "asc",
    "per_page": 22,
    "page": 67
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/inspection-templates

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

search   string  optional    

Must not be greater than 100 characters. Example: b

status   object  optional    
Must be one of:
  • draft
  • active
  • inactive
from_date   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:18

to_date   string  optional    

Must be a valid date. Must be a date after or equal to from_date. Example: 2052-03-15

sort_by   string  optional    

Example: created_at

Must be one of:
  • name
  • created_at
  • estimated_duration_minutes
sort_order   string  optional    

Example: asc

Must be one of:
  • asc
  • desc
per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 22

page   integer  optional    

Must be at least 1. Example: 67

GET api/v1/inspection-templates/{group_uuid}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/inspection-templates/{group_uuid}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

group_uuid   string     

Example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc

GET api/v1/inspection-templates/{group_uuid}/versions

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/versions" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/versions"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/inspection-templates/{group_uuid}/versions

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

group_uuid   string     

Example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc

GET api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/versions/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/versions/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "success": false,
    "message": "Not found",
    "errors": null
}
 

Request      

GET api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

group_uuid   string     

Example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc

inspectionTemplate_id   string     

The ID of the inspectionTemplate. Example: architecto

POST api/v1/inspection-templates

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspection-templates" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Eius et animi quos velit et.\",
    \"approval_threshold\": 1,
    \"inspection_type_ids\": [
        \"5707ca55-f609-3528-be8b-1baeaee1567e\"
    ],
    \"estimated_duration_minutes\": 19,
    \"required_skill_ids\": [
        \"architecto\"
    ],
    \"associated_procedure_ids\": [
        \"n\"
    ],
    \"steps\": [
        {
            \"name\": \"b\",
            \"description\": \"Eius et animi quos velit et.\",
            \"position\": 60,
            \"sections\": [
                {
                    \"title\": \"b\",
                    \"description\": \"Eius et animi quos velit et.\",
                    \"position\": 60,
                    \"items\": [
                        {
                            \"type\": \"compliance\",
                            \"label\": \"b\",
                            \"description\": \"Eius et animi quos velit et.\",
                            \"is_mandatory\": true,
                            \"requires_evidence\": true,
                            \"allows_comments\": true,
                            \"criticality\": \"moderate\",
                            \"weight\": 60,
                            \"position\": 42
                        }
                    ]
                }
            ]
        }
    ]
}"
const url = new URL(
    "http://localhost/api/v1/inspection-templates"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Eius et animi quos velit et.",
    "approval_threshold": 1,
    "inspection_type_ids": [
        "5707ca55-f609-3528-be8b-1baeaee1567e"
    ],
    "estimated_duration_minutes": 19,
    "required_skill_ids": [
        "architecto"
    ],
    "associated_procedure_ids": [
        "n"
    ],
    "steps": [
        {
            "name": "b",
            "description": "Eius et animi quos velit et.",
            "position": 60,
            "sections": [
                {
                    "title": "b",
                    "description": "Eius et animi quos velit et.",
                    "position": 60,
                    "items": [
                        {
                            "type": "compliance",
                            "label": "b",
                            "description": "Eius et animi quos velit et.",
                            "is_mandatory": true,
                            "requires_evidence": true,
                            "allows_comments": true,
                            "criticality": "moderate",
                            "weight": 60,
                            "position": 42
                        }
                    ]
                }
            ]
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/inspection-templates

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

approval_threshold   integer  optional    

Must be at least 0. Must not be greater than 100. Example: 1

inspection_type_ids   string[]     

Must be a valid UUID. The id of an existing record in the inspection_types table.

estimated_duration_minutes   integer  optional    

Must be at least 1. Must not be greater than 1440. Example: 19

required_skill_ids   string[]  optional    
associated_procedure_ids   string[]  optional    

Must not be greater than 255 characters.

allowed_hours   object  optional    
member_level_config   object  optional    
steps   object[]     

Must have at least 1 items.

name   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

position   integer     

Must be at least 0. Example: 60

sections   object[]     

Must have at least 1 items.

title   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

position   integer     

Must be at least 0. Example: 60

items   object[]     

Must have at least 1 items.

type   string     

Example: compliance

Must be one of:
  • compliance
  • measurement
  • text
  • file
label   string     

Must not be greater than 500 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

is_mandatory   boolean  optional    

Example: true

requires_evidence   boolean  optional    

Example: true

allows_comments   boolean  optional    

Example: true

criticality   string  optional    

Example: moderate

Must be one of:
  • none
  • mild
  • moderate
  • critical
weight   number  optional    

Must be at least 0. Example: 60

position   integer     

Must be at least 0. Example: 42

metadata   object  optional    

PATCH api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/versions/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Eius et animi quos velit et.\",
    \"approval_threshold\": 1,
    \"inspection_type_ids\": [
        \"5707ca55-f609-3528-be8b-1baeaee1567e\"
    ],
    \"estimated_duration_minutes\": 19,
    \"required_skill_ids\": [
        \"architecto\"
    ],
    \"associated_procedure_ids\": [
        \"n\"
    ],
    \"steps\": [
        {
            \"name\": \"g\",
            \"description\": \"Eius et animi quos velit et.\",
            \"position\": 60,
            \"sections\": [
                {
                    \"title\": \"b\",
                    \"description\": \"Eius et animi quos velit et.\",
                    \"position\": 60,
                    \"items\": [
                        {
                            \"type\": \"compliance\",
                            \"label\": \"b\",
                            \"description\": \"Eius et animi quos velit et.\",
                            \"is_mandatory\": true,
                            \"requires_evidence\": true,
                            \"allows_comments\": false,
                            \"criticality\": \"mild\",
                            \"weight\": 60,
                            \"position\": 42
                        }
                    ]
                }
            ]
        }
    ]
}"
const url = new URL(
    "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/versions/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "description": "Eius et animi quos velit et.",
    "approval_threshold": 1,
    "inspection_type_ids": [
        "5707ca55-f609-3528-be8b-1baeaee1567e"
    ],
    "estimated_duration_minutes": 19,
    "required_skill_ids": [
        "architecto"
    ],
    "associated_procedure_ids": [
        "n"
    ],
    "steps": [
        {
            "name": "g",
            "description": "Eius et animi quos velit et.",
            "position": 60,
            "sections": [
                {
                    "title": "b",
                    "description": "Eius et animi quos velit et.",
                    "position": 60,
                    "items": [
                        {
                            "type": "compliance",
                            "label": "b",
                            "description": "Eius et animi quos velit et.",
                            "is_mandatory": true,
                            "requires_evidence": true,
                            "allows_comments": false,
                            "criticality": "mild",
                            "weight": 60,
                            "position": 42
                        }
                    ]
                }
            ]
        }
    ]
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

group_uuid   string     

Example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc

inspectionTemplate_id   string     

The ID of the inspectionTemplate. Example: architecto

Body Parameters

name   string  optional    

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

approval_threshold   integer  optional    

Must be at least 0. Must not be greater than 100. Example: 1

inspection_type_ids   string[]     

Must be a valid UUID. The id of an existing record in the inspection_types table.

estimated_duration_minutes   integer  optional    

Must be at least 1. Must not be greater than 1440. Example: 19

required_skill_ids   string[]  optional    
associated_procedure_ids   string[]  optional    

Must not be greater than 255 characters.

allowed_hours   object  optional    
member_level_config   object  optional    
steps   object[]  optional    
name   string     

Must not be greater than 255 characters. Example: g

description   string  optional    

Example: Eius et animi quos velit et.

position   integer     

Must be at least 0. Example: 60

sections   object[]     

Must have at least 1 items.

title   string     

Must not be greater than 255 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

position   integer     

Must be at least 0. Example: 60

items   object[]     

Must have at least 1 items.

type   string     

Example: compliance

Must be one of:
  • compliance
  • measurement
  • text
  • file
label   string     

Must not be greater than 500 characters. Example: b

description   string  optional    

Example: Eius et animi quos velit et.

is_mandatory   boolean  optional    

Example: true

requires_evidence   boolean  optional    

Example: true

allows_comments   boolean  optional    

Example: false

criticality   string  optional    

Example: mild

Must be one of:
  • none
  • mild
  • moderate
  • critical
weight   number  optional    

Must be at least 0. Example: 60

position   integer     

Must be at least 0. Example: 42

metadata   object  optional    

POST api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}/activate

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/versions/architecto/activate" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/versions/architecto/activate"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}/activate

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

group_uuid   string     

Example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc

inspectionTemplate_id   string     

The ID of the inspectionTemplate. Example: architecto

POST api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}/clone

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/versions/architecto/clone" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/versions/architecto/clone"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}/clone

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

group_uuid   string     

Example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc

inspectionTemplate_id   string     

The ID of the inspectionTemplate. Example: architecto

POST api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}/deactivate

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/versions/architecto/deactivate" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-templates/BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc/versions/architecto/deactivate"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}/deactivate

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

group_uuid   string     

Example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc

inspectionTemplate_id   string     

The ID of the inspectionTemplate. Example: architecto

Inspection Type Management

GET api/v1/inspection-types

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspection-types" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"search\": \"b\",
    \"is_active\": false,
    \"updated_from\": \"2026-02-20T19:44:17\",
    \"updated_to\": \"2052-03-15\",
    \"page\": 22,
    \"per_page\": 7,
    \"sort_by\": \"name\",
    \"sort_order\": \"desc\"
}"
const url = new URL(
    "http://localhost/api/v1/inspection-types"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "search": "b",
    "is_active": false,
    "updated_from": "2026-02-20T19:44:17",
    "updated_to": "2052-03-15",
    "page": 22,
    "per_page": 7,
    "sort_by": "name",
    "sort_order": "desc"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/inspection-types

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

search   string  optional    

Must not be greater than 100 characters. Example: b

is_active   boolean  optional    

Example: false

updated_from   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

updated_to   string  optional    

Must be a valid date. Must be a date after or equal to updated_from. Example: 2052-03-15

page   integer  optional    

Must be at least 1. Example: 22

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 7

sort_by   string  optional    

Example: name

Must be one of:
  • name
  • description
sort_order   string  optional    

Example: desc

Must be one of:
  • asc
  • desc

GET api/v1/inspection-types/{inspectionType_id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/inspection-types/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-types/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "success": false,
    "message": "Not found",
    "errors": null
}
 

Request      

GET api/v1/inspection-types/{inspectionType_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inspectionType_id   string     

The ID of the inspectionType. Example: architecto

POST api/v1/inspection-types

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/inspection-types" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"code\": \"n\",
    \"description\": \"Animi quos velit et fugiat.\",
    \"estimated_duration_minutes\": 1,
    \"available_from_time\": \"19:44:17\",
    \"available_to_time\": \"2052-03-15\",
    \"min_business_days\": 39,
    \"max_business_days\": \"2052-03-15\",
    \"required_skills\": [
        \"architecto\"
    ],
    \"frequency\": {
        \"interval\": 22,
        \"unit\": \"architecto\",
        \"day_of_week\": \"architecto\",
        \"repeat_mode\": \"architecto\",
        \"day_of_month\": 22,
        \"week\": \"architecto\",
        \"month\": \"architecto\",
        \"days_of_month\": [
            22
        ]
    },
    \"allow_reschedule\": true,
    \"allow_direct_cancel\": false,
    \"max_reschedules\": 84,
    \"reschedule_time_limit\": \"19:44:17\",
    \"reschedule_day_limit\": 12,
    \"auto_cancel_on_max_reschedules\": false,
    \"negative_result_on_app_cancel\": true,
    \"allow_inspector_reschedule_request\": false,
    \"is_active\": true
}"
const url = new URL(
    "http://localhost/api/v1/inspection-types"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "code": "n",
    "description": "Animi quos velit et fugiat.",
    "estimated_duration_minutes": 1,
    "available_from_time": "19:44:17",
    "available_to_time": "2052-03-15",
    "min_business_days": 39,
    "max_business_days": "2052-03-15",
    "required_skills": [
        "architecto"
    ],
    "frequency": {
        "interval": 22,
        "unit": "architecto",
        "day_of_week": "architecto",
        "repeat_mode": "architecto",
        "day_of_month": 22,
        "week": "architecto",
        "month": "architecto",
        "days_of_month": [
            22
        ]
    },
    "allow_reschedule": true,
    "allow_direct_cancel": false,
    "max_reschedules": 84,
    "reschedule_time_limit": "19:44:17",
    "reschedule_day_limit": 12,
    "auto_cancel_on_max_reschedules": false,
    "negative_result_on_app_cancel": true,
    "allow_inspector_reschedule_request": false,
    "is_active": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/inspection-types

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

code   string     

Must not be greater than 50 characters. Example: n

description   string  optional    

Must not be greater than 1000 characters. Example: Animi quos velit et fugiat.

estimated_duration_minutes   integer  optional    

Must be at least 1. Must not be greater than 1440. Example: 1

available_from_time   string  optional    

Must be a valid date in the format H:i:s. Example: 19:44:17

available_to_time   string  optional    

Must be a valid date in the format H:i:s. Must be a date after available_from_time. Example: 2052-03-15

min_business_days   integer  optional    

Must be at least 0. Example: 39

max_business_days   string  optional    

Must be at least 0. Must be a date after or equal to min_business_days. Example: 2052-03-15

required_skills   string[]  optional    
rules   object  optional    
frequency   object  optional    
interval   integer  optional    

This field is required when frequency is present. Must be at least 1. Example: 22

unit   string  optional    

This field is required when frequency is present. Example: architecto

Must be one of:
  • days
  • weeks
  • months
  • years
day_of_week   string  optional    

Example: architecto

Must be one of:
  • monday
  • tuesday
  • wednesday
  • thursday
  • friday
  • saturday
  • sunday
repeat_mode   string  optional    

Example: architecto

Must be one of:
  • date
  • day
day_of_month   integer  optional    

Must be at least 1. Must not be greater than 31. Example: 22

week   string  optional    

Example: architecto

Must be one of:
  • first
  • second
  • third
  • fourth
  • fifth
  • penultimate
  • last
month   string  optional    

Example: architecto

days_of_month   integer[]  optional    

Must be at least 1. Must not be greater than 31.

allow_reschedule   boolean  optional    

Example: true

allow_direct_cancel   boolean  optional    

Example: false

max_reschedules   integer  optional    

Must be at least 0. Example: 84

reschedule_time_limit   string  optional    

Must be a valid date in the format H:i:s. Example: 19:44:17

reschedule_day_limit   integer  optional    

Must be at least 0. Example: 12

auto_cancel_on_max_reschedules   boolean  optional    

Example: false

negative_result_on_app_cancel   boolean  optional    

Example: true

allow_inspector_reschedule_request   boolean  optional    

Example: false

is_active   boolean  optional    

Example: true

PATCH api/v1/inspection-types/{inspectionType_id}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/inspection-types/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"code\": \"n\",
    \"description\": \"Animi quos velit et fugiat.\",
    \"estimated_duration_minutes\": 1,
    \"available_from_time\": \"19:44:17\",
    \"available_to_time\": \"2052-03-15\",
    \"min_business_days\": 39,
    \"max_business_days\": \"2052-03-15\",
    \"required_skills\": [
        \"architecto\"
    ],
    \"frequency\": {
        \"interval\": 22,
        \"unit\": \"architecto\",
        \"day_of_week\": \"architecto\",
        \"repeat_mode\": \"architecto\",
        \"day_of_month\": 22,
        \"week\": \"architecto\",
        \"month\": \"architecto\",
        \"days_of_month\": [
            22
        ]
    },
    \"allow_reschedule\": false,
    \"allow_direct_cancel\": true,
    \"max_reschedules\": 84,
    \"reschedule_time_limit\": \"19:44:17\",
    \"reschedule_day_limit\": 12,
    \"auto_cancel_on_max_reschedules\": false,
    \"negative_result_on_app_cancel\": true,
    \"allow_inspector_reschedule_request\": false,
    \"is_active\": false
}"
const url = new URL(
    "http://localhost/api/v1/inspection-types/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "code": "n",
    "description": "Animi quos velit et fugiat.",
    "estimated_duration_minutes": 1,
    "available_from_time": "19:44:17",
    "available_to_time": "2052-03-15",
    "min_business_days": 39,
    "max_business_days": "2052-03-15",
    "required_skills": [
        "architecto"
    ],
    "frequency": {
        "interval": 22,
        "unit": "architecto",
        "day_of_week": "architecto",
        "repeat_mode": "architecto",
        "day_of_month": 22,
        "week": "architecto",
        "month": "architecto",
        "days_of_month": [
            22
        ]
    },
    "allow_reschedule": false,
    "allow_direct_cancel": true,
    "max_reschedules": 84,
    "reschedule_time_limit": "19:44:17",
    "reschedule_day_limit": 12,
    "auto_cancel_on_max_reschedules": false,
    "negative_result_on_app_cancel": true,
    "allow_inspector_reschedule_request": false,
    "is_active": false
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/v1/inspection-types/{inspectionType_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inspectionType_id   string     

The ID of the inspectionType. Example: architecto

Body Parameters

name   string  optional    

Must not be greater than 255 characters. Example: b

code   string  optional    

Must not be greater than 50 characters. Example: n

description   string  optional    

Must not be greater than 1000 characters. Example: Animi quos velit et fugiat.

estimated_duration_minutes   integer  optional    

Must be at least 1. Must not be greater than 1440. Example: 1

available_from_time   string  optional    

Must be a valid date in the format H:i:s. Example: 19:44:17

available_to_time   string  optional    

Must be a valid date in the format H:i:s. Must be a date after available_from_time. Example: 2052-03-15

min_business_days   integer  optional    

Must be at least 0. Example: 39

max_business_days   string  optional    

Must be at least 0. Must be a date after or equal to min_business_days. Example: 2052-03-15

required_skills   string[]  optional    
rules   object  optional    
frequency   object  optional    
interval   integer  optional    

This field is required when frequency is present. Must be at least 1. Example: 22

unit   string  optional    

This field is required when frequency is present. Example: architecto

Must be one of:
  • days
  • weeks
  • months
  • years
day_of_week   string  optional    

Example: architecto

Must be one of:
  • monday
  • tuesday
  • wednesday
  • thursday
  • friday
  • saturday
  • sunday
repeat_mode   string  optional    

Example: architecto

Must be one of:
  • date
  • day
day_of_month   integer  optional    

Must be at least 1. Must not be greater than 31. Example: 22

week   string  optional    

Example: architecto

Must be one of:
  • first
  • second
  • third
  • fourth
  • fifth
  • penultimate
  • last
month   string  optional    

Example: architecto

days_of_month   integer[]  optional    

Must be at least 1. Must not be greater than 31.

allow_reschedule   boolean  optional    

Example: false

allow_direct_cancel   boolean  optional    

Example: true

max_reschedules   integer  optional    

Must be at least 0. Example: 84

reschedule_time_limit   string  optional    

Must be a valid date in the format H:i:s. Example: 19:44:17

reschedule_day_limit   integer  optional    

Must be at least 0. Example: 12

auto_cancel_on_max_reschedules   boolean  optional    

Example: false

negative_result_on_app_cancel   boolean  optional    

Example: true

allow_inspector_reschedule_request   boolean  optional    

Example: false

is_active   boolean  optional    

Example: false

PATCH api/v1/inspection-types/{inspectionType_id}/toggle

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/inspection-types/architecto/toggle" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/inspection-types/architecto/toggle"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "PATCH",
    headers,
}).then(response => response.json());

Request      

PATCH api/v1/inspection-types/{inspectionType_id}/toggle

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inspectionType_id   string     

The ID of the inspectionType. Example: architecto

Log Management

GET api/v1/logs

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/logs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"user_id\": \"architecto\",
    \"entity\": [
        \"architecto\"
    ],
    \"entity_id\": \"architecto\",
    \"action\": \"permission_updated\",
    \"from\": \"2026-02-20T19:44:17\",
    \"to\": \"2052-03-15\",
    \"per_page\": 22,
    \"sort\": \"created_at\",
    \"sort_direction\": \"asc\",
    \"source\": \"advanced\"
}"
const url = new URL(
    "http://localhost/api/v1/logs"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "user_id": "architecto",
    "entity": [
        "architecto"
    ],
    "entity_id": "architecto",
    "action": "permission_updated",
    "from": "2026-02-20T19:44:17",
    "to": "2052-03-15",
    "per_page": 22,
    "sort": "created_at",
    "sort_direction": "asc",
    "source": "advanced"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/logs

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

user_id   string  optional    

Example: architecto

entity   string[]  optional    
Must be one of:
  • acl
  • auth
  • user
  • role
  • permission
  • resource
  • scope
  • inspection
  • reschedule_request
  • group
  • inspection_template
entity_id   string  optional    

Example: architecto

action   string  optional    

Example: permission_updated

Must be one of:
  • get
  • post
  • put
  • patch
  • delete
  • user_created
  • user_updated
  • user_status_toggled
  • user_unlocked
  • role_created
  • role_updated
  • role_assigned
  • role_unassigned
  • role_status_toggled
  • role_permissions_updated
  • permission_created
  • permission_updated
  • permission_assigned
  • permission_unassigned
  • reschedule_request_created
  • reschedule_request_approved
  • reschedule_request_rejected
  • inspection_rescheduled
  • inspection_cancelled_direct
  • inspection_started
  • inspection_finalized
  • inspection_scheduled
  • auto_scheduling_failed
  • group_created
  • group_updated
  • group_assigned
  • group_unassigned
  • group_deleted
  • inspection_template_created
  • inspection_template_updated
  • inspection_template_activated
  • inspection_template_activated_to
  • inspection_template_deactivated
  • inspection_template_cloned
  • inspection_template_cloned_to
from   string  optional    

Must be a valid date. Example: 2026-02-20T19:44:17

to   string  optional    

Must be a valid date. Must be a date after or equal to from. Example: 2052-03-15

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 22

sort   string  optional    

Example: created_at

Must be one of:
  • created_at
  • entity
  • action
sort_direction   string  optional    

Example: asc

Must be one of:
  • asc
  • desc
source   string  optional    

Example: advanced

Must be one of:
  • database
  • advanced

Measurement Unit Management

GET api/v1/measurement-units

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/measurement-units" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"page\": 16,
    \"per_page\": 22,
    \"search\": \"g\",
    \"active_only\": false,
    \"magnitude\": \"z\",
    \"origin\": \"architecto\",
    \"sort_by\": \"created_at\",
    \"sort_order\": \"asc\"
}"
const url = new URL(
    "http://localhost/api/v1/measurement-units"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "page": 16,
    "per_page": 22,
    "search": "g",
    "active_only": false,
    "magnitude": "z",
    "origin": "architecto",
    "sort_by": "created_at",
    "sort_order": "asc"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/measurement-units

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

page   integer  optional    

Must be at least 1. Example: 16

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 22

search   string  optional    

Must not be greater than 100 characters. Example: g

active_only   boolean  optional    

Example: false

magnitude   string  optional    

Must not be greater than 50 characters. Example: z

origin   string  optional    

Example: architecto

Must be one of:
  • system
  • user
sort_by   string  optional    

Example: created_at

Must be one of:
  • name
  • symbol
  • magnitude
  • created_at
sort_order   string  optional    

Example: asc

Must be one of:
  • asc
  • desc

GET api/v1/measurement-units/{unit_id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/measurement-units/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/measurement-units/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/measurement-units/{unit_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

unit_id   string     

The ID of the unit. Example: architecto

POST api/v1/measurement-units

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/measurement-units" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"symbol\": \"ngzmiyvdljnikhwa\",
    \"magnitude\": \"y\"
}"
const url = new URL(
    "http://localhost/api/v1/measurement-units"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "symbol": "ngzmiyvdljnikhwa",
    "magnitude": "y"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/measurement-units

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: b

symbol   string     

Must not be greater than 20 characters. Example: ngzmiyvdljnikhwa

magnitude   string     

Must not be greater than 50 characters. Example: y

PATCH api/v1/measurement-units/{unit_id}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/measurement-units/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"symbol\": \"ngzmiyvdljnikhwa\",
    \"magnitude\": \"y\",
    \"is_active\": true
}"
const url = new URL(
    "http://localhost/api/v1/measurement-units/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "b",
    "symbol": "ngzmiyvdljnikhwa",
    "magnitude": "y",
    "is_active": true
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/v1/measurement-units/{unit_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

unit_id   string     

The ID of the unit. Example: architecto

Body Parameters

name   string  optional    

Must not be greater than 255 characters. Example: b

symbol   string  optional    

Must not be greater than 20 characters. Example: ngzmiyvdljnikhwa

magnitude   string  optional    

Must not be greater than 50 characters. Example: y

is_active   boolean  optional    

Example: true

Notification Management

GET api/v1/notifications

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/notifications" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"category\": \"assignments\",
    \"per_page\": 1
}"
const url = new URL(
    "http://localhost/api/v1/notifications"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "category": "assignments",
    "per_page": 1
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/notifications

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

category   string  optional    

Example: assignments

Must be one of:
  • assignments
  • general
per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 1

POST api/v1/notifications/{notification_id}/read

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/notifications/architecto/read" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/notifications/architecto/read"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/notifications/{notification_id}/read

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

notification_id   string     

The ID of the notification. Example: architecto

POST api/v1/notifications/read-all

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/notifications/read-all" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"category\": \"general\"
}"
const url = new URL(
    "http://localhost/api/v1/notifications/read-all"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "category": "general"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/notifications/read-all

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

category   string  optional    

Example: general

Must be one of:
  • assignments
  • general

User Management

GET api/v1/users/me

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/users/me" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/users/me"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/users/me

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

POST api/v1/users/devices

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/users/devices" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"device_token\": \"b\",
    \"device_type\": \"ios\",
    \"device_name\": \"n\"
}"
const url = new URL(
    "http://localhost/api/v1/users/devices"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "device_token": "b",
    "device_type": "ios",
    "device_name": "n"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/users/devices

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

device_token   string     

Must not be greater than 500 characters. Example: b

device_type   string  optional    

Example: ios

Must be one of:
  • ios
  • android
  • web
device_name   string  optional    

Must not be greater than 255 characters. Example: n

Delete a specific device belonging to the authenticated user.

requires authentication

Example request:
curl --request DELETE \
    "http://localhost/api/v1/users/devices/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/users/devices/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/users/devices/{deviceId}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

deviceId   string     

Example: architecto

GET api/v1/users/sync

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/users/sync" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/users/sync"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/users/sync

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/v1/users

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/users" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"search\": \"b\",
    \"role\": [
        \"architecto\"
    ],
    \"work_zone\": [
        \"architecto\"
    ],
    \"is_active\": true,
    \"tenure\": [
        \"architecto\"
    ],
    \"group_id\": [
        \"a4855dc5-0acb-33c3-b921-f4291f719ca0\"
    ],
    \"sort_by\": \"email\",
    \"sort_order\": \"asc\",
    \"page\": 66,
    \"per_page\": 17
}"
const url = new URL(
    "http://localhost/api/v1/users"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "search": "b",
    "role": [
        "architecto"
    ],
    "work_zone": [
        "architecto"
    ],
    "is_active": true,
    "tenure": [
        "architecto"
    ],
    "group_id": [
        "a4855dc5-0acb-33c3-b921-f4291f719ca0"
    ],
    "sort_by": "email",
    "sort_order": "asc",
    "page": 66,
    "per_page": 17
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

search   string  optional    

Must not be greater than 255 characters. Example: b

role   string[]  optional    
work_zone   string[]  optional    
Must be one of:
  • centro
  • norte
  • sur
  • este
  • oeste
is_active   boolean  optional    

Example: true

tenure   string[]  optional    
Must be one of:
  • junior
  • mid
  • senior
  • lead
group_id   string[]  optional    

Must be a valid UUID. The id of an existing record in the groups table.

sort_by   string  optional    

Example: email

Must be one of:
  • firstName
  • email
  • username
sort_order   string  optional    

Example: asc

Must be one of:
  • asc
  • desc
page   integer  optional    

Must be at least 1. Example: 66

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 17

GET api/v1/users/{id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/users/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/users/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/users/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the user. Example: architecto

GET api/v1/users/{user}/roles

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/users/architecto/roles" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/users/architecto/roles"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/users/{user}/roles

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user   string     

The user. Example: architecto

GET api/v1/users/{user_id}/inspection-dates

requires authentication

Example request:
curl --request GET \
    --get "http://localhost/api/v1/users/16/inspection-dates" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"start_date\": \"2026-02-20T19:44:17\",
    \"end_date\": \"2052-03-15\"
}"
const url = new URL(
    "http://localhost/api/v1/users/16/inspection-dates"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "start_date": "2026-02-20T19:44:17",
    "end_date": "2052-03-15"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Server Error"
}
 

Request      

GET api/v1/users/{user_id}/inspection-dates

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 16

Body Parameters

start_date   string  optional    

This field is required when end_date is present. Must be a valid date. Example: 2026-02-20T19:44:17

end_date   string  optional    

This field is required when start_date is present. Must be a valid date. Must be a date after or equal to start_date. Example: 2052-03-15

POST api/v1/users

requires authentication

Example request:
curl --request POST \
    "http://localhost/api/v1/users" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"gbailey@example.net\",
    \"first_name\": \"m\",
    \"last_name\": \"i\",
    \"dui_number\": \"yvdljnikhwaykcmy\",
    \"username\": \"u\",
    \"password\": \"|]|{+-\",
    \"enabled\": false,
    \"email_verified\": true,
    \"cellphone\": \"vdljnikhwaykcmyu\",
    \"work_zone\": \"architecto\",
    \"tenure\": \"architecto\",
    \"is_active\": true,
    \"role_name\": \"architecto\",
    \"skill_ids\": [
        \"a4855dc5-0acb-33c3-b921-f4291f719ca0\"
    ],
    \"group_ids\": [
        \"c90237e9-ced5-3af6-88ea-84aeaa148878\"
    ]
}"
const url = new URL(
    "http://localhost/api/v1/users"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "gbailey@example.net",
    "first_name": "m",
    "last_name": "i",
    "dui_number": "yvdljnikhwaykcmy",
    "username": "u",
    "password": "|]|{+-",
    "enabled": false,
    "email_verified": true,
    "cellphone": "vdljnikhwaykcmyu",
    "work_zone": "architecto",
    "tenure": "architecto",
    "is_active": true,
    "role_name": "architecto",
    "skill_ids": [
        "a4855dc5-0acb-33c3-b921-f4291f719ca0"
    ],
    "group_ids": [
        "c90237e9-ced5-3af6-88ea-84aeaa148878"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

Must be a valid email address. Example: gbailey@example.net

first_name   string     

Must not be greater than 255 characters. Example: m

last_name   string     

Must not be greater than 255 characters. Example: i

dui_number   string  optional    

Must not be greater than 20 characters. Example: yvdljnikhwaykcmy

username   string  optional    

Must not be greater than 255 characters. Example: u

password   string  optional    

Example: |]|{+-

enabled   boolean  optional    

Example: false

email_verified   boolean  optional    

Example: true

cellphone   string  optional    

Must not be greater than 20 characters. Example: vdljnikhwaykcmyu

work_zone   string  optional    

Example: architecto

Must be one of:
  • centro
  • norte
  • sur
  • este
  • oeste
tenure   string  optional    

Example: architecto

Must be one of:
  • junior
  • mid
  • senior
  • lead
is_active   boolean  optional    

Example: true

role_name   string  optional    

Example: architecto

skill_ids   string[]     

Must be a valid UUID. The id of an existing record in the inspection_skills table.

group_ids   string[]     

Must be a valid UUID. The id of an existing record in the groups table.

PATCH api/v1/users/{id}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost/api/v1/users/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"gbailey@example.net\",
    \"first_name\": \"m\",
    \"last_name\": \"i\",
    \"dui_number\": \"yvdljnikhwaykcmy\",
    \"username\": \"u\",
    \"password\": \"|]|{+-\",
    \"enabled\": true,
    \"email_verified\": true,
    \"cellphone\": \"vdljnikhwaykcmyu\",
    \"work_zone\": \"architecto\",
    \"tenure\": \"architecto\",
    \"is_active\": false,
    \"role_name\": \"architecto\",
    \"skill_ids\": [
        \"a4855dc5-0acb-33c3-b921-f4291f719ca0\"
    ],
    \"group_ids\": [
        \"c90237e9-ced5-3af6-88ea-84aeaa148878\"
    ]
}"
const url = new URL(
    "http://localhost/api/v1/users/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "gbailey@example.net",
    "first_name": "m",
    "last_name": "i",
    "dui_number": "yvdljnikhwaykcmy",
    "username": "u",
    "password": "|]|{+-",
    "enabled": true,
    "email_verified": true,
    "cellphone": "vdljnikhwaykcmyu",
    "work_zone": "architecto",
    "tenure": "architecto",
    "is_active": false,
    "role_name": "architecto",
    "skill_ids": [
        "a4855dc5-0acb-33c3-b921-f4291f719ca0"
    ],
    "group_ids": [
        "c90237e9-ced5-3af6-88ea-84aeaa148878"
    ]
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/v1/users/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the user. Example: architecto

Body Parameters

email   string  optional    

Must be a valid email address. Example: gbailey@example.net

first_name   string  optional    

Must not be greater than 255 characters. Example: m

last_name   string  optional    

Must not be greater than 255 characters. Example: i

dui_number   string  optional    

Must not be greater than 20 characters. Example: yvdljnikhwaykcmy

username   string  optional    

Must not be greater than 255 characters. Example: u

password   string  optional    

Example: |]|{+-

enabled   boolean  optional    

Example: true

email_verified   boolean  optional    

Example: true

cellphone   string  optional    

Must not be greater than 20 characters. Example: vdljnikhwaykcmyu

work_zone   string  optional    

Example: architecto

Must be one of:
  • centro
  • norte
  • sur
  • este
  • oeste
tenure   string  optional    

Example: architecto

Must be one of:
  • junior
  • mid
  • senior
  • lead
is_active   boolean  optional    

Example: false

role_name   string  optional    

Example: architecto

skill_ids   string[]     

Must be a valid UUID. The id of an existing record in the inspection_skills table.

group_ids   string[]     

Must be a valid UUID. The id of an existing record in the groups table.

PUT api/v1/users/{user_id}/inspection-skills/{inspectionSkill_id}

requires authentication

Example request:
curl --request PUT \
    "http://localhost/api/v1/users/16/inspection-skills/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/users/16/inspection-skills/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "PUT",
    headers,
}).then(response => response.json());

Request      

PUT api/v1/users/{user_id}/inspection-skills/{inspectionSkill_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 16

inspectionSkill_id   string     

The ID of the inspectionSkill. Example: architecto

DELETE api/v1/users/{user_id}/inspection-skills/{inspectionSkill_id}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost/api/v1/users/16/inspection-skills/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/users/16/inspection-skills/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/users/{user_id}/inspection-skills/{inspectionSkill_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 16

inspectionSkill_id   string     

The ID of the inspectionSkill. Example: architecto

PUT api/v1/users/{user_oauth_client_id}/groups/{group_id}

requires authentication

Example request:
curl --request PUT \
    "http://localhost/api/v1/users/architecto/groups/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/users/architecto/groups/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "PUT",
    headers,
}).then(response => response.json());

Request      

PUT api/v1/users/{user_oauth_client_id}/groups/{group_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_oauth_client_id   string     

The ID of the user oauth client. Example: architecto

group_id   string     

The ID of the group. Example: architecto

DELETE api/v1/users/{user_oauth_client_id}/groups/{group_id}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost/api/v1/users/architecto/groups/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost/api/v1/users/architecto/groups/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/users/{user_oauth_client_id}/groups/{group_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_oauth_client_id   string     

The ID of the user oauth client. Example: architecto

group_id   string     

The ID of the group. Example: architecto