openapi: 3.0.3
info:
title: 'IMAC-CONNECT API Documentation'
description: 'IMAC Connect API - Procurement, Inventory, Projects, and Field Operations Platform'
version: 1.0.0
servers:
-
url: 'http://imac.name'
tags:
-
name: 'Audit Logs'
description: "\nAPIs for viewing audit logs (admin only)"
-
name: 'Dashboard & Analytics'
description: "\nAPIs for dashboard KPIs, charts, and analytics"
-
name: Endpoints
description: ''
-
name: Items
description: "\nAPIs for managing inventory items"
-
name: Notifications
description: "\nAPIs for managing user notifications"
-
name: Permissions
description: "\nAPIs for viewing permissions (read-only)"
-
name: 'Price Lists'
description: "\nAPIs for managing supplier price lists"
-
name: 'Procurement Requests'
description: "\nAPIs for managing procurement requests"
-
name: Projects
description: "\nAPIs for managing projects"
-
name: 'Purchase Orders'
description: "\nAPIs for managing purchase orders"
-
name: Reports
description: "\nAPIs for managing field reports"
-
name: Roles
description: "\nAPIs for managing roles and permissions"
-
name: 'Stock Management'
description: "\nAPIs for managing stock levels and movements"
-
name: Suppliers
description: "\nAPIs for managing suppliers"
-
name: 'System Settings'
description: "\nAPIs for managing system settings (admin only)"
-
name: Timesheets
description: "\nAPIs for managing timesheet entries"
-
name: 'Training Records'
description: "\nAPIs for managing training records"
-
name: Vehicles
description: "\nAPIs for managing vehicles"
components:
securitySchemes:
default:
type: http
scheme: bearer
description: 'You can retrieve your token by logging in via the `/api/v1/auth/login` endpoint. Include the token in the Authorization header as: `Bearer {token}`.'
security:
-
default: []
paths:
/api/v1/audit-logs:
get:
summary: 'Display a listing of audit logs.'
operationId: displayAListingOfAuditLogs
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Audit Logs'
'/api/v1/audit-logs/{uuid}':
get:
summary: 'Display the specified audit log.'
operationId: displayTheSpecifiedAuditLog
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Audit Logs'
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/dashboard/kpis:
get:
summary: 'Get dashboard KPIs.'
operationId: getDashboardKPIs
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Dashboard & Analytics'
/api/v1/dashboard/charts:
get:
summary: 'Get dashboard charts data.'
operationId: getDashboardChartsData
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Dashboard & Analytics'
/api/v1/dashboard/activities:
get:
summary: 'Get recent activities.'
operationId: getRecentActivities
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Dashboard & Analytics'
/api/v1/analytics/procurements:
get:
summary: 'Get procurement analytics.'
operationId: getProcurementAnalytics
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Dashboard & Analytics'
/api/v1/analytics/inventory:
get:
summary: 'Get inventory analytics.'
operationId: getInventoryAnalytics
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Dashboard & Analytics'
/api/v1/analytics/projects:
get:
summary: 'Get project analytics.'
operationId: getProjectAnalytics
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Dashboard & Analytics'
/api/v1/auth/login:
post:
summary: 'Authenticate user and return token.'
operationId: authenticateUserAndReturnToken
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'Must be a valid email address.'
example: qkunze@example.com
nullable: false
password:
type: string
description: ''
example: 'O[2UZ5ij-e/dl4m{o,'
nullable: false
required:
- email
- password
/api/v1/auth/register:
post:
summary: 'Register a new user.'
operationId: registerANewUser
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: kunde.eloisa@example.com
nullable: false
password:
type: string
description: 'Must be at least 8 characters.'
example: '4[*UyPJ"}6'
nullable: false
phone:
type: string
description: 'Must not be greater than 20 characters.'
example: hdtqtqxbajwbpilpm
nullable: true
first_name:
type: string
description: 'Must not be greater than 255 characters.'
example: ufinllwloauydlsmsjury
nullable: true
last_name:
type: string
description: 'Must not be greater than 255 characters.'
example: vojcybzvrbyickznkyglo
nullable: true
middle_name:
type: string
description: 'Must not be greater than 255 characters.'
example: igmkwxphlvazjrcnfbaqy
nullable: true
date_of_birth:
type: string
description: 'Must be a valid date. Must be a date before today.'
example: '2020-03-09'
nullable: true
required:
- name
- email
- password
/api/v1/auth/forgot-password:
post:
summary: 'Send password reset link.'
operationId: sendPasswordResetLink
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'Must be a valid email address.'
example: qkunze@example.com
nullable: false
required:
- email
/api/v1/auth/reset-password:
post:
summary: 'Reset password.'
operationId: resetPassword
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
token:
type: string
description: ''
example: consequatur
nullable: false
email:
type: string
description: 'Must be a valid email address.'
example: carolyne.luettgen@example.org
nullable: false
password:
type: string
description: 'Must be at least 8 characters.'
example: ij-e/dl4m
nullable: false
required:
- token
- email
- password
/api/v1/auth/logout:
post:
summary: 'Logout user (revoke token).'
operationId: logoutUserrevokeToken
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/auth/logout-all:
post:
summary: 'Revoke all user tokens.'
operationId: revokeAllUserTokens
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/auth/refresh:
post:
summary: 'Refresh the authentication token.'
operationId: refreshTheAuthenticationToken
description: ''
parameters: []
responses: { }
tags:
- Endpoints
/api/v1/auth/me:
get:
summary: 'Get authenticated user.'
operationId: getAuthenticatedUser
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
'/api/v1/users/{user_uuid}/activate':
post:
summary: 'Activate a user.'
operationId: activateAUser
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: user_uuid
description: ''
example: 019a72f5-e572-70af-84d1-1706caf0c4db
required: true
schema:
type: string
'/api/v1/users/{user_uuid}/deactivate':
post:
summary: 'Deactivate a user.'
operationId: deactivateAUser
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: user_uuid
description: ''
example: 019a72f5-e572-70af-84d1-1706caf0c4db
required: true
schema:
type: string
'/api/v1/users/{user_uuid}/reset-password':
post:
summary: 'Reset user password.'
operationId: resetUserPassword
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
password:
type: string
description: 'Must be at least 8 characters.'
example: 'O[2UZ5ij-e/dl4m{o,'
nullable: false
required:
- password
parameters:
-
in: path
name: user_uuid
description: ''
example: 019a72f5-e572-70af-84d1-1706caf0c4db
required: true
schema:
type: string
/api/v1/users:
get:
summary: 'Display a listing of users.'
operationId: displayAListingOfUsers
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
post:
summary: 'Store a newly created user.'
operationId: storeANewlyCreatedUser
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: kunde.eloisa@example.com
nullable: false
password:
type: string
description: 'Must be at least 8 characters.'
example: '4[*UyPJ"}6'
nullable: false
phone:
type: string
description: 'Must not be greater than 20 characters.'
example: hdtqtqxbajwbpilpm
nullable: true
status:
type: string
description: ''
example: suspended
nullable: true
enum:
- active
- inactive
- suspended
- pending
first_name:
type: string
description: 'Must not be greater than 255 characters.'
example: ufinllwloauydlsmsjury
nullable: true
last_name:
type: string
description: 'Must not be greater than 255 characters.'
example: vojcybzvrbyickznkyglo
nullable: true
middle_name:
type: string
description: 'Must not be greater than 255 characters.'
example: igmkwxphlvazjrcnfbaqy
nullable: true
date_of_birth:
type: string
description: 'Must be a valid date. Must be a date before today.'
example: '2020-03-09'
nullable: true
gender:
type: string
description: ''
example: male
nullable: true
enum:
- male
- female
- other
address:
type: string
description: 'Must not be greater than 500 characters.'
example: mqeopfuudtdsufvyvddqa
nullable: true
city:
type: string
description: 'Must not be greater than 255 characters.'
example: mniihfqcoynlazghdtqtq
nullable: true
state:
type: string
description: 'Must not be greater than 255 characters.'
example: xbajwbpilpmufinllwloa
nullable: true
country:
type: string
description: 'Must not be greater than 255 characters.'
example: uydlsmsjuryvojcybzvrb
nullable: true
postal_code:
type: string
description: 'Must not be greater than 20 characters.'
example: yickznkygloigmkwx
nullable: true
required:
- name
- email
- password
'/api/v1/users/{uuid}':
get:
summary: 'Display the specified user.'
operationId: displayTheSpecifiedUser
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
put:
summary: 'Update the specified user.'
operationId: updateTheSpecifiedUser
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: kunde.eloisa@example.com
nullable: false
password:
type: string
description: 'Must be at least 8 characters.'
example: '4[*UyPJ"}6'
nullable: true
phone:
type: string
description: 'Must not be greater than 20 characters.'
example: hdtqtqxbajwbpilpm
nullable: true
status:
type: string
description: ''
example: pending
nullable: true
enum:
- active
- inactive
- suspended
- pending
first_name:
type: string
description: 'Must not be greater than 255 characters.'
example: ufinllwloauydlsmsjury
nullable: true
last_name:
type: string
description: 'Must not be greater than 255 characters.'
example: vojcybzvrbyickznkyglo
nullable: true
middle_name:
type: string
description: 'Must not be greater than 255 characters.'
example: igmkwxphlvazjrcnfbaqy
nullable: true
date_of_birth:
type: string
description: 'Must be a valid date. Must be a date before today.'
example: '2020-03-09'
nullable: true
gender:
type: string
description: ''
example: female
nullable: true
enum:
- male
- female
- other
address:
type: string
description: 'Must not be greater than 500 characters.'
example: mqeopfuudtdsufvyvddqa
nullable: true
city:
type: string
description: 'Must not be greater than 255 characters.'
example: mniihfqcoynlazghdtqtq
nullable: true
state:
type: string
description: 'Must not be greater than 255 characters.'
example: xbajwbpilpmufinllwloa
nullable: true
country:
type: string
description: 'Must not be greater than 255 characters.'
example: uydlsmsjuryvojcybzvrb
nullable: true
postal_code:
type: string
description: 'Must not be greater than 20 characters.'
example: yickznkygloigmkwx
nullable: true
delete:
summary: 'Remove the specified user.'
operationId: removeTheSpecifiedUser
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: uuid
description: ''
example: 019a72f5-e572-70af-84d1-1706caf0c4db
required: true
schema:
type: string
'/api/v1/customers/{customer_uuid}/projects':
get:
summary: 'Get customer projects.'
operationId: getCustomerProjects
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
parameters:
-
in: path
name: customer_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/customers:
get:
summary: 'Display a listing of customers.'
operationId: displayAListingOfCustomers
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
post:
summary: 'Store a newly created customer.'
operationId: storeANewlyCreatedCustomer
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
name:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: false
contact_person:
type: string
description: 'Must not be greater than 255 characters.'
example: qxbajwbpilpmufinllwlo
nullable: true
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: schmitt.beulah@example.org
nullable: true
phone:
type: string
description: 'Must not be greater than 20 characters.'
example: smsjuryvojcybzvrb
nullable: true
address:
type: string
description: 'Must not be greater than 500 characters.'
example: yickznkygloigmkwxphlv
nullable: true
city:
type: string
description: 'Must not be greater than 255 characters.'
example: azjrcnfbaqywuxhgjjmzu
nullable: true
state:
type: string
description: 'Must not be greater than 255 characters.'
example: xjubqouzswiwxtrkimfca
nullable: true
country:
type: string
description: 'Must not be greater than 255 characters.'
example: tbxspzmrazsroyjpxmqes
nullable: true
status:
type: string
description: ''
example: suspended
nullable: true
enum:
- active
- inactive
- suspended
notes:
type: string
description: ''
example: consequatur
nullable: true
required:
- code
- name
'/api/v1/customers/{uuid}':
get:
summary: 'Display the specified customer.'
operationId: displayTheSpecifiedCustomer
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
put:
summary: 'Update the specified customer.'
operationId: updateTheSpecifiedCustomer
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
name:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: false
contact_person:
type: string
description: 'Must not be greater than 255 characters.'
example: qxbajwbpilpmufinllwlo
nullable: true
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: schmitt.beulah@example.org
nullable: true
phone:
type: string
description: 'Must not be greater than 20 characters.'
example: smsjuryvojcybzvrb
nullable: true
address:
type: string
description: 'Must not be greater than 500 characters.'
example: yickznkygloigmkwxphlv
nullable: true
city:
type: string
description: 'Must not be greater than 255 characters.'
example: azjrcnfbaqywuxhgjjmzu
nullable: true
state:
type: string
description: 'Must not be greater than 255 characters.'
example: xjubqouzswiwxtrkimfca
nullable: true
country:
type: string
description: 'Must not be greater than 255 characters.'
example: tbxspzmrazsroyjpxmqes
nullable: true
status:
type: string
description: ''
example: suspended
nullable: true
enum:
- active
- inactive
- suspended
notes:
type: string
description: ''
example: consequatur
nullable: true
delete:
summary: 'Remove the specified customer.'
operationId: removeTheSpecifiedCustomer
description: ''
parameters: []
responses: { }
tags:
- Endpoints
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/items/{item_uuid}/stock-levels':
get:
summary: 'Get item stock levels.'
operationId: getItemStockLevels
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Items
parameters:
-
in: path
name: item_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/items/{item_uuid}/price-lists':
get:
summary: 'Get item price lists.'
operationId: getItemPriceLists
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Items
parameters:
-
in: path
name: item_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/items:
get:
summary: 'Display a listing of items.'
operationId: displayAListingOfItems
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Items
post:
summary: 'Store a newly created item.'
operationId: storeANewlyCreatedItem
description: ''
parameters: []
responses: { }
tags:
- Items
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
name:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: false
description:
type: string
description: ''
example: 'Dolores dolorum amet iste laborum eius est dolor.'
nullable: true
category:
type: string
description: 'Must not be greater than 255 characters.'
example: dtdsufvyvddqamniihfqc
nullable: true
unit_of_measure:
type: string
description: 'Must not be greater than 50 characters.'
example: oynlazghdtqtqxbajwbpi
nullable: true
default_supplier_id:
type: string
description: 'The id of an existing record in the suppliers table.'
example: null
nullable: true
base_price:
type: number
description: 'Must be at least 0.'
example: 41
nullable: true
status:
type: string
description: ''
example: active
nullable: true
enum:
- active
- inactive
required:
- code
- name
'/api/v1/items/{uuid}':
get:
summary: 'Display the specified item.'
operationId: displayTheSpecifiedItem
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Items
put:
summary: 'Update the specified item.'
operationId: updateTheSpecifiedItem
description: ''
parameters: []
responses: { }
tags:
- Items
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
name:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: false
description:
type: string
description: ''
example: 'Dolores dolorum amet iste laborum eius est dolor.'
nullable: true
category:
type: string
description: 'Must not be greater than 255 characters.'
example: dtdsufvyvddqamniihfqc
nullable: true
unit_of_measure:
type: string
description: 'Must not be greater than 50 characters.'
example: oynlazghdtqtqxbajwbpi
nullable: true
default_supplier_id:
type: string
description: 'The id of an existing record in the suppliers table.'
example: null
nullable: true
base_price:
type: number
description: 'Must be at least 0.'
example: 41
nullable: true
status:
type: string
description: ''
example: active
nullable: true
enum:
- active
- inactive
delete:
summary: 'Remove the specified item.'
operationId: removeTheSpecifiedItem
description: ''
parameters: []
responses: { }
tags:
- Items
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/notifications/{notification_uuid}/read':
post:
summary: 'Mark notification as read.'
operationId: markNotificationAsRead
description: ''
parameters: []
responses: { }
tags:
- Notifications
parameters:
-
in: path
name: notification_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/notifications/mark-all-read:
post:
summary: 'Mark all notifications as read.'
operationId: markAllNotificationsAsRead
description: ''
parameters: []
responses: { }
tags:
- Notifications
/api/v1/notifications/unread-count:
get:
summary: 'Get unread notifications count.'
operationId: getUnreadNotificationsCount
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Notifications
/api/v1/notifications:
get:
summary: 'Display a listing of notifications for the authenticated user.'
operationId: displayAListingOfNotificationsForTheAuthenticatedUser
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Notifications
'/api/v1/notifications/{uuid}':
get:
summary: 'Display the specified notification.'
operationId: displayTheSpecifiedNotification
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Notifications
delete:
summary: 'Remove the specified notification.'
operationId: removeTheSpecifiedNotification
description: ''
parameters: []
responses: { }
tags:
- Notifications
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/permissions:
get:
summary: 'Display a listing of permissions.'
operationId: displayAListingOfPermissions
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Permissions
'/api/v1/permissions/{uuid}':
get:
summary: 'Display the specified permission.'
operationId: displayTheSpecifiedPermission
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Permissions
parameters:
-
in: path
name: uuid
description: ''
example: 019a72f5-e107-7002-b65b-660897661695
required: true
schema:
type: string
/api/v1/price-lists:
get:
summary: 'Display a listing of price lists.'
operationId: displayAListingOfPriceLists
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Price Lists'
post:
summary: 'Store a newly created price list entry.'
operationId: storeANewlyCreatedPriceListEntry
description: ''
parameters: []
responses: { }
tags:
- 'Price Lists'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
item_id:
type: string
description: 'The id of an existing record in the items table.'
example: consequatur
nullable: false
supplier_id:
type: string
description: 'The id of an existing record in the suppliers table.'
example: consequatur
nullable: false
price:
type: number
description: 'Must be at least 0.'
example: 45
nullable: false
effective_from:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:20'
nullable: false
effective_to:
type: string
description: 'Must be a valid date. Must be a date after effective_from.'
example: '2106-12-11'
nullable: true
currency:
type: string
description: 'Must not be greater than 3 characters.'
example: mqe
nullable: true
required:
- item_id
- supplier_id
- price
- effective_from
'/api/v1/price-lists/{uuid}':
get:
summary: 'Display the specified price list entry.'
operationId: displayTheSpecifiedPriceListEntry
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Price Lists'
put:
summary: 'Update the specified price list entry.'
operationId: updateTheSpecifiedPriceListEntry
description: ''
parameters: []
responses: { }
tags:
- 'Price Lists'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
item_id:
type: string
description: 'The id of an existing record in the items table.'
example: null
nullable: false
supplier_id:
type: string
description: 'The id of an existing record in the suppliers table.'
example: null
nullable: false
price:
type: number
description: 'Must be at least 0.'
example: 73
nullable: false
effective_from:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:20'
nullable: false
effective_to:
type: string
description: 'Must be a valid date. Must be a date after effective_from.'
example: '2106-12-11'
nullable: true
currency:
type: string
description: 'Must not be greater than 3 characters.'
example: mqe
nullable: true
delete:
summary: 'Remove the specified price list entry.'
operationId: removeTheSpecifiedPriceListEntry
description: ''
parameters: []
responses: { }
tags:
- 'Price Lists'
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/procurements/{procurementRequest_uuid}/submit':
post:
summary: 'Submit procurement request for approval.'
operationId: submitProcurementRequestForApproval
description: ''
parameters: []
responses: { }
tags:
- 'Procurement Requests'
parameters:
-
in: path
name: procurementRequest_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/procurements/{procurementRequest_uuid}/approve':
post:
summary: 'Approve procurement request.'
operationId: approveProcurementRequest
description: ''
parameters: []
responses: { }
tags:
- 'Procurement Requests'
parameters:
-
in: path
name: procurementRequest_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/procurements/{procurementRequest_uuid}/reject':
post:
summary: 'Reject procurement request.'
operationId: rejectProcurementRequest
description: ''
parameters: []
responses: { }
tags:
- 'Procurement Requests'
parameters:
-
in: path
name: procurementRequest_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/procurements/{procurementRequest_uuid}/convert-to-po':
post:
summary: 'Convert approved procurement request to purchase order.'
operationId: convertApprovedProcurementRequestToPurchaseOrder
description: ''
parameters: []
responses: { }
tags:
- 'Procurement Requests'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
supplier_id:
type: string
description: 'The id of an existing record in the suppliers table.'
example: consequatur
nullable: false
order_date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:20'
nullable: true
required_date:
type: string
description: 'Must be a valid date. Must be a date after or equal to order_date.'
example: '2106-12-11'
nullable: true
delivery_address:
type: string
description: 'Must not be greater than 500 characters.'
example: mqeopfuudtdsufvyvddqa
nullable: true
terms:
type: string
description: ''
example: consequatur
nullable: true
required:
- supplier_id
parameters:
-
in: path
name: procurementRequest_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/procurements:
get:
summary: 'Display a listing of procurement requests.'
operationId: displayAListingOfProcurementRequests
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Procurement Requests'
post:
summary: 'Store a newly created procurement request.'
operationId: storeANewlyCreatedProcurementRequest
description: ''
parameters: []
responses: { }
tags:
- 'Procurement Requests'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
request_number:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: true
project_id:
type: string
description: 'The id of an existing record in the projects table.'
example: null
nullable: true
status:
type: string
description: ''
example: draft
nullable: true
enum:
- draft
- pending
- approved
- rejected
- converted
priority:
type: string
description: ''
example: urgent
nullable: true
enum:
- low
- medium
- high
- urgent
required_date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:20'
nullable: true
notes:
type: string
description: ''
example: consequatur
nullable: true
items:
type: array
description: 'Must have at least 1 items.'
example:
- []
items:
type: object
properties:
item_id:
type: string
description: 'The id of an existing record in the items table.'
example: null
nullable: true
quantity:
type: number
description: 'Must be at least 0.01.'
example: 73
nullable: false
unit_price:
type: number
description: 'Must be at least 0.'
example: 45
nullable: true
description:
type: string
description: ''
example: 'Dolores dolorum amet iste laborum eius est dolor.'
nullable: true
notes:
type: string
description: ''
example: consequatur
nullable: true
required:
- quantity
required:
- items
'/api/v1/procurements/{id}':
get:
summary: 'Display the specified procurement request.'
operationId: displayTheSpecifiedProcurementRequest
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Procurement Requests'
put:
summary: 'Update the specified procurement request.'
operationId: updateTheSpecifiedProcurementRequest
description: ''
parameters: []
responses: { }
tags:
- 'Procurement Requests'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
request_number:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
project_id:
type: string
description: 'The id of an existing record in the projects table.'
example: null
nullable: true
status:
type: string
description: ''
example: approved
nullable: true
enum:
- draft
- pending
- approved
- rejected
- converted
priority:
type: string
description: ''
example: high
nullable: true
enum:
- low
- medium
- high
- urgent
required_date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:20'
nullable: true
notes:
type: string
description: ''
example: consequatur
nullable: true
items:
type: array
description: 'Must have at least 1 items.'
example: null
items:
type: object
properties:
item_id:
type: string
description: 'The id of an existing record in the items table.'
example: null
nullable: true
quantity:
type: number
description: 'Must be at least 0.01.'
example: 45
nullable: false
unit_price:
type: number
description: 'Must be at least 0.'
example: 56
nullable: true
description:
type: string
description: ''
example: 'Dolores dolorum amet iste laborum eius est dolor.'
nullable: true
notes:
type: string
description: ''
example: consequatur
nullable: true
required:
- quantity
delete:
summary: 'Remove the specified procurement request.'
operationId: removeTheSpecifiedProcurementRequest
description: ''
parameters: []
responses: { }
tags:
- 'Procurement Requests'
parameters:
-
in: path
name: id
description: 'The ID of the procurement.'
example: consequatur
required: true
schema:
type: string
'/api/v1/projects/{project_uuid}/procurements':
get:
summary: 'Get project procurements.'
operationId: getProjectProcurements
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Projects
parameters:
-
in: path
name: project_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/projects/{project_uuid}/reports':
get:
summary: 'Get project reports.'
operationId: getProjectReports
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Projects
parameters:
-
in: path
name: project_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/projects:
get:
summary: 'Display a listing of projects.'
operationId: displayAListingOfProjects
description: ''
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: '{"success": true, "message": "Projects retrieved successfully", "data": [...], "pagination": {...}}'
tags:
- Projects
post:
summary: 'Store a newly created project.'
operationId: storeANewlyCreatedProject
description: ''
parameters: []
responses: { }
tags:
- Projects
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
name:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: false
customer_id:
type: string
description: 'The id of an existing record in the customers table.'
example: consequatur
nullable: false
start_date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:19'
nullable: false
end_date:
type: string
description: 'Must be a valid date. Must be a date after start_date.'
example: '2106-12-11'
nullable: true
status:
type: string
description: ''
example: cancelled
nullable: true
enum:
- planning
- active
- on_hold
- completed
- cancelled
budget:
type: number
description: 'Must be at least 0.'
example: 45
nullable: true
manager_id:
type: string
description: 'The id of an existing record in the users table.'
example: consequatur
nullable: false
description:
type: string
description: ''
example: 'Dolores dolorum amet iste laborum eius est dolor.'
nullable: true
required:
- code
- name
- customer_id
- start_date
- manager_id
'/api/v1/projects/{uuid}':
get:
summary: 'Display the specified project.'
operationId: displayTheSpecifiedProject
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Projects
put:
summary: 'Update the specified project.'
operationId: updateTheSpecifiedProject
description: ''
parameters: []
responses: { }
tags:
- Projects
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
name:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: false
customer_id:
type: string
description: 'The id of an existing record in the customers table.'
example: null
nullable: false
start_date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:19'
nullable: false
end_date:
type: string
description: 'Must be a valid date. Must be a date after start_date.'
example: '2106-12-11'
nullable: true
status:
type: string
description: ''
example: completed
nullable: true
enum:
- planning
- active
- on_hold
- completed
- cancelled
budget:
type: number
description: 'Must be at least 0.'
example: 45
nullable: true
manager_id:
type: string
description: 'The id of an existing record in the users table.'
example: null
nullable: false
description:
type: string
description: ''
example: 'Dolores dolorum amet iste laborum eius est dolor.'
nullable: true
delete:
summary: 'Remove the specified project.'
operationId: removeTheSpecifiedProject
description: ''
parameters: []
responses: { }
tags:
- Projects
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/purchase-orders/{purchaseOrder_uuid}/submit':
post:
summary: 'Submit purchase order for approval.'
operationId: submitPurchaseOrderForApproval
description: ''
parameters: []
responses: { }
tags:
- 'Purchase Orders'
parameters:
-
in: path
name: purchaseOrder_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/purchase-orders/{purchaseOrder_uuid}/approve':
post:
summary: 'Approve purchase order.'
operationId: approvePurchaseOrder
description: ''
parameters: []
responses: { }
tags:
- 'Purchase Orders'
parameters:
-
in: path
name: purchaseOrder_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/purchase-orders/{purchaseOrder_uuid}/reject':
post:
summary: 'Reject purchase order.'
operationId: rejectPurchaseOrder
description: ''
parameters: []
responses: { }
tags:
- 'Purchase Orders'
parameters:
-
in: path
name: purchaseOrder_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/purchase-orders:
get:
summary: 'Display a listing of purchase orders.'
operationId: displayAListingOfPurchaseOrders
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Purchase Orders'
post:
summary: 'Store a newly created purchase order.'
operationId: storeANewlyCreatedPurchaseOrder
description: ''
parameters: []
responses: { }
tags:
- 'Purchase Orders'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
po_number:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: true
supplier_id:
type: string
description: 'The id of an existing record in the suppliers table.'
example: consequatur
nullable: false
project_id:
type: string
description: 'The id of an existing record in the projects table.'
example: null
nullable: true
status:
type: string
description: ''
example: rejected
nullable: true
enum:
- draft
- pending
- approved
- rejected
- issued
- received
- cancelled
order_date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:21'
nullable: true
required_date:
type: string
description: 'Must be a valid date. Must be a date after or equal to order_date.'
example: '2106-12-11'
nullable: true
delivery_address:
type: string
description: ''
example: consequatur
nullable: true
terms:
type: string
description: ''
example: consequatur
nullable: true
items:
type: array
description: 'Must have at least 1 items.'
example:
- []
items:
type: object
properties:
item_id:
type: string
description: 'The id of an existing record in the items table.'
example: null
nullable: true
quantity:
type: number
description: 'Must be at least 0.01.'
example: 73
nullable: false
unit_price:
type: number
description: 'Must be at least 0.'
example: 45
nullable: false
tax_rate:
type: number
description: 'Must be at least 0. Must not be greater than 100.'
example: 16
nullable: true
description:
type: string
description: ''
example: 'Dolores dolorum amet iste laborum eius est dolor.'
nullable: true
required:
- quantity
- unit_price
required:
- supplier_id
- items
'/api/v1/purchase-orders/{uuid}':
get:
summary: 'Display the specified purchase order.'
operationId: displayTheSpecifiedPurchaseOrder
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Purchase Orders'
put:
summary: 'Update the specified purchase order.'
operationId: updateTheSpecifiedPurchaseOrder
description: ''
parameters: []
responses: { }
tags:
- 'Purchase Orders'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
po_number:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
supplier_id:
type: string
description: 'The id of an existing record in the suppliers table.'
example: null
nullable: false
project_id:
type: string
description: 'The id of an existing record in the projects table.'
example: null
nullable: true
status:
type: string
description: ''
example: pending
nullable: true
enum:
- draft
- pending
- approved
- rejected
- issued
- received
- cancelled
order_date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:21'
nullable: true
required_date:
type: string
description: 'Must be a valid date. Must be a date after or equal to order_date.'
example: '2106-12-11'
nullable: true
delivery_address:
type: string
description: ''
example: consequatur
nullable: true
terms:
type: string
description: ''
example: consequatur
nullable: true
items:
type: array
description: 'Must have at least 1 items.'
example: null
items:
type: object
properties:
item_id:
type: string
description: 'The id of an existing record in the items table.'
example: null
nullable: true
quantity:
type: number
description: 'Must be at least 0.01.'
example: 45
nullable: false
unit_price:
type: number
description: 'Must be at least 0.'
example: 56
nullable: false
tax_rate:
type: number
description: 'Must be at least 0. Must not be greater than 100.'
example: 5
nullable: true
description:
type: string
description: ''
example: 'Dolores dolorum amet iste laborum eius est dolor.'
nullable: true
required:
- quantity
- unit_price
delete:
summary: 'Remove the specified purchase order.'
operationId: removeTheSpecifiedPurchaseOrder
description: ''
parameters: []
responses: { }
tags:
- 'Purchase Orders'
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/reports/{report_uuid}/submit':
post:
summary: 'Submit report.'
operationId: submitReport
description: ''
parameters: []
responses: { }
tags:
- Reports
parameters:
-
in: path
name: report_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/reports/{report_uuid}/attachments':
post:
summary: 'Upload attachment to report.'
operationId: uploadAttachmentToReport
description: ''
parameters: []
responses: { }
tags:
- Reports
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 10240 kilobytes.'
nullable: false
required:
- file
get:
summary: 'Get report attachments.'
operationId: getReportAttachments
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Reports
parameters:
-
in: path
name: report_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/reports/{report_uuid}/attachments/{attachment_uuid}':
delete:
summary: 'Delete report attachment.'
operationId: deleteReportAttachment
description: ''
parameters: []
responses: { }
tags:
- Reports
parameters:
-
in: path
name: report_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
-
in: path
name: attachment_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/reports:
get:
summary: 'Display a listing of reports.'
operationId: displayAListingOfReports
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Reports
post:
summary: 'Store a newly created report.'
operationId: storeANewlyCreatedReport
description: ''
parameters: []
responses: { }
tags:
- Reports
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
report_number:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: true
project_id:
type: string
description: 'The id of an existing record in the projects table.'
example: null
nullable: true
report_type:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: false
title:
type: string
description: 'Must not be greater than 255 characters.'
example: qxbajwbpilpmufinllwlo
nullable: false
description:
type: string
description: ''
example: 'Dolores dolorum amet iste laborum eius est dolor.'
nullable: true
status:
type: string
description: ''
example: submitted
nullable: true
enum:
- draft
- submitted
- reviewed
- resolved
- closed
priority:
type: string
description: ''
example: medium
nullable: true
enum:
- low
- medium
- high
- urgent
location_lat:
type: number
description: 'Must be between -90 and 90.'
example: -90
nullable: true
location_lng:
type: number
description: 'Must be between -180 and 180.'
example: -179
nullable: true
required:
- report_type
- title
'/api/v1/reports/{uuid}':
get:
summary: 'Display the specified report.'
operationId: displayTheSpecifiedReport
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Reports
put:
summary: 'Update the specified report.'
operationId: updateTheSpecifiedReport
description: ''
parameters: []
responses: { }
tags:
- Reports
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
report_number:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
project_id:
type: string
description: 'The id of an existing record in the projects table.'
example: null
nullable: true
report_type:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: false
title:
type: string
description: 'Must not be greater than 255 characters.'
example: qxbajwbpilpmufinllwlo
nullable: false
description:
type: string
description: ''
example: 'Dolores dolorum amet iste laborum eius est dolor.'
nullable: true
status:
type: string
description: ''
example: draft
nullable: true
enum:
- draft
- submitted
- reviewed
- resolved
- closed
priority:
type: string
description: ''
example: high
nullable: true
enum:
- low
- medium
- high
- urgent
location_lat:
type: number
description: 'Must be between -90 and 90.'
example: -90
nullable: true
location_lng:
type: number
description: 'Must be between -180 and 180.'
example: -179
nullable: true
delete:
summary: 'Remove the specified report.'
operationId: removeTheSpecifiedReport
description: ''
parameters: []
responses: { }
tags:
- Reports
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/roles/{role_uuid}/permissions':
post:
summary: 'Assign permissions to role.'
operationId: assignPermissionsToRole
description: ''
parameters: []
responses: { }
tags:
- Roles
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
permission_ids:
type: array
description: 'The id of an existing record in the permissions table.'
example: null
items:
type: string
parameters:
-
in: path
name: role_uuid
description: ''
example: 019a72f5-e02f-70bb-9443-7cb5ab140c15
required: true
schema:
type: string
/api/v1/roles:
get:
summary: 'Display a listing of roles.'
operationId: displayAListingOfRoles
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Roles
post:
summary: 'Store a newly created role.'
operationId: storeANewlyCreatedRole
description: ''
parameters: []
responses: { }
tags:
- Roles
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
description:
type: string
description: 'Must not be greater than 500 characters.'
example: 'Dolores molestias ipsam sit.'
nullable: true
is_system:
type: boolean
description: ''
example: true
nullable: true
permission_ids:
type: array
description: 'The id of an existing record in the permissions table.'
example: null
items:
type: string
required:
- name
'/api/v1/roles/{uuid}':
get:
summary: 'Display the specified role.'
operationId: displayTheSpecifiedRole
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Roles
put:
summary: 'Update the specified role.'
operationId: updateTheSpecifiedRole
description: ''
parameters: []
responses: { }
tags:
- Roles
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
description:
type: string
description: 'Must not be greater than 500 characters.'
example: 'Dolores molestias ipsam sit.'
nullable: true
is_system:
type: boolean
description: ''
example: true
nullable: true
permission_ids:
type: array
description: 'The id of an existing record in the permissions table.'
example: null
items:
type: string
delete:
summary: 'Remove the specified role.'
operationId: removeTheSpecifiedRole
description: ''
parameters: []
responses: { }
tags:
- Roles
parameters:
-
in: path
name: uuid
description: ''
example: 019a72f5-e02f-70bb-9443-7cb5ab140c15
required: true
schema:
type: string
/api/v1/stock-levels/adjust:
post:
summary: 'Adjust stock level (increase or decrease).'
operationId: adjustStockLevelincreaseOrDecrease
description: ''
parameters: []
responses: { }
tags:
- 'Stock Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
item_id:
type: string
description: 'The id of an existing record in the items table.'
example: consequatur
nullable: false
location:
type: string
description: 'Must not be greater than 255 characters.'
example: mqeopfuudtdsufvyvddqa
nullable: false
adjustment:
type: number
description: ''
example: 11613.31890586
nullable: false
reason:
type: string
description: 'Must not be greater than 500 characters.'
example: opfuudtdsufvyvddqamni
nullable: false
notes:
type: string
description: ''
example: consequatur
nullable: true
required:
- item_id
- location
- adjustment
- reason
/api/v1/stock-levels/transfer:
post:
summary: 'Transfer stock between locations.'
operationId: transferStockBetweenLocations
description: ''
parameters: []
responses: { }
tags:
- 'Stock Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
item_id:
type: string
description: 'The id of an existing record in the items table.'
example: consequatur
nullable: false
location_from:
type: string
description: 'Must not be greater than 255 characters.'
example: mqeopfuudtdsufvyvddqa
nullable: false
location_to:
type: string
description: 'The value and location_from must be different. Must not be greater than 255 characters.'
example: mniihfqcoynlazghdtqtq
nullable: false
quantity:
type: number
description: 'Must be at least 0.01.'
example: 80
nullable: false
notes:
type: string
description: ''
example: consequatur
nullable: true
required:
- item_id
- location_from
- location_to
- quantity
/api/v1/stock-levels/low-stock:
get:
summary: 'Get low stock items.'
operationId: getLowStockItems
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Stock Management'
/api/v1/stock-levels:
get:
summary: 'Display a listing of stock levels.'
operationId: displayAListingOfStockLevels
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Stock Management'
post:
summary: 'Store a newly created stock level.'
operationId: storeANewlyCreatedStockLevel
description: ''
parameters: []
responses: { }
tags:
- 'Stock Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
item_id:
type: string
description: 'The id of an existing record in the items table.'
example: consequatur
nullable: false
location:
type: string
description: 'Must not be greater than 255 characters.'
example: mqeopfuudtdsufvyvddqa
nullable: false
on_hand:
type: number
description: 'Must be at least 0.'
example: 45
nullable: false
reserved:
type: number
description: 'Must be at least 0.'
example: 46
nullable: true
reorder_level:
type: number
description: 'Must be at least 0.'
example: 28
nullable: true
required:
- item_id
- location
- on_hand
'/api/v1/stock-levels/{uuid}':
get:
summary: 'Display the specified stock level.'
operationId: displayTheSpecifiedStockLevel
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Stock Management'
put:
summary: 'Update the specified stock level.'
operationId: updateTheSpecifiedStockLevel
description: ''
parameters: []
responses: { }
tags:
- 'Stock Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
item_id:
type: string
description: 'The id of an existing record in the items table.'
example: null
nullable: false
location:
type: string
description: 'Must not be greater than 255 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
on_hand:
type: number
description: 'Must be at least 0.'
example: 1
nullable: false
reserved:
type: number
description: 'Must be at least 0.'
example: 45
nullable: true
reorder_level:
type: number
description: 'Must be at least 0.'
example: 46
nullable: true
delete:
summary: 'Remove the specified stock level.'
operationId: removeTheSpecifiedStockLevel
description: ''
parameters: []
responses: { }
tags:
- 'Stock Management'
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/suppliers/{supplier_uuid}/price-lists':
get:
summary: 'Get supplier price lists.'
operationId: getSupplierPriceLists
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Suppliers
parameters:
-
in: path
name: supplier_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/suppliers:
get:
summary: 'Display a listing of suppliers.'
operationId: displayAListingOfSuppliers
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Suppliers
post:
summary: 'Store a newly created supplier.'
operationId: storeANewlyCreatedSupplier
description: ''
parameters: []
responses: { }
tags:
- Suppliers
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
name:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: false
contact_person:
type: string
description: 'Must not be greater than 255 characters.'
example: qxbajwbpilpmufinllwlo
nullable: true
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: schmitt.beulah@example.org
nullable: true
phone:
type: string
description: 'Must not be greater than 20 characters.'
example: smsjuryvojcybzvrb
nullable: true
address:
type: string
description: 'Must not be greater than 500 characters.'
example: yickznkygloigmkwxphlv
nullable: true
payment_terms:
type: string
description: 'Must not be greater than 255 characters.'
example: azjrcnfbaqywuxhgjjmzu
nullable: true
rating:
type: integer
description: 'Must be at least 0. Must not be greater than 5.'
example: 5
nullable: true
categories:
type: array
description: ''
example:
- consequatur
items:
type: string
status:
type: string
description: ''
example: inactive
nullable: true
enum:
- active
- inactive
- suspended
required:
- code
- name
'/api/v1/suppliers/{uuid}':
get:
summary: 'Display the specified supplier.'
operationId: displayTheSpecifiedSupplier
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Suppliers
put:
summary: 'Update the specified supplier.'
operationId: updateTheSpecifiedSupplier
description: ''
parameters: []
responses: { }
tags:
- Suppliers
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
name:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: false
contact_person:
type: string
description: 'Must not be greater than 255 characters.'
example: qxbajwbpilpmufinllwlo
nullable: true
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: schmitt.beulah@example.org
nullable: true
phone:
type: string
description: 'Must not be greater than 20 characters.'
example: smsjuryvojcybzvrb
nullable: true
address:
type: string
description: 'Must not be greater than 500 characters.'
example: yickznkygloigmkwxphlv
nullable: true
payment_terms:
type: string
description: 'Must not be greater than 255 characters.'
example: azjrcnfbaqywuxhgjjmzu
nullable: true
rating:
type: integer
description: 'Must be at least 0. Must not be greater than 5.'
example: 5
nullable: true
categories:
type: array
description: ''
example:
- consequatur
items:
type: string
status:
type: string
description: ''
example: active
nullable: true
enum:
- active
- inactive
- suspended
delete:
summary: 'Remove the specified supplier.'
operationId: removeTheSpecifiedSupplier
description: ''
parameters: []
responses: { }
tags:
- Suppliers
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/system/settings/key/{key}':
get:
summary: 'Get a system setting by key.'
operationId: getASystemSettingByKey
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'System Settings'
parameters:
-
in: path
name: key
description: 'The key.'
example: consequatur
required: true
schema:
type: string
/api/v1/system/settings:
get:
summary: 'Display a listing of system settings.'
operationId: displayAListingOfSystemSettings
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'System Settings'
post:
summary: 'Store a newly created system setting.'
operationId: storeANewlyCreatedSystemSetting
description: ''
parameters: []
responses: { }
tags:
- 'System Settings'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
key:
type: string
description: 'Must not be greater than 255 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
value:
type: string
description: ''
example: consequatur
nullable: false
description:
type: string
description: 'Must not be greater than 500 characters.'
example: 'Dolorum amet iste laborum eius est dolor.'
nullable: true
type:
type: string
description: ''
example: integer
nullable: true
enum:
- string
- integer
- boolean
- json
required:
- key
- value
'/api/v1/system/settings/{id}':
get:
summary: 'Display the specified system setting.'
operationId: displayTheSpecifiedSystemSetting
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'System Settings'
put:
summary: 'Update the specified system setting.'
operationId: updateTheSpecifiedSystemSetting
description: ''
parameters: []
responses: { }
tags:
- 'System Settings'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
key:
type: string
description: 'Must not be greater than 255 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
value:
type: string
description: ''
example: null
nullable: false
description:
type: string
description: 'Must not be greater than 500 characters.'
example: 'Dolores molestias ipsam sit.'
nullable: true
type:
type: string
description: ''
example: string
nullable: true
enum:
- string
- integer
- boolean
- json
delete:
summary: 'Remove the specified system setting.'
operationId: removeTheSpecifiedSystemSetting
description: ''
parameters: []
responses: { }
tags:
- 'System Settings'
parameters:
-
in: path
name: id
description: 'The ID of the setting.'
example: consequatur
required: true
schema:
type: string
'/api/v1/timesheets/{timesheet_uuid}/submit':
post:
summary: 'Submit timesheet for approval.'
operationId: submitTimesheetForApproval
description: ''
parameters: []
responses: { }
tags:
- Timesheets
parameters:
-
in: path
name: timesheet_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/timesheets/{timesheet_uuid}/approve':
post:
summary: 'Approve timesheet entry.'
operationId: approveTimesheetEntry
description: ''
parameters: []
responses: { }
tags:
- Timesheets
parameters:
-
in: path
name: timesheet_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/timesheets/{timesheet_uuid}/reject':
post:
summary: 'Reject timesheet entry.'
operationId: rejectTimesheetEntry
description: ''
parameters: []
responses: { }
tags:
- Timesheets
parameters:
-
in: path
name: timesheet_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/timesheets/summary:
get:
summary: 'Get timesheet summary.'
operationId: getTimesheetSummary
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Timesheets
/api/v1/timesheets:
get:
summary: 'Display a listing of timesheet entries.'
operationId: displayAListingOfTimesheetEntries
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Timesheets
post:
summary: 'Store a newly created timesheet entry.'
operationId: storeANewlyCreatedTimesheetEntry
description: ''
parameters: []
responses: { }
tags:
- Timesheets
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
project_id:
type: string
description: 'The id of an existing record in the projects table.'
example: consequatur
nullable: false
date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:22'
nullable: false
hours:
type: number
description: 'Must be at least 0.01. Must not be greater than 24.'
example: 12
nullable: false
task_description:
type: string
description: ''
example: consequatur
nullable: true
location_lat:
type: number
description: 'Must be between -90 and 90.'
example: -90
nullable: false
location_lng:
type: number
description: 'Must be between -180 and 180.'
example: -179
nullable: false
location_address:
type: string
description: 'Must not be greater than 500 characters.'
example: eopfuudtdsufvyvddqamn
nullable: true
status:
type: string
description: ''
example: approved
nullable: true
enum:
- draft
- submitted
- approved
- rejected
required:
- project_id
- date
- hours
- location_lat
- location_lng
'/api/v1/timesheets/{uuid}':
get:
summary: 'Display the specified timesheet entry.'
operationId: displayTheSpecifiedTimesheetEntry
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Timesheets
put:
summary: 'Update the specified timesheet entry.'
operationId: updateTheSpecifiedTimesheetEntry
description: ''
parameters: []
responses: { }
tags:
- Timesheets
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
project_id:
type: string
description: 'The id of an existing record in the projects table.'
example: null
nullable: false
date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:22'
nullable: false
hours:
type: number
description: 'Must be at least 0.01. Must not be greater than 24.'
example: 20
nullable: false
task_description:
type: string
description: ''
example: consequatur
nullable: true
location_lat:
type: number
description: 'Must be between -90 and 90.'
example: -90
nullable: false
location_lng:
type: number
description: 'Must be between -180 and 180.'
example: -179
nullable: false
location_address:
type: string
description: 'Must not be greater than 500 characters.'
example: eopfuudtdsufvyvddqamn
nullable: true
status:
type: string
description: ''
example: rejected
nullable: true
enum:
- draft
- submitted
- approved
- rejected
delete:
summary: 'Remove the specified timesheet entry.'
operationId: removeTheSpecifiedTimesheetEntry
description: ''
parameters: []
responses: { }
tags:
- Timesheets
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/training-records/expiring:
get:
summary: 'Get expiring certifications.'
operationId: getExpiringCertifications
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Training Records'
/api/v1/training-records:
get:
summary: 'Display a listing of training records.'
operationId: displayAListingOfTrainingRecords
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Training Records'
post:
summary: 'Store a newly created training record.'
operationId: storeANewlyCreatedTrainingRecord
description: ''
parameters: []
responses: { }
tags:
- 'Training Records'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
user_id:
type: string
description: 'The id of an existing record in the users table.'
example: consequatur
nullable: false
course_name:
type: string
description: 'Must not be greater than 255 characters.'
example: mqeopfuudtdsufvyvddqa
nullable: false
provider:
type: string
description: 'Must not be greater than 255 characters.'
example: mniihfqcoynlazghdtqtq
nullable: true
completion_date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:22'
nullable: false
expiry_date:
type: string
description: 'Must be a valid date. Must be a date after completion_date.'
example: '2106-12-11'
nullable: true
certificate_path:
type: string
description: 'Must not be greater than 500 characters.'
example: mqeopfuudtdsufvyvddqa
nullable: true
status:
type: string
description: ''
example: expired
nullable: true
enum:
- active
- expired
- pending
required:
- user_id
- course_name
- completion_date
'/api/v1/training-records/{uuid}':
get:
summary: 'Display the specified training record.'
operationId: displayTheSpecifiedTrainingRecord
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Training Records'
put:
summary: 'Update the specified training record.'
operationId: updateTheSpecifiedTrainingRecord
description: ''
parameters: []
responses: { }
tags:
- 'Training Records'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
user_id:
type: string
description: 'The id of an existing record in the users table.'
example: null
nullable: false
course_name:
type: string
description: 'Must not be greater than 255 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
provider:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: true
completion_date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:22'
nullable: false
expiry_date:
type: string
description: 'Must be a valid date. Must be a date after completion_date.'
example: '2106-12-11'
nullable: true
certificate_path:
type: string
description: 'Must not be greater than 500 characters.'
example: mqeopfuudtdsufvyvddqa
nullable: true
status:
type: string
description: ''
example: expired
nullable: true
enum:
- active
- expired
- pending
delete:
summary: 'Remove the specified training record.'
operationId: removeTheSpecifiedTrainingRecord
description: ''
parameters: []
responses: { }
tags:
- 'Training Records'
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/vehicles/{vehicle_uuid}/assign':
post:
summary: 'Assign vehicle to project.'
operationId: assignVehicleToProject
description: ''
parameters: []
responses: { }
tags:
- Vehicles
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
project_id:
type: string
description: 'The id of an existing record in the projects table.'
example: consequatur
nullable: false
required:
- project_id
parameters:
-
in: path
name: vehicle_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
'/api/v1/vehicles/{vehicle_uuid}/unassign':
post:
summary: 'Unassign vehicle from project.'
operationId: unassignVehicleFromProject
description: ''
parameters: []
responses: { }
tags:
- Vehicles
parameters:
-
in: path
name: vehicle_uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string
/api/v1/vehicles:
get:
summary: 'Display a listing of vehicles.'
operationId: displayAListingOfVehicles
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Vehicles
post:
summary: 'Store a newly created vehicle.'
operationId: storeANewlyCreatedVehicle
description: ''
parameters: []
responses: { }
tags:
- Vehicles
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
plate_number:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
type:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: true
make:
type: string
description: 'Must not be greater than 255 characters.'
example: qxbajwbpilpmufinllwlo
nullable: true
model:
type: string
description: 'Must not be greater than 255 characters.'
example: auydlsmsjuryvojcybzvr
nullable: true
year:
type: integer
description: 'Must be at least 1900. Must not be greater than 2026.'
example: 2
nullable: true
status:
type: string
description: ''
example: maintenance
nullable: true
enum:
- available
- assigned
- maintenance
- retired
assigned_project_id:
type: string
description: 'The id of an existing record in the projects table.'
example: null
nullable: true
last_service_date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:21'
nullable: true
odometer:
type: integer
description: 'Must be at least 0.'
example: 84
nullable: true
required:
- plate_number
'/api/v1/vehicles/{uuid}':
get:
summary: 'Display the specified vehicle.'
operationId: displayTheSpecifiedVehicle
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Vehicles
put:
summary: 'Update the specified vehicle.'
operationId: updateTheSpecifiedVehicle
description: ''
parameters: []
responses: { }
tags:
- Vehicles
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
plate_number:
type: string
description: 'Must not be greater than 50 characters.'
example: vmqeopfuudtdsufvyvddq
nullable: false
type:
type: string
description: 'Must not be greater than 255 characters.'
example: amniihfqcoynlazghdtqt
nullable: true
make:
type: string
description: 'Must not be greater than 255 characters.'
example: qxbajwbpilpmufinllwlo
nullable: true
model:
type: string
description: 'Must not be greater than 255 characters.'
example: auydlsmsjuryvojcybzvr
nullable: true
year:
type: integer
description: 'Must be at least 1900. Must not be greater than 2026.'
example: 2
nullable: true
status:
type: string
description: ''
example: maintenance
nullable: true
enum:
- available
- assigned
- maintenance
- retired
assigned_project_id:
type: string
description: 'The id of an existing record in the projects table.'
example: null
nullable: true
last_service_date:
type: string
description: 'Must be a valid date.'
example: '2025-11-12T10:13:22'
nullable: true
odometer:
type: integer
description: 'Must be at least 0.'
example: 84
nullable: true
delete:
summary: 'Remove the specified vehicle.'
operationId: removeTheSpecifiedVehicle
description: ''
parameters: []
responses: { }
tags:
- Vehicles
parameters:
-
in: path
name: uuid
description: ''
example: 66529e01-d113-3473-8d6f-9e11e09332ea
required: true
schema:
type: string