openapi: 3.0.3 info: title: 'Laravel API Documentation' description: 'API de gestión de usuarios, roles y permisos del sistema.' version: 1.0.0 servers: - url: 'http://localhost' tags: - name: 'Access Control Management' description: '' - name: 'Assignment Engine' description: '' - name: 'Calendar Management' description: '' - name: Endpoints description: '' - name: 'Group Management' description: '' - name: Inspection description: '' - name: 'Inspection Change Reason Management' description: '' - name: 'Inspection Management' description: '' - name: 'Inspection Skill Management' description: '' - name: 'Inspection Template Management' description: '' - name: 'Inspection Type Management' description: '' - name: 'Log Management' description: '' - name: 'Measurement Unit Management' description: '' - name: 'Notification Management' description: '' - name: 'User Management' description: '' components: securitySchemes: default: type: http scheme: bearer description: 'You can retrieve your token by visiting your dashboard and clicking Generate API token.' security: - default: [] paths: /api/v1/roles: get: summary: '' operationId: getApiV1Roles description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Access Control Management' requestBody: required: false content: application/json: schema: type: object properties: search: type: string description: 'Must not be greater than 255 characters.' example: b nullable: true is_active_only: type: boolean description: '' example: false nullable: true sort_by: type: string description: '' example: description enum: - name - description nullable: true sort_order: type: string description: '' example: asc enum: - asc - desc nullable: true page: type: integer description: 'Must be at least 1.' example: 22 nullable: true per_page: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 7 nullable: true post: summary: '' operationId: postApiV1Roles description: '' parameters: [] responses: { } tags: - 'Access Control Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b description: type: string description: 'Must not be greater than 500 characters.' example: 'Et animi quos velit et fugiat.' nullable: true permissions: type: array description: '' example: - architecto items: type: string required: - name /api/v1/roles/permissions: get: summary: '' operationId: getApiV1RolesPermissions description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Access Control Management' '/api/v1/roles/{id}': get: summary: '' operationId: getApiV1RolesId description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Access Control Management' patch: summary: '' operationId: patchApiV1RolesId description: '' parameters: [] responses: { } tags: - 'Access Control Management' requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b description: type: string description: 'Must not be greater than 500 characters.' example: 'Et animi quos velit et fugiat.' nullable: true is_active: type: boolean description: '' example: true nullable: true parameters: - in: path name: id description: 'The ID of the role.' example: architecto required: true schema: type: string '/api/v1/roles/{role}/users': get: summary: '' operationId: getApiV1RolesRoleUsers description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Access Control Management' requestBody: required: false content: application/json: schema: type: object properties: first: type: integer description: 'Must be at least 0.' example: 27 nullable: true max: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 22 nullable: true parameters: - in: path name: role description: 'The role.' example: architecto required: true schema: type: string '/api/v1/roles/{role}/permissions': get: summary: '' operationId: getApiV1RolesRolePermissions description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Access Control Management' put: summary: '' operationId: putApiV1RolesRolePermissions description: '' parameters: [] responses: { } tags: - 'Access Control Management' parameters: - in: path name: role description: 'The role.' example: architecto required: true schema: type: string '/api/v1/roles/users/{user}/role': put: summary: '' operationId: putApiV1RolesUsersUserRole description: '' parameters: [] responses: { } tags: - 'Access Control Management' requestBody: required: true content: application/json: schema: type: object properties: role_name: type: string description: '' example: architecto required: - role_name parameters: - in: path name: user description: 'The user.' example: architecto required: true schema: type: string /api/v1/roles/assign: post: summary: '' operationId: postApiV1RolesAssign description: '' parameters: [] responses: { } tags: - 'Access Control Management' requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'Must be a valid UUID.' example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed role_name: type: string description: '' example: architecto required: - user_id - role_name /api/v1/roles/unassign: post: summary: '' operationId: postApiV1RolesUnassign description: '' parameters: [] responses: { } tags: - 'Access Control Management' requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'Must be a valid UUID.' example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed role_name: type: string description: '' example: architecto required: - user_id - role_name /api/v1/inspections/assignment-engine: get: summary: 'Get assignment engine configuration' operationId: getAssignmentEngineConfiguration description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Assignment Engine' patch: summary: 'Update assignment engine configuration' operationId: updateAssignmentEngineConfiguration description: '' parameters: [] responses: { } tags: - 'Assignment Engine' requestBody: required: false content: application/json: schema: type: object properties: is_active: type: boolean description: '' example: true nullable: true weight_distance: type: number description: 'Must be between 0 and 1.' example: 1 nullable: true weight_workload: type: number description: 'Must be between 0 and 1.' example: 1 nullable: true weight_hours: type: number description: 'Must be between 0 and 1.' example: 0 nullable: true /api/v1/calendar-events/import: post: summary: '' operationId: postApiV1CalendarEventsImport description: '' parameters: [] responses: { } tags: - 'Calendar Management' requestBody: required: true content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: 'Must be a file. Must not be greater than 2048 kilobytes.' required: - file /api/v1/calendar-events: post: summary: '' operationId: postApiV1CalendarEvents description: '' parameters: [] responses: { } tags: - 'Calendar Management' requestBody: required: true content: application/json: schema: type: object properties: start_date: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' end_date: type: string description: 'Must be a valid date. Must be a date after or equal to start_date.' example: '2052-03-15' nullable: true name: type: string description: 'Must not be greater than 255 characters.' example: 'n' description: type: string description: '' example: 'Eius et animi quos velit et.' nullable: true is_blocking: type: boolean description: '' example: false nullable: true frequency: type: object description: '' example: null properties: interval: type: integer description: 'This field is required when frequency is present. Must be at least 1.' example: 16 unit: type: string description: 'This field is required when frequency is present.' example: architecto enum: - days - weeks - months - years day_of_week: type: string description: '' example: architecto enum: - monday - tuesday - wednesday - thursday - friday - saturday - sunday nullable: true repeat_mode: type: string description: '' example: architecto enum: - date - day nullable: true day_of_month: type: integer description: 'Must be at least 1. Must not be greater than 31.' example: 22 nullable: true week: type: string description: '' example: architecto enum: - first - second - third - fourth - fifth - penultimate - last nullable: true month: type: string description: '' example: architecto nullable: true days_of_month: type: array description: 'Must be at least 1. Must not be greater than 31.' example: - 22 items: type: integer nullable: true required: - start_date - name get: summary: '' operationId: getApiV1CalendarEvents description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Calendar Management' requestBody: required: false content: application/json: schema: type: object properties: search: type: string description: 'Must not be greater than 100 characters.' example: b nullable: true start_date: type: string description: 'This field is required when end_date is present. Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true end_date: type: string description: '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' nullable: true '/api/v1/calendar-events/{calendarEvent_id}': get: summary: '' operationId: getApiV1CalendarEventsCalendarEvent_id description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Calendar Management' patch: summary: '' operationId: patchApiV1CalendarEventsCalendarEvent_id description: '' parameters: [] responses: { } tags: - 'Calendar Management' requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b description: type: string description: '' example: 'Eius et animi quos velit et.' nullable: true start_date: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true end_date: type: string description: 'Must be a valid date. Must be a date after or equal to start_date.' example: '2052-03-15' nullable: true is_blocking: type: boolean description: '' example: false nullable: true frequency: type: object description: '' example: null properties: interval: type: integer description: 'This field is required when frequency is present. Must be at least 1.' example: 22 unit: type: string description: 'This field is required when frequency is present.' example: architecto enum: - days - weeks - months - years day_of_week: type: string description: '' example: architecto enum: - monday - tuesday - wednesday - thursday - friday - saturday - sunday nullable: true repeat_mode: type: string description: '' example: architecto enum: - date - day nullable: true day_of_month: type: integer description: 'Must be at least 1. Must not be greater than 31.' example: 22 nullable: true week: type: string description: '' example: architecto enum: - first - second - third - fourth - fifth - penultimate - last nullable: true month: type: string description: '' example: architecto nullable: true days_of_month: type: array description: 'Must be at least 1. Must not be greater than 31.' example: - 22 items: type: integer nullable: true delete: summary: '' operationId: deleteApiV1CalendarEventsCalendarEvent_id description: '' parameters: [] responses: { } tags: - 'Calendar Management' parameters: - in: path name: calendarEvent_id description: 'The ID of the calendarEvent.' example: architecto required: true schema: type: string /api/v1/business-days: get: summary: 'Get business days configuration' operationId: getBusinessDaysConfiguration description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Calendar Management' patch: summary: 'Update business days configuration' operationId: updateBusinessDaysConfiguration description: '' parameters: [] responses: { } tags: - 'Calendar Management' requestBody: required: false content: application/json: schema: type: object properties: monday: type: boolean description: '' example: false nullable: true tuesday: type: boolean description: '' example: true nullable: true wednesday: type: boolean description: '' example: true nullable: true thursday: type: boolean description: '' example: true nullable: true friday: type: boolean description: '' example: false nullable: true saturday: type: boolean description: '' example: false nullable: true sunday: type: boolean description: '' example: false nullable: true /api/v1/health: get: summary: '' operationId: getApiV1Health description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: success: true message: 'API is healthy' timestamp: '2026-02-20T19:44:16+00:00' properties: success: type: boolean example: true message: type: string example: 'API is healthy' timestamp: type: string example: '2026-02-20T19:44:16+00:00' tags: - Endpoints /api/v1/groups: get: summary: '' operationId: getApiV1Groups description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Group Management' requestBody: required: false content: application/json: schema: type: object properties: search: type: string description: 'Must be at least 3 characters.' example: bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnnoqitpxn nullable: true per_page: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 23 nullable: true page: type: integer description: 'Must be at least 1.' example: 80 nullable: true sort_by: type: string description: '' example: created_at enum: - name - created_at nullable: true sort_order: type: string description: '' example: asc enum: - asc - desc nullable: true post: summary: '' operationId: postApiV1Groups description: '' parameters: [] responses: { } tags: - 'Group Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b description: type: string description: 'Must not be greater than 1000 characters.' example: 'Et animi quos velit et fugiat.' nullable: true user_ids: type: array description: 'Must be a valid UUID. The oauth_client_id of an existing record in the users table.' example: - 5707ca55-f609-3528-be8b-1baeaee1567e items: type: string required: - name '/api/v1/groups/{id}': get: summary: '' operationId: getApiV1GroupsId description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: success: false message: 'Not found' errors: null properties: success: type: boolean example: false message: type: string example: 'Not found' errors: type: string example: null nullable: true tags: - 'Group Management' put: summary: '' operationId: putApiV1GroupsId description: '' parameters: [] responses: { } tags: - 'Group Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b description: type: string description: 'Must not be greater than 1000 characters.' example: 'Et animi quos velit et fugiat.' nullable: true status: type: string description: '' example: active enum: - active - inactive required: - name - status delete: summary: '' operationId: deleteApiV1GroupsId description: '' parameters: [] responses: { } tags: - 'Group Management' parameters: - in: path name: id description: 'The ID of the group.' example: architecto required: true schema: type: string '/api/v1/inspections/{inspection_id}/start': post: summary: '' operationId: postApiV1InspectionsInspection_idStart description: '' parameters: [] responses: { } tags: - Inspection requestBody: required: true content: application/json: schema: type: object properties: latitude: type: number description: 'Must be between -90 and 90.' example: -89 longitude: type: number description: 'Must be between -180 and 180.' example: -179 required: - latitude - longitude parameters: - in: path name: inspection_id description: 'The ID of the inspection.' example: architecto required: true schema: type: string '/api/v1/inspections/{inspection_id}/finalize': post: summary: '' operationId: postApiV1InspectionsInspection_idFinalize description: '' parameters: [] responses: { } tags: - Inspection requestBody: required: true content: multipart/form-data: schema: type: object properties: finalize_location: type: object description: '' example: [] properties: latitude: type: number description: 'Must be between -90 and 90.' example: -89 longitude: type: number description: 'Must be between -180 and 180.' example: -179 required: - latitude - longitude start_location: type: object description: '' example: null properties: latitude: type: number description: 'This field is required when start_location is present. Must be between -90 and 90.' example: -90 longitude: type: number description: 'This field is required when start_location is present. Must be between -180 and 180.' example: -179 answers: type: array description: 'Must have at least 1 items.' example: - [] items: type: object properties: template_id: type: string description: 'Must be a valid UUID. The id of an existing record in the inspection_templates table.' example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed answers: type: array description: 'Must have at least 1 items.' example: - [] items: type: object properties: item_id: type: string description: '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: type: string description: '' example: architecto comment: type: string description: 'Must not be greater than 1000 characters.' example: 'n' nullable: true latitude: type: number description: 'Must be between -90 and 90.' example: -90 nullable: true longitude: type: number description: 'Must be between -180 and 180.' example: -179 nullable: true evidence_files: type: array description: 'Must be a file. Must not be greater than 10240 kilobytes.' items: type: string format: binary answered_at: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true required: - item_id - answer_value required: - template_id - answers signatures: type: array description: 'Must have at least 1 items.' example: - [] items: type: object properties: signer_type: type: string description: '' example: inspector enum: - regulated - inspector signer_name: type: string description: 'Must not be greater than 255 characters.' example: m signer_document: type: string description: 'Must not be greater than 20 characters.' example: iyvdljnikhwaykcm nullable: true signer_role: type: string description: 'Must not be greater than 100 characters.' example: 'y' nullable: true signature_image: type: string format: binary description: 'Must be a file. Must not be greater than 5120 kilobytes.' dui_image: type: string format: binary description: 'Must be a file. Must not be greater than 5120 kilobytes.' nullable: true latitude: type: number description: 'Must be between -90 and 90.' example: -90 longitude: type: number description: 'Must be between -180 and 180.' example: -180 required: - signer_type - signer_name - signature_image - latitude - longitude authorized_signers: type: object description: '' example: null properties: { } nullable: true findings: type: array description: '' example: null items: type: object nullable: true properties: title: type: string description: 'Must not be greater than 255 characters.' example: p description: type: string description: 'Must not be greater than 1000 characters.' example: 'Qui commodi incidunt iure odit.' nullable: true severity: type: string description: '' example: moderate enum: - critical - moderate - minor category: type: string description: 'Must not be greater than 100 characters.' example: s nullable: true status: type: string description: 'Must not be greater than 50 characters.' example: i nullable: true inspection_template_item_id: type: string description: 'Must be a valid UUID. The id of an existing record in the inspection_template_items table.' example: 665a39c0-48af-31f1-a546-aa4f41372488 nullable: true section_title: type: string description: 'Must not be greater than 255 characters.' example: p nullable: true latitude: type: number description: 'Must be between -90 and 90.' example: -90 nullable: true longitude: type: number description: 'Must be between -180 and 180.' example: -180 nullable: true recommendations: type: array description: 'Must not be greater than 500 characters.' example: - q items: type: string evidence_files: type: array description: 'Must be a file. Must not be greater than 10240 kilobytes.' items: type: string format: binary required: - title - severity required: - finalize_location - answers - signatures parameters: - in: path name: inspection_id description: 'The ID of the inspection.' example: architecto required: true schema: type: string /api/v1/inspection-change-reasons: get: summary: '' operationId: getApiV1InspectionChangeReasons description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Inspection Change Reason Management' requestBody: required: false content: application/json: schema: type: object properties: page: type: integer description: 'Must be at least 1.' example: 16 nullable: true per_page: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 22 nullable: true search: type: string description: 'Must not be greater than 100 characters.' example: g nullable: true active_only: type: boolean description: '' example: false nullable: true sort_by: type: string description: '' example: created_at enum: - name - created_at nullable: true sort_order: type: string description: '' example: desc enum: - asc - desc nullable: true post: summary: '' operationId: postApiV1InspectionChangeReasons description: '' parameters: [] responses: { } tags: - 'Inspection Change Reason Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b required: - name '/api/v1/inspection-change-reasons/{reason_id}': get: summary: '' operationId: getApiV1InspectionChangeReasonsReason_id description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Inspection Change Reason Management' patch: summary: '' operationId: patchApiV1InspectionChangeReasonsReason_id description: '' parameters: [] responses: { } tags: - 'Inspection Change Reason Management' requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b is_active: type: boolean description: '' example: true nullable: true delete: summary: '' operationId: deleteApiV1InspectionChangeReasonsReason_id description: '' parameters: [] responses: { } tags: - 'Inspection Change Reason Management' parameters: - in: path name: reason_id description: 'The ID of the reason.' example: architecto required: true schema: type: string /api/v1/inspections: get: summary: '' operationId: getApiV1Inspections description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Inspection Management' requestBody: required: true content: application/json: schema: type: object properties: search: type: string description: 'Must be at least 3 characters.' example: bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnnoqitpxn nullable: true status: type: string description: '' example: architecto enum: - pending - pending_manual_assignment - scheduled - in_progress - completed - cancelled nullable: true statuses: type: array description: '' example: - architecto items: type: string enum: - pending - pending_manual_assignment - scheduled - in_progress - completed - cancelled zones: type: array description: '' example: - architecto items: type: string enum: - centro - norte - sur - este - oeste inspection_type_ids: type: array description: 'Must be a valid UUID. The id of an existing record in the inspection_types table.' example: - a4855dc5-0acb-33c3-b921-f4291f719ca0 items: type: string from_date: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true to_date: type: string description: 'Must be a valid date. Must be a date after or equal to from_date.' example: '2052-03-15' nullable: true inspector_id: type: integer description: 'The id of an existing record in the users table.' example: 16 nullable: true per_page: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 22 nullable: true page: type: integer description: 'Must be at least 1.' example: 67 nullable: true sort_by: type: string description: '' example: establishment_name enum: - establishment_name nullable: true sort_order: type: string description: '' example: asc enum: - asc - desc nullable: true required: - statuses - zones - inspection_type_ids post: summary: '' operationId: postApiV1Inspections description: '' parameters: [] responses: { } tags: - 'Inspection Management' requestBody: required: true content: application/json: schema: type: object properties: procedure_id: type: string description: 'Must not be greater than 255 characters.' example: b inspection_type_ids: type: array description: 'Must be a valid UUID. The id of an existing record in the inspection_types table.' example: - a4855dc5-0acb-33c3-b921-f4291f719ca0 items: type: string inspection_template_ids: type: array description: 'Must be a valid UUID.' example: - c90237e9-ced5-3af6-88ea-84aeaa148878 items: type: string assigned_inspectors: type: array description: '' example: null items: type: object nullable: true properties: inspector_id: type: integer description: 'The id of an existing record in the users table.' example: 16 role: type: string description: '' example: architecto enum: - principal - assistant required: - inspector_id - role establishment_name: type: string description: 'Must not be greater than 255 characters.' example: i nullable: true establishment_phone: type: string description: 'Must not be greater than 20 characters.' example: yvdljnikhwaykcmy nullable: true associated_checklist_id: type: string description: 'Must not be greater than 255 characters.' example: u nullable: true associated_checklist_name: type: string description: 'Must not be greater than 255 characters.' example: w nullable: true checklist_questions_count: type: integer description: 'Must be at least 0.' example: 67 nullable: true previous_score: type: number description: 'Must be between 0 and 100.' example: 0 nullable: true estimated_duration_minutes: type: integer description: 'Must be at least 1.' example: 32 nullable: true required_inspectors_count: type: integer description: 'Must be at least 1. Must not be greater than 10.' example: 10 nullable: true procedure_submission_status: type: string description: 'Must not be greater than 50 characters.' example: q nullable: true status: type: string description: '' example: architecto enum: - pending - pending_manual_assignment - scheduled - in_progress - completed - cancelled nullable: true zone: type: string description: '' example: architecto enum: - centro - norte - sur - este - oeste nullable: true occurrences: type: integer description: 'Must be at least 1. Must not be greater than 365.' example: 22 nullable: true location: type: object description: '' example: null properties: latitude: type: number description: 'Must be between -90 and 90.' example: -90 nullable: true longitude: type: number description: 'Must be between -180 and 180.' example: -179 nullable: true address: type: string description: 'Must not be greater than 500 characters.' example: m nullable: true nullable: true instructions: type: string description: '' example: architecto nullable: true procedure_data: type: object description: '' example: null properties: request_id: type: string description: 'Must be a valid UUID.' example: a4855dc5-0acb-33c3-b921-f4291f719ca0 nullable: true procedure_number: type: string description: 'Must not be greater than 50 characters.' example: z nullable: true procedure_status: type: string description: 'Must not be greater than 50 characters.' example: m nullable: true regulated_entity: type: string description: 'Must not be greater than 255 characters.' example: i nullable: true responsible_person: type: string description: 'Must not be greater than 255 characters.' example: 'y' nullable: true responsible_phone: type: string description: 'Must not be greater than 20 characters.' example: vdljnikhwaykcmyu nullable: true responsible_email: type: string description: 'Must be a valid email address. Must not be greater than 255 characters.' example: hirthe.theo@example.com nullable: true form_id: type: string description: 'Must be a valid UUID.' example: deea2dce-ea5d-340f-90ce-c06cddd4c879 nullable: true form_name: type: string description: 'Must not be greater than 255 characters.' example: r nullable: true submission_date: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true form_status: type: string description: 'Must not be greater than 50 characters.' example: s nullable: true forms: type: object description: '' example: null properties: { } nullable: true comments: type: array description: '' example: - architecto items: type: string observations: type: array description: '' example: null items: type: object nullable: true properties: id: type: string description: 'This field is required when procedure_data.observations is present. Must be a valid UUID.' example: a4855dc5-0acb-33c3-b921-f4291f719ca0 comment: type: string description: 'This field is required when procedure_data.observations is present.' example: architecto author: type: string description: 'This field is required when procedure_data.observations is present. Must not be greater than 255 characters.' example: 'n' created_at: type: string description: 'This field is required when procedure_data.observations is present. Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true checklists: type: array description: '' example: null items: type: object nullable: true properties: id: type: string description: 'This field is required when checklists is present. Must be a valid UUID.' example: 6b72fe4a-5b40-307c-bc24-f79acf9a1bb9 name: type: string description: 'This field is required when checklists is present. Must not be greater than 255 characters.' example: m items: type: array description: 'This field is required when checklists is present.' example: null items: type: object properties: id: type: string description: 'This field is required when checklists.*.items is present. Must be a valid UUID.' example: a1a0a47d-e8c3-3cf0-8e6e-c1ff9dca5d1f description: type: string description: 'This field is required when checklists.*.items is present.' example: 'Eius et animi quos velit et.' completed: type: boolean description: 'This field is required when checklists.*.items is present.' example: true authorized_inspectors: type: array description: '' example: null items: type: object nullable: true properties: name: type: string description: 'This field is required when authorized_inspectors is present. Must not be greater than 255 characters.' example: v dui: type: string description: 'This field is required when authorized_inspectors is present. Must not be greater than 20 characters.' example: dljnikhwaykcmyuw image: type: string description: 'Must be a valid URL. Must not be greater than 500 characters.' example: p nullable: true phone: type: string description: 'Must not be greater than 20 characters.' example: wlvqwrsitcpscqld nullable: true role: type: string description: '' example: architecto enum: - tramitante - tramitante_suplente - otro_tramitante - adicional nullable: true notes: type: array description: '' example: null items: type: object nullable: true properties: note: type: string description: 'This field is required when notes is present.' example: architecto source: type: string description: 'This field is required when notes is present. Must not be greater than 50 characters.' example: 'n' enum: - previous_inspection - manual findings: type: array description: '' example: null items: type: object nullable: true properties: title: type: string description: 'This field is required when findings is present. Must not be greater than 255 characters.' example: g description: type: string description: '' example: 'Eius et animi quos velit et.' nullable: true severity: type: string description: 'This field is required when findings is present.' example: moderate enum: - critical - moderate - minor category: type: string description: 'Must not be greater than 100 characters.' example: v nullable: true status: type: string description: 'This field is required when findings is present. Must not be greater than 50 characters.' example: d resolved_at: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true photos: type: array description: 'Must be a valid URL. Must not be greater than 500 characters.' example: - l items: type: string recommendations: type: array description: '' example: - architecto items: type: string comments: type: array description: '' example: null items: type: object nullable: true properties: comment: type: string description: 'This field is required when comments is present.' example: architecto inspector_id: type: integer description: 'This field is required when comments is present. The id of an existing record in the users table.' example: 16 non_working_days: type: array description: 'Must be a valid date. Must be a valid date in the format Y-m-d.' example: - '2026-02-20' items: type: string metadata: type: object description: '' example: null properties: { } nullable: true report_file: type: object description: '' example: null properties: status: type: string description: 'This field is required when report_file is present. Must not be greater than 50 characters.' example: 'n' generated_at: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true url: type: string description: 'Must be a valid URL. Must not be greater than 500 characters.' example: 'http://crooks.biz/et-fugiat-sunt-nihil-accusantium' nullable: true file_size: type: integer description: 'Must be at least 0.' example: 52 nullable: true generation_error: type: string description: '' example: architecto nullable: true nullable: true scheduled_at: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true required: - procedure_id - inspection_type_ids - inspection_template_ids '/api/v1/inspections/{id}': get: summary: '' operationId: getApiV1InspectionsId description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: success: false message: 'Not found' errors: null properties: success: type: boolean example: false message: type: string example: 'Not found' errors: type: string example: null nullable: true tags: - 'Inspection Management' patch: summary: '' operationId: patchApiV1InspectionsId description: '' parameters: [] responses: { } tags: - 'Inspection Management' requestBody: required: true content: application/json: schema: type: object properties: procedure_id: type: string description: 'Must not be greater than 255 characters.' example: b inspection_type_ids: type: array description: 'Must be a valid UUID. The id of an existing record in the inspection_types table.' example: - a4855dc5-0acb-33c3-b921-f4291f719ca0 items: type: string inspection_template_ids: type: array description: 'Must be a valid UUID.' example: - c90237e9-ced5-3af6-88ea-84aeaa148878 items: type: string assigned_inspectors: type: array description: '' example: null items: type: object nullable: true properties: inspector_id: type: integer description: 'The id of an existing record in the users table.' example: 16 role: type: string description: '' example: architecto enum: - principal - assistant required: - inspector_id - role establishment_name: type: string description: 'Must not be greater than 255 characters.' example: i establishment_phone: type: string description: 'Must not be greater than 20 characters.' example: yvdljnikhwaykcmy associated_checklist_id: type: string description: 'Must not be greater than 255 characters.' example: u associated_checklist_name: type: string description: 'Must not be greater than 255 characters.' example: w checklist_questions_count: type: integer description: 'Must be at least 0.' example: 67 previous_score: type: number description: 'Must be between 0 and 100.' example: 0 estimated_duration_minutes: type: integer description: 'Must be at least 1.' example: 32 required_inspectors_count: type: integer description: 'Must be at least 1. Must not be greater than 10.' example: 10 procedure_submission_status: type: string description: 'Must not be greater than 50 characters.' example: q status: type: string description: '' example: architecto enum: - pending - pending_manual_assignment - scheduled - in_progress - completed - cancelled zone: type: string description: '' example: architecto enum: - centro - norte - sur - este - oeste occurrences: type: integer description: 'Must be at least 1. Must not be greater than 365.' example: 22 nullable: true location: type: object description: '' example: null properties: latitude: type: number description: 'Must be between -90 and 90.' example: -90 nullable: true longitude: type: number description: 'Must be between -180 and 180.' example: -179 nullable: true address: type: string description: 'Must not be greater than 500 characters.' example: m nullable: true nullable: true instructions: type: string description: '' example: architecto nullable: true procedure_data: type: object description: '' example: null properties: request_id: type: string description: 'Must be a valid UUID.' example: a4855dc5-0acb-33c3-b921-f4291f719ca0 nullable: true procedure_number: type: string description: 'Must not be greater than 50 characters.' example: z nullable: true procedure_status: type: string description: 'Must not be greater than 50 characters.' example: m nullable: true regulated_entity: type: string description: 'Must not be greater than 255 characters.' example: i nullable: true responsible_person: type: string description: 'Must not be greater than 255 characters.' example: 'y' nullable: true responsible_phone: type: string description: 'Must not be greater than 20 characters.' example: vdljnikhwaykcmyu nullable: true responsible_email: type: string description: 'Must be a valid email address. Must not be greater than 255 characters.' example: hirthe.theo@example.com nullable: true form_id: type: string description: 'Must be a valid UUID.' example: deea2dce-ea5d-340f-90ce-c06cddd4c879 nullable: true form_name: type: string description: 'Must not be greater than 255 characters.' example: r nullable: true submission_date: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true form_status: type: string description: 'Must not be greater than 50 characters.' example: s nullable: true forms: type: object description: '' example: null properties: { } nullable: true comments: type: array description: '' example: - architecto items: type: string observations: type: array description: '' example: null items: type: object nullable: true properties: id: type: string description: 'This field is required when procedure_data.observations is present. Must be a valid UUID.' example: a4855dc5-0acb-33c3-b921-f4291f719ca0 comment: type: string description: 'This field is required when procedure_data.observations is present.' example: architecto author: type: string description: 'This field is required when procedure_data.observations is present. Must not be greater than 255 characters.' example: 'n' created_at: type: string description: 'This field is required when procedure_data.observations is present. Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true checklists: type: array description: '' example: null items: type: object nullable: true properties: id: type: string description: 'This field is required when checklists is present. Must be a valid UUID.' example: 6b72fe4a-5b40-307c-bc24-f79acf9a1bb9 name: type: string description: 'This field is required when checklists is present. Must not be greater than 255 characters.' example: m items: type: array description: 'This field is required when checklists is present.' example: null items: type: object properties: id: type: string description: 'This field is required when checklists.*.items is present. Must be a valid UUID.' example: a1a0a47d-e8c3-3cf0-8e6e-c1ff9dca5d1f description: type: string description: 'This field is required when checklists.*.items is present.' example: 'Eius et animi quos velit et.' completed: type: boolean description: 'This field is required when checklists.*.items is present.' example: false authorized_inspectors: type: array description: '' example: null items: type: object nullable: true properties: name: type: string description: 'This field is required when authorized_inspectors is present. Must not be greater than 255 characters.' example: v dui: type: string description: 'This field is required when authorized_inspectors is present. Must not be greater than 20 characters.' example: dljnikhwaykcmyuw image: type: string description: 'Must be a valid URL. Must not be greater than 500 characters.' example: p nullable: true phone: type: string description: 'Must not be greater than 20 characters.' example: wlvqwrsitcpscqld nullable: true role: type: string description: '' example: architecto enum: - tramitante - tramitante_suplente - otro_tramitante - adicional nullable: true notes: type: array description: '' example: null items: type: object nullable: true properties: note: type: string description: 'This field is required when notes is present.' example: architecto source: type: string description: 'This field is required when notes is present. Must not be greater than 50 characters.' example: 'n' enum: - previous_inspection - manual findings: type: array description: '' example: null items: type: object nullable: true properties: title: type: string description: 'This field is required when findings is present. Must not be greater than 255 characters.' example: g description: type: string description: '' example: 'Eius et animi quos velit et.' nullable: true severity: type: string description: 'This field is required when findings is present.' example: minor enum: - critical - moderate - minor category: type: string description: 'Must not be greater than 100 characters.' example: v nullable: true status: type: string description: 'This field is required when findings is present. Must not be greater than 50 characters.' example: d resolved_at: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true photos: type: array description: 'Must be a valid URL. Must not be greater than 500 characters.' example: - l items: type: string recommendations: type: array description: '' example: - architecto items: type: string comments: type: array description: '' example: null items: type: object nullable: true properties: comment: type: string description: 'This field is required when comments is present.' example: architecto inspector_id: type: integer description: 'This field is required when comments is present. The id of an existing record in the users table.' example: 16 non_working_days: type: array description: 'Must be a valid date. Must be a valid date in the format Y-m-d.' example: - '2026-02-20' items: type: string metadata: type: object description: '' example: null properties: { } nullable: true report_file: type: object description: '' example: null properties: status: type: string description: 'This field is required when report_file is present. Must not be greater than 50 characters.' example: 'n' generated_at: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true url: type: string description: 'Must be a valid URL. Must not be greater than 500 characters.' example: 'http://crooks.biz/et-fugiat-sunt-nihil-accusantium' nullable: true file_size: type: integer description: 'Must be at least 0.' example: 52 nullable: true generation_error: type: string description: '' example: architecto nullable: true nullable: true scheduled_at: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true started_at: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true completed_at: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true required: - inspection_type_ids - inspection_template_ids delete: summary: '' operationId: deleteApiV1InspectionsId description: '' parameters: [] responses: { } tags: - 'Inspection Management' parameters: - in: path name: id description: 'The ID of the inspection.' example: architecto required: true schema: type: string '/api/v1/inspections/{inspection_id}/reschedule': post: summary: '' operationId: postApiV1InspectionsInspection_idReschedule description: '' parameters: [] responses: { } tags: - 'Inspection Management' requestBody: required: false content: application/json: schema: type: object properties: inspector_ids: type: array description: 'The id of an existing record in the users table.' example: - 16 items: type: integer comment: type: string description: '' example: architecto nullable: true parameters: - in: path name: inspection_id description: 'The ID of the inspection.' example: architecto required: true schema: type: string '/api/v1/inspections/{inspection_id}/cancel': post: summary: '' operationId: postApiV1InspectionsInspection_idCancel description: '' parameters: [] responses: { } tags: - 'Inspection Management' requestBody: required: true content: application/json: schema: type: object properties: reason_id: type: string description: 'Must be a valid UUID. The id of an existing record in the inspection_change_reasons table.' example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed comment: type: string description: '' example: architecto nullable: true source: type: string description: '' example: app enum: - app - backoffice required: - reason_id - source parameters: - in: path name: inspection_id description: 'The ID of the inspection.' example: architecto required: true schema: type: string '/api/v1/inspections/{inspection_id}/reschedule-requests': post: summary: '' operationId: postApiV1InspectionsInspection_idRescheduleRequests description: '' parameters: [] responses: { } tags: - 'Inspection Management' requestBody: required: true content: application/json: schema: type: object properties: type: type: string description: '' example: reschedule enum: - reschedule - cancellation reason_id: type: string description: 'Must be a valid UUID. The id of an existing record in the inspection_change_reasons table.' example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed comment: type: string description: 'Must not be greater than 1000 characters.' example: g nullable: true required: - type - reason_id parameters: - in: path name: inspection_id description: 'The ID of the inspection.' example: architecto required: true schema: type: string '/api/v1/inspections/reschedule-requests/{rescheduleRequest_id}/process': post: summary: '' operationId: postApiV1InspectionsRescheduleRequestsRescheduleRequest_idProcess description: '' parameters: [] responses: { } tags: - 'Inspection Management' requestBody: required: true content: application/json: schema: type: object properties: status: type: string description: '' example: pending_approval enum: - pending_approval - approved - rejected resolution_comment: type: string description: 'Must not be greater than 1000 characters.' example: b nullable: true required: - status parameters: - in: path name: rescheduleRequest_id description: 'The ID of the rescheduleRequest.' example: architecto required: true schema: type: string /api/v1/inspection-skills: get: summary: '' operationId: getApiV1InspectionSkills description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Inspection Skill Management' requestBody: required: false content: application/json: schema: type: object properties: page: type: integer description: 'Must be at least 1.' example: 16 nullable: true per_page: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 22 nullable: true search: type: string description: 'Must not be greater than 100 characters.' example: g nullable: true active_only: type: boolean description: '' example: false nullable: true sort_by: type: string description: '' example: inspectors_count enum: - name - created_at - inspectors_count nullable: true sort_order: type: string description: '' example: asc enum: - asc - desc nullable: true post: summary: '' operationId: postApiV1InspectionSkills description: '' parameters: [] responses: { } tags: - 'Inspection Skill Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b description: type: string description: 'Must not be greater than 1000 characters.' example: 'Et animi quos velit et fugiat.' nullable: true user_ids: type: array description: 'The id of an existing record in the users table.' example: null items: type: string required: - name '/api/v1/inspection-skills/{skill_id}': get: summary: '' operationId: getApiV1InspectionSkillsSkill_id description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Inspection Skill Management' patch: summary: '' operationId: patchApiV1InspectionSkillsSkill_id description: '' parameters: [] responses: { } tags: - 'Inspection Skill Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b description: type: string description: 'Must not be greater than 1000 characters.' example: 'Et animi quos velit et fugiat.' nullable: true required: - name delete: summary: '' operationId: deleteApiV1InspectionSkillsSkill_id description: '' parameters: [] responses: { } tags: - 'Inspection Skill Management' parameters: - in: path name: skill_id description: 'The ID of the skill.' example: architecto required: true schema: type: string '/api/v1/inspection-skills/{skill_id}/users': get: summary: '' operationId: getApiV1InspectionSkillsSkill_idUsers description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Inspection Skill Management' requestBody: required: false content: application/json: schema: type: object properties: page: type: integer description: 'Must be at least 1.' example: 16 nullable: true per_page: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 22 nullable: true search: type: string description: 'Must not be greater than 255 characters.' example: g nullable: true parameters: - in: path name: skill_id description: 'The ID of the skill.' example: architecto required: true schema: type: string '/api/v1/inspection-skills/{skill_id}/toggle': patch: summary: '' operationId: patchApiV1InspectionSkillsSkill_idToggle description: '' parameters: [] responses: { } tags: - 'Inspection Skill Management' parameters: - in: path name: skill_id description: 'The ID of the skill.' example: architecto required: true schema: type: string /api/v1/inspection-templates: get: summary: '' operationId: getApiV1InspectionTemplates description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Inspection Template Management' requestBody: required: false content: application/json: schema: type: object properties: search: type: string description: 'Must not be greater than 100 characters.' example: b nullable: true status: type: object description: '' example: null properties: { } nullable: true from_date: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:18' nullable: true to_date: type: string description: 'Must be a valid date. Must be a date after or equal to from_date.' example: '2052-03-15' nullable: true sort_by: type: string description: '' example: created_at enum: - name - created_at - estimated_duration_minutes nullable: true sort_order: type: string description: '' example: asc enum: - asc - desc nullable: true per_page: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 22 nullable: true page: type: integer description: 'Must be at least 1.' example: 67 nullable: true post: summary: '' operationId: postApiV1InspectionTemplates description: '' parameters: [] responses: { } tags: - 'Inspection Template Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b description: type: string description: '' example: 'Eius et animi quos velit et.' nullable: true approval_threshold: type: integer description: 'Must be at least 0. Must not be greater than 100.' example: 1 nullable: true inspection_type_ids: type: array description: 'Must be a valid UUID. The id of an existing record in the inspection_types table.' example: - 5707ca55-f609-3528-be8b-1baeaee1567e items: type: string estimated_duration_minutes: type: integer description: 'Must be at least 1. Must not be greater than 1440.' example: 19 nullable: true required_skill_ids: type: array description: '' example: - architecto items: type: string associated_procedure_ids: type: array description: 'Must not be greater than 255 characters.' example: - 'n' items: type: string allowed_hours: type: object description: '' example: null properties: { } nullable: true member_level_config: type: object description: '' example: null properties: { } nullable: true steps: type: array description: 'Must have at least 1 items.' example: - [] items: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b description: type: string description: '' example: 'Eius et animi quos velit et.' nullable: true position: type: integer description: 'Must be at least 0.' example: 60 sections: type: array description: 'Must have at least 1 items.' example: - [] items: type: object properties: title: type: string description: 'Must not be greater than 255 characters.' example: b description: type: string description: '' example: 'Eius et animi quos velit et.' nullable: true position: type: integer description: 'Must be at least 0.' example: 60 items: type: array description: 'Must have at least 1 items.' example: - [] items: type: object properties: type: type: string description: '' example: compliance enum: - compliance - measurement - text - file label: type: string description: 'Must not be greater than 500 characters.' example: b description: type: string description: '' example: 'Eius et animi quos velit et.' nullable: true is_mandatory: type: boolean description: '' example: true nullable: true requires_evidence: type: boolean description: '' example: true nullable: true allows_comments: type: boolean description: '' example: true nullable: true criticality: type: string description: '' example: moderate enum: - none - mild - moderate - critical nullable: true weight: type: number description: 'Must be at least 0.' example: 60 nullable: true position: type: integer description: 'Must be at least 0.' example: 42 metadata: type: object description: '' example: null properties: { } nullable: true required: - type - label - position required: - title - position - items required: - name - position - sections required: - name - inspection_type_ids - steps '/api/v1/inspection-templates/{group_uuid}': get: summary: '' operationId: getApiV1InspectionTemplatesGroup_uuid description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Inspection Template Management' parameters: - in: path name: group_uuid description: '' example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc required: true schema: type: string '/api/v1/inspection-templates/{group_uuid}/versions': get: summary: '' operationId: getApiV1InspectionTemplatesGroup_uuidVersions description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Inspection Template Management' parameters: - in: path name: group_uuid description: '' example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc required: true schema: type: string '/api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}': get: summary: '' operationId: getApiV1InspectionTemplatesGroup_uuidVersionsInspectionTemplate_id description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: success: false message: 'Not found' errors: null properties: success: type: boolean example: false message: type: string example: 'Not found' errors: type: string example: null nullable: true tags: - 'Inspection Template Management' patch: summary: '' operationId: patchApiV1InspectionTemplatesGroup_uuidVersionsInspectionTemplate_id description: '' parameters: [] responses: { } tags: - 'Inspection Template Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b description: type: string description: '' example: 'Eius et animi quos velit et.' nullable: true approval_threshold: type: integer description: 'Must be at least 0. Must not be greater than 100.' example: 1 nullable: true inspection_type_ids: type: array description: 'Must be a valid UUID. The id of an existing record in the inspection_types table.' example: - 5707ca55-f609-3528-be8b-1baeaee1567e items: type: string estimated_duration_minutes: type: integer description: 'Must be at least 1. Must not be greater than 1440.' example: 19 nullable: true required_skill_ids: type: array description: '' example: - architecto items: type: string associated_procedure_ids: type: array description: 'Must not be greater than 255 characters.' example: - 'n' items: type: string allowed_hours: type: object description: '' example: null properties: { } nullable: true member_level_config: type: object description: '' example: null properties: { } nullable: true steps: type: array description: '' example: null items: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: g description: type: string description: '' example: 'Eius et animi quos velit et.' nullable: true position: type: integer description: 'Must be at least 0.' example: 60 sections: type: array description: 'Must have at least 1 items.' example: - [] items: type: object properties: title: type: string description: 'Must not be greater than 255 characters.' example: b description: type: string description: '' example: 'Eius et animi quos velit et.' nullable: true position: type: integer description: 'Must be at least 0.' example: 60 items: type: array description: 'Must have at least 1 items.' example: - [] items: type: object properties: type: type: string description: '' example: compliance enum: - compliance - measurement - text - file label: type: string description: 'Must not be greater than 500 characters.' example: b description: type: string description: '' example: 'Eius et animi quos velit et.' nullable: true is_mandatory: type: boolean description: '' example: true nullable: true requires_evidence: type: boolean description: '' example: true nullable: true allows_comments: type: boolean description: '' example: false nullable: true criticality: type: string description: '' example: mild enum: - none - mild - moderate - critical nullable: true weight: type: number description: 'Must be at least 0.' example: 60 nullable: true position: type: integer description: 'Must be at least 0.' example: 42 metadata: type: object description: '' example: null properties: { } nullable: true required: - type - label - position required: - title - position - items required: - name - position - sections required: - inspection_type_ids parameters: - in: path name: group_uuid description: '' example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc required: true schema: type: string - in: path name: inspectionTemplate_id description: 'The ID of the inspectionTemplate.' example: architecto required: true schema: type: string '/api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}/activate': post: summary: '' operationId: postApiV1InspectionTemplatesGroup_uuidVersionsInspectionTemplate_idActivate description: '' parameters: [] responses: { } tags: - 'Inspection Template Management' parameters: - in: path name: group_uuid description: '' example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc required: true schema: type: string - in: path name: inspectionTemplate_id description: 'The ID of the inspectionTemplate.' example: architecto required: true schema: type: string '/api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}/clone': post: summary: '' operationId: postApiV1InspectionTemplatesGroup_uuidVersionsInspectionTemplate_idClone description: '' parameters: [] responses: { } tags: - 'Inspection Template Management' parameters: - in: path name: group_uuid description: '' example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc required: true schema: type: string - in: path name: inspectionTemplate_id description: 'The ID of the inspectionTemplate.' example: architecto required: true schema: type: string '/api/v1/inspection-templates/{group_uuid}/versions/{inspectionTemplate_id}/deactivate': post: summary: '' operationId: postApiV1InspectionTemplatesGroup_uuidVersionsInspectionTemplate_idDeactivate description: '' parameters: [] responses: { } tags: - 'Inspection Template Management' parameters: - in: path name: group_uuid description: '' example: BcECdBDA-CdED-bFEA-CbCE-BcCdeBfbbebc required: true schema: type: string - in: path name: inspectionTemplate_id description: 'The ID of the inspectionTemplate.' example: architecto required: true schema: type: string /api/v1/inspection-types: get: summary: '' operationId: getApiV1InspectionTypes description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Inspection Type Management' requestBody: required: false content: application/json: schema: type: object properties: search: type: string description: 'Must not be greater than 100 characters.' example: b nullable: true is_active: type: boolean description: '' example: false nullable: true updated_from: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true updated_to: type: string description: 'Must be a valid date. Must be a date after or equal to updated_from.' example: '2052-03-15' nullable: true page: type: integer description: 'Must be at least 1.' example: 22 nullable: true per_page: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 7 nullable: true sort_by: type: string description: '' example: name enum: - name - description nullable: true sort_order: type: string description: '' example: desc enum: - asc - desc nullable: true post: summary: '' operationId: postApiV1InspectionTypes description: '' parameters: [] responses: { } tags: - 'Inspection Type Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b code: type: string description: 'Must not be greater than 50 characters.' example: 'n' description: type: string description: 'Must not be greater than 1000 characters.' example: 'Animi quos velit et fugiat.' nullable: true estimated_duration_minutes: type: integer description: 'Must be at least 1. Must not be greater than 1440.' example: 1 nullable: true available_from_time: type: string description: 'Must be a valid date in the format H:i:s.' example: '19:44:17' nullable: true available_to_time: type: string description: 'Must be a valid date in the format H:i:s. Must be a date after available_from_time.' example: '2052-03-15' nullable: true min_business_days: type: integer description: 'Must be at least 0.' example: 39 nullable: true max_business_days: type: string description: 'Must be at least 0. Must be a date after or equal to min_business_days.' example: '2052-03-15' nullable: true required_skills: type: array description: '' example: - architecto items: type: string rules: type: object description: '' example: null properties: { } nullable: true frequency: type: object description: '' example: null properties: interval: type: integer description: 'This field is required when frequency is present. Must be at least 1.' example: 22 unit: type: string description: 'This field is required when frequency is present.' example: architecto enum: - days - weeks - months - years day_of_week: type: string description: '' example: architecto enum: - monday - tuesday - wednesday - thursday - friday - saturday - sunday nullable: true repeat_mode: type: string description: '' example: architecto enum: - date - day nullable: true day_of_month: type: integer description: 'Must be at least 1. Must not be greater than 31.' example: 22 nullable: true week: type: string description: '' example: architecto enum: - first - second - third - fourth - fifth - penultimate - last nullable: true month: type: string description: '' example: architecto nullable: true days_of_month: type: array description: 'Must be at least 1. Must not be greater than 31.' example: - 22 items: type: integer nullable: true nullable: true allow_reschedule: type: boolean description: '' example: true nullable: true allow_direct_cancel: type: boolean description: '' example: false nullable: true max_reschedules: type: integer description: 'Must be at least 0.' example: 84 nullable: true reschedule_time_limit: type: string description: 'Must be a valid date in the format H:i:s.' example: '19:44:17' nullable: true reschedule_day_limit: type: integer description: 'Must be at least 0.' example: 12 nullable: true auto_cancel_on_max_reschedules: type: boolean description: '' example: false nullable: true negative_result_on_app_cancel: type: boolean description: '' example: true nullable: true allow_inspector_reschedule_request: type: boolean description: '' example: false nullable: true is_active: type: boolean description: '' example: true nullable: true required: - name - code '/api/v1/inspection-types/{inspectionType_id}': get: summary: '' operationId: getApiV1InspectionTypesInspectionType_id description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: success: false message: 'Not found' errors: null properties: success: type: boolean example: false message: type: string example: 'Not found' errors: type: string example: null nullable: true tags: - 'Inspection Type Management' patch: summary: '' operationId: patchApiV1InspectionTypesInspectionType_id description: '' parameters: [] responses: { } tags: - 'Inspection Type Management' requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b code: type: string description: 'Must not be greater than 50 characters.' example: 'n' description: type: string description: 'Must not be greater than 1000 characters.' example: 'Animi quos velit et fugiat.' nullable: true estimated_duration_minutes: type: integer description: 'Must be at least 1. Must not be greater than 1440.' example: 1 nullable: true available_from_time: type: string description: 'Must be a valid date in the format H:i:s.' example: '19:44:17' nullable: true available_to_time: type: string description: 'Must be a valid date in the format H:i:s. Must be a date after available_from_time.' example: '2052-03-15' nullable: true min_business_days: type: integer description: 'Must be at least 0.' example: 39 nullable: true max_business_days: type: string description: 'Must be at least 0. Must be a date after or equal to min_business_days.' example: '2052-03-15' nullable: true required_skills: type: array description: '' example: - architecto items: type: string rules: type: object description: '' example: null properties: { } nullable: true frequency: type: object description: '' example: null properties: interval: type: integer description: 'This field is required when frequency is present. Must be at least 1.' example: 22 unit: type: string description: 'This field is required when frequency is present.' example: architecto enum: - days - weeks - months - years day_of_week: type: string description: '' example: architecto enum: - monday - tuesday - wednesday - thursday - friday - saturday - sunday nullable: true repeat_mode: type: string description: '' example: architecto enum: - date - day nullable: true day_of_month: type: integer description: 'Must be at least 1. Must not be greater than 31.' example: 22 nullable: true week: type: string description: '' example: architecto enum: - first - second - third - fourth - fifth - penultimate - last nullable: true month: type: string description: '' example: architecto nullable: true days_of_month: type: array description: 'Must be at least 1. Must not be greater than 31.' example: - 22 items: type: integer nullable: true nullable: true allow_reschedule: type: boolean description: '' example: false nullable: true allow_direct_cancel: type: boolean description: '' example: true nullable: true max_reschedules: type: integer description: 'Must be at least 0.' example: 84 nullable: true reschedule_time_limit: type: string description: 'Must be a valid date in the format H:i:s.' example: '19:44:17' nullable: true reschedule_day_limit: type: integer description: 'Must be at least 0.' example: 12 nullable: true auto_cancel_on_max_reschedules: type: boolean description: '' example: false nullable: true negative_result_on_app_cancel: type: boolean description: '' example: true nullable: true allow_inspector_reschedule_request: type: boolean description: '' example: false nullable: true is_active: type: boolean description: '' example: false nullable: true parameters: - in: path name: inspectionType_id description: 'The ID of the inspectionType.' example: architecto required: true schema: type: string '/api/v1/inspection-types/{inspectionType_id}/toggle': patch: summary: '' operationId: patchApiV1InspectionTypesInspectionType_idToggle description: '' parameters: [] responses: { } tags: - 'Inspection Type Management' parameters: - in: path name: inspectionType_id description: 'The ID of the inspectionType.' example: architecto required: true schema: type: string /api/v1/logs: get: summary: '' operationId: getApiV1Logs description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Log Management' requestBody: required: false content: application/json: schema: type: object properties: user_id: type: string description: '' example: architecto nullable: true entity: type: array description: '' example: - architecto items: type: string enum: - acl - auth - user - role - permission - resource - scope - inspection - reschedule_request - group - inspection_template entity_id: type: string description: '' example: architecto nullable: true action: type: string description: '' example: permission_updated enum: - 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 nullable: true from: type: string description: 'Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true to: type: string description: 'Must be a valid date. Must be a date after or equal to from.' example: '2052-03-15' nullable: true per_page: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 22 nullable: true sort: type: string description: '' example: created_at enum: - created_at - entity - action nullable: true sort_direction: type: string description: '' example: asc enum: - asc - desc nullable: true source: type: string description: '' example: advanced enum: - database - advanced nullable: true /api/v1/measurement-units: get: summary: '' operationId: getApiV1MeasurementUnits description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Measurement Unit Management' requestBody: required: false content: application/json: schema: type: object properties: page: type: integer description: 'Must be at least 1.' example: 16 nullable: true per_page: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 22 nullable: true search: type: string description: 'Must not be greater than 100 characters.' example: g nullable: true active_only: type: boolean description: '' example: false nullable: true magnitude: type: string description: 'Must not be greater than 50 characters.' example: z nullable: true origin: type: string description: '' example: architecto enum: - system - user nullable: true sort_by: type: string description: '' example: created_at enum: - name - symbol - magnitude - created_at nullable: true sort_order: type: string description: '' example: asc enum: - asc - desc nullable: true post: summary: '' operationId: postApiV1MeasurementUnits description: '' parameters: [] responses: { } tags: - 'Measurement Unit Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b symbol: type: string description: 'Must not be greater than 20 characters.' example: ngzmiyvdljnikhwa magnitude: type: string description: 'Must not be greater than 50 characters.' example: 'y' required: - name - symbol - magnitude '/api/v1/measurement-units/{unit_id}': get: summary: '' operationId: getApiV1MeasurementUnitsUnit_id description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Measurement Unit Management' patch: summary: '' operationId: patchApiV1MeasurementUnitsUnit_id description: '' parameters: [] responses: { } tags: - 'Measurement Unit Management' requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b symbol: type: string description: 'Must not be greater than 20 characters.' example: ngzmiyvdljnikhwa magnitude: type: string description: 'Must not be greater than 50 characters.' example: 'y' is_active: type: boolean description: '' example: true nullable: true parameters: - in: path name: unit_id description: 'The ID of the unit.' example: architecto required: true schema: type: string /api/v1/notifications: get: summary: '' operationId: getApiV1Notifications description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'Notification Management' requestBody: required: false content: application/json: schema: type: object properties: category: type: string description: '' example: assignments enum: - assignments - general nullable: true per_page: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 1 '/api/v1/notifications/{notification_id}/read': post: summary: '' operationId: postApiV1NotificationsNotification_idRead description: '' parameters: [] responses: { } tags: - 'Notification Management' parameters: - in: path name: notification_id description: 'The ID of the notification.' example: architecto required: true schema: type: string /api/v1/notifications/read-all: post: summary: '' operationId: postApiV1NotificationsReadAll description: '' parameters: [] responses: { } tags: - 'Notification Management' requestBody: required: false content: application/json: schema: type: object properties: category: type: string description: '' example: general enum: - assignments - general nullable: true /api/v1/users/me: get: summary: '' operationId: getApiV1UsersMe description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'User Management' /api/v1/users/devices: post: summary: '' operationId: postApiV1UsersDevices description: '' parameters: [] responses: { } tags: - 'User Management' requestBody: required: true content: application/json: schema: type: object properties: device_token: type: string description: 'Must not be greater than 500 characters.' example: b device_type: type: string description: '' example: ios enum: - ios - android - web nullable: true device_name: type: string description: 'Must not be greater than 255 characters.' example: 'n' nullable: true required: - device_token '/api/v1/users/devices/{deviceId}': delete: summary: 'Delete a specific device belonging to the authenticated user.' operationId: deleteASpecificDeviceBelongingToTheAuthenticatedUser description: '' parameters: [] responses: { } tags: - 'User Management' parameters: - in: path name: deviceId description: '' example: architecto required: true schema: type: string /api/v1/users/sync: get: summary: '' operationId: getApiV1UsersSync description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'User Management' /api/v1/users: get: summary: '' operationId: getApiV1Users description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'User Management' requestBody: required: false content: application/json: schema: type: object properties: search: type: string description: 'Must not be greater than 255 characters.' example: b nullable: true role: type: array description: '' example: - architecto items: type: string work_zone: type: array description: '' example: - architecto items: type: string enum: - centro - norte - sur - este - oeste is_active: type: boolean description: '' example: true nullable: true tenure: type: array description: '' example: - architecto items: type: string enum: - junior - mid - senior - lead group_id: type: array description: 'Must be a valid UUID. The id of an existing record in the groups table.' example: - a4855dc5-0acb-33c3-b921-f4291f719ca0 items: type: string sort_by: type: string description: '' example: email enum: - firstName - email - username nullable: true sort_order: type: string description: '' example: asc enum: - asc - desc nullable: true page: type: integer description: 'Must be at least 1.' example: 66 nullable: true per_page: type: integer description: 'Must be at least 1. Must not be greater than 100.' example: 17 nullable: true post: summary: '' operationId: postApiV1Users description: '' parameters: [] responses: { } tags: - 'User Management' requestBody: required: true content: application/json: schema: type: object properties: email: type: string description: 'Must be a valid email address.' example: gbailey@example.net first_name: type: string description: 'Must not be greater than 255 characters.' example: m last_name: type: string description: 'Must not be greater than 255 characters.' example: i dui_number: type: string description: 'Must not be greater than 20 characters.' example: yvdljnikhwaykcmy nullable: true username: type: string description: 'Must not be greater than 255 characters.' example: u nullable: true password: type: string description: '' example: '|]|{+-' nullable: true enabled: type: boolean description: '' example: false nullable: true email_verified: type: boolean description: '' example: true nullable: true cellphone: type: string description: 'Must not be greater than 20 characters.' example: vdljnikhwaykcmyu nullable: true work_zone: type: string description: '' example: architecto enum: - centro - norte - sur - este - oeste nullable: true tenure: type: string description: '' example: architecto enum: - junior - mid - senior - lead nullable: true is_active: type: boolean description: '' example: true nullable: true role_name: type: string description: '' example: architecto nullable: true skill_ids: type: array description: 'Must be a valid UUID. The id of an existing record in the inspection_skills table.' example: - a4855dc5-0acb-33c3-b921-f4291f719ca0 items: type: string group_ids: type: array description: 'Must be a valid UUID. The id of an existing record in the groups table.' example: - c90237e9-ced5-3af6-88ea-84aeaa148878 items: type: string required: - email - first_name - last_name - skill_ids - group_ids '/api/v1/users/{id}': get: summary: '' operationId: getApiV1UsersId description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'User Management' patch: summary: '' operationId: patchApiV1UsersId description: '' parameters: [] responses: { } tags: - 'User Management' requestBody: required: true content: application/json: schema: type: object properties: email: type: string description: 'Must be a valid email address.' example: gbailey@example.net nullable: true first_name: type: string description: 'Must not be greater than 255 characters.' example: m nullable: true last_name: type: string description: 'Must not be greater than 255 characters.' example: i nullable: true dui_number: type: string description: 'Must not be greater than 20 characters.' example: yvdljnikhwaykcmy nullable: true username: type: string description: 'Must not be greater than 255 characters.' example: u nullable: true password: type: string description: '' example: '|]|{+-' nullable: true enabled: type: boolean description: '' example: true nullable: true email_verified: type: boolean description: '' example: true nullable: true cellphone: type: string description: 'Must not be greater than 20 characters.' example: vdljnikhwaykcmyu nullable: true work_zone: type: string description: '' example: architecto enum: - centro - norte - sur - este - oeste nullable: true tenure: type: string description: '' example: architecto enum: - junior - mid - senior - lead nullable: true is_active: type: boolean description: '' example: false nullable: true role_name: type: string description: '' example: architecto nullable: true skill_ids: type: array description: 'Must be a valid UUID. The id of an existing record in the inspection_skills table.' example: - a4855dc5-0acb-33c3-b921-f4291f719ca0 items: type: string group_ids: type: array description: 'Must be a valid UUID. The id of an existing record in the groups table.' example: - c90237e9-ced5-3af6-88ea-84aeaa148878 items: type: string required: - skill_ids - group_ids parameters: - in: path name: id description: 'The ID of the user.' example: architecto required: true schema: type: string '/api/v1/users/{user}/roles': get: summary: '' operationId: getApiV1UsersUserRoles description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'User Management' parameters: - in: path name: user description: 'The user.' example: architecto required: true schema: type: string '/api/v1/users/{user_id}/inspection-dates': get: summary: '' operationId: getApiV1UsersUser_idInspectionDates description: '' parameters: [] responses: 500: description: '' content: application/json: schema: type: object example: message: 'Server Error' properties: message: type: string example: 'Server Error' tags: - 'User Management' requestBody: required: false content: application/json: schema: type: object properties: start_date: type: string description: 'This field is required when end_date is present. Must be a valid date.' example: '2026-02-20T19:44:17' nullable: true end_date: type: string description: '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' nullable: true parameters: - in: path name: user_id description: 'The ID of the user.' example: 16 required: true schema: type: integer '/api/v1/users/{user_id}/inspection-skills/{inspectionSkill_id}': put: summary: '' operationId: putApiV1UsersUser_idInspectionSkillsInspectionSkill_id description: '' parameters: [] responses: { } tags: - 'User Management' delete: summary: '' operationId: deleteApiV1UsersUser_idInspectionSkillsInspectionSkill_id description: '' parameters: [] responses: { } tags: - 'User Management' parameters: - in: path name: user_id description: 'The ID of the user.' example: 16 required: true schema: type: integer - in: path name: inspectionSkill_id description: 'The ID of the inspectionSkill.' example: architecto required: true schema: type: string '/api/v1/users/{user_oauth_client_id}/groups/{group_id}': put: summary: '' operationId: putApiV1UsersUser_oauth_client_idGroupsGroup_id description: '' parameters: [] responses: { } tags: - 'User Management' delete: summary: '' operationId: deleteApiV1UsersUser_oauth_client_idGroupsGroup_id description: '' parameters: [] responses: { } tags: - 'User Management' parameters: - in: path name: user_oauth_client_id description: 'The ID of the user oauth client.' example: architecto required: true schema: type: string - in: path name: group_id description: 'The ID of the group.' example: architecto required: true schema: type: string