Click Maint API (v1)

Download OpenAPI specification:

Getting Started

Welcome to the Click Maint API! The API allows you to programmatically work with your Click Maint data — including Assets, Locations, Parts, Work Orders, and more. Use it to integrate Click Maint with your internal tools, automate workflows, or synchronize data with external systems.

For support, contact support@clickmaint.com

======= <p>For support, contact <a href="mailto:&#115;&#117;&#112;&#x70;&#x6f;&#114;&#116;&#64;&#99;&#x6c;&#x69;&#99;&#107;&#109;&#97;&#x69;&#x6e;&#x74;&#x2e;&#99;&#x6f;&#x6d;">&#115;&#117;&#112;&#x70;&#x6f;&#114;&#116;&#64;&#99;&#x6c;&#x69;&#99;&#107;&#109;&#97;&#x69;&#x6e;&#x74;&#x2e;&#99;&#x6f;&#x6d;</a></p> ">

Welcome to the Click Maint API! The API allows you to programmatically work with your Click Maint data — including Assets, Locations, Parts, Work Orders, and more. Use it to integrate Click Maint with your internal tools, automate workflows, or synchronize data with external systems.

For support, contact support@clickmaint.com

>>>>>>> b782e243 (CMFB-3651: External API Docs - Parts Avg Cost Update)

Creating an API Key

  1. Log in to your Click Maint account as an Admin
  2. Go to Admin Settings > API Keys
  3. Click "+ API Key"
  4. Give the key a descriptive name
  5. Copy and securely store your key (it will only be shown once)

You will use this key to authenticate API requests.

Authentication

All API requests require authentication using an API key.

Include your API key in the Authorization header:

Authorization: Bearer YOUR_API_KEY

Entity ID

Most API requests also require an Entity ID, which identifies the entity (location/business unit) that the request applies to. The Entity ID is specified in the X-Entity-Id header.

To get the Entity ID, you must first make a call to the GET /entities API endpoint.

X-Entity-Id: YOUR_ENTITY_ID

Rate Limiting

API requests are limited to:

  • 300 requests every 5 minutes per IP

Rate limit information is included in response headers:

  • X-RateLimit-Limit: Maximum requests allowed
  • X-RateLimit-Remaining: Requests remaining in current window
  • X-RateLimit-Reset: Unix timestamp when the limit resets
  • retry-after: Amount of seconds to wait until limit resets

Make Your First Request

Once you have your API Key and Entity ID, you can make your first request. Replace the .com with .ca if your account is in our Canadian region.

curl -X GET   "https://app.clickmaint.com/api/v1/assets"   -H "Authorization: Bearer <your-api-key>"   -H "X-Entity-Id: <your-entity-id>"   -H "Accept: application/json"

A successful response confirms your API Key and Entity ID are configured correctly.


Assets

Create new asset

Authorizations:
bearer_auth
header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json

Asset to create

required
object

Responses

Request samples

Content type
application/json
{
  • "asset": {
    • "name": "Air Purifier",
    • "asset_code": "AST-001",
    • "description": "Machine used to purify the air in a shop by removing particles, allergens, and contaminants",
    • "model": "Dyson Pure Cool Link Tower",
    • "manufacturer": "Dyson",
    • "serial_number": "H8tG5nWp",
    • "purchase_date": "2023-08-24",
    • "warranty_exp_date": "2026-08-24",
    • "warranty_expiration_notification": 30,
    • "life_expectancy": 36,
    • "purchase_cost": 549.99,
    • "replacement_cost": 599.99,
    • "salvage_value": 150,
    • "location_id": 12,
    • "parent_id": 44,
    • "asset_types_ids": [
      ],
    • "technicians_ids": [
      ],
    • "parts_ids": [
      ],
    • "vendors_ids": [
      ],
    • "qr_code_attributes": {
      },
    • "uploads_attributes": {
      },
    • "urls_attributes": []
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "name": "Air Purifier",
    • "description": "Machine used to purify the air in a shop by removing particles, allergens, and contaminants",
    • "model": "Dyson Pure Cool Link Tower",
    • "manufacturer": "Dyson",
    • "serial_number": "H8tG5nWp",
    • "warranty_expiration_notification": 30,
    • "life_expectancy": 36,
    • "root_id": 44,
    • "asset_code": "AHU-BLD1-01-001",
    • "status": "online",
    • "purchase_cost": 549.99,
    • "replacement_cost": 599.99,
    • "salvage_value": 150,
    • "parent": {
      },
    • "location": {
      },
    • "technicians": [
      ],
    • "asset_types": [
      ],
    • "parts": [
      ],
    • "urls": [],
    • "vendors": [
      ],
    • "has_children": false,
    • "purchase_date": "2023-08-24",
    • "warranty_exp_date": "2026-08-24",
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

List assets

Returns a paginated list of assets with optional search and sorting capabilities

Authorizations:
bearer_auth
query Parameters
search
string
sort
string
Default: "name asc"
Example: sort=created_at desc

Sort by field ascending or descending

object
Example: filter[name_cont]=building

Filter using filter[field_matcher] syntax

page
integer
Default: 1

Page number

per_page
integer
Default: 50

Items per page

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": [
    • {
      }
    ],
  • "meta": {
    • "entity": {
      },
    • "customer": {
      },
    • "pagination": {
      },
    • "sort": [
      ],
    • "search": "Building A",
    • "filter": {
      }
    }
}

Get asset

Authorizations:
bearer_auth
path Parameters
id
required
integer

Asset ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "name": "Air Purifier",
    • "description": "Machine used to purify the air in a shop by removing particles, allergens, and contaminants",
    • "model": "Dyson Pure Cool Link Tower",
    • "manufacturer": "Dyson",
    • "serial_number": "H8tG5nWp",
    • "warranty_expiration_notification": 30,
    • "life_expectancy": 36,
    • "root_id": 44,
    • "asset_code": "AHU-BLD1-01-001",
    • "status": "online",
    • "purchase_cost": 549.99,
    • "replacement_cost": 599.99,
    • "salvage_value": 150,
    • "parent": {
      },
    • "location": {
      },
    • "technicians": [
      ],
    • "asset_types": [
      ],
    • "parts": [
      ],
    • "urls": [],
    • "vendors": [
      ],
    • "has_children": false,
    • "purchase_date": "2023-08-24",
    • "warranty_exp_date": "2026-08-24",
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Update asset

Authorizations:
bearer_auth
path Parameters
id
required
integer

Asset ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json

Fields to update on Asset

required
object

Responses

Request samples

Content type
application/json
{
  • "asset": {
    • "name": "Air Purifier",
    • "asset_code": "AST-001",
    • "description": "Machine used to purify the air in a shop by removing particles, allergens, and contaminants",
    • "model": "Dyson Pure Cool Link Tower",
    • "manufacturer": "Dyson",
    • "serial_number": "H8tG5nWp",
    • "purchase_date": "2023-08-24",
    • "warranty_exp_date": "2026-08-24",
    • "warranty_expiration_notification": 30,
    • "life_expectancy": 36,
    • "purchase_cost": 549.99,
    • "replacement_cost": 599.99,
    • "salvage_value": 150,
    • "location_id": 12,
    • "parent_id": 44,
    • "asset_types_ids": [
      ],
    • "technicians_ids": [
      ],
    • "parts_ids": [
      ],
    • "vendors_ids": [
      ],
    • "qr_code_attributes": {
      },
    • "uploads_attributes": {
      },
    • "urls_attributes": []
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "name": "Air Purifier",
    • "description": "Machine used to purify the air in a shop by removing particles, allergens, and contaminants",
    • "model": "Dyson Pure Cool Link Tower",
    • "manufacturer": "Dyson",
    • "serial_number": "H8tG5nWp",
    • "warranty_expiration_notification": 30,
    • "life_expectancy": 36,
    • "root_id": 44,
    • "asset_code": "AHU-BLD1-01-001",
    • "status": "online",
    • "purchase_cost": 549.99,
    • "replacement_cost": 599.99,
    • "salvage_value": 150,
    • "parent": {
      },
    • "location": {
      },
    • "technicians": [
      ],
    • "asset_types": [
      ],
    • "parts": [
      ],
    • "urls": [],
    • "vendors": [
      ],
    • "has_children": false,
    • "purchase_date": "2023-08-24",
    • "warranty_exp_date": "2026-08-24",
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Delete asset

Authorizations:
bearer_auth
path Parameters
id
required
integer

Asset ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "error",
  • "message": "string"
}

Entities

List entities

Authorizations:
bearer_auth
query Parameters
search
string
sort
string
Example: sort=created_at desc

Sort by field ascending or descending

object
Example: filter[name_cont]=building

Filter using filter[field_matcher] syntax

page
integer
Default: 1

Page number

per_page
integer
Default: 50

Items per page

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": [
    • {
      }
    ],
  • "meta": {
    • "entity": {
      },
    • "customer": {
      },
    • "pagination": {
      },
    • "sort": [
      ],
    • "search": "Building A",
    • "filter": {
      }
    }
}

Locations

Create new location

Authorizations:
bearer_auth
header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json

Location to create

required
object

Responses

Request samples

Content type
application/json
{
  • "location": {
    • "name": "Main Conference Room",
    • "description": "Large conference room with projector and whiteboard. Seats up to 12 people.",
    • "address": "101-123 Example St",
    • "parent_id": 55,
    • "qr_code_attributes": {
      },
    • "uploads_attributes": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 56,
    • "name": "Main Conference Room",
    • "description": "Large conference room with projector and whiteboard. Seats up to 12 people.",
    • "address": "101-123 Example St",
    • "parent": {
      },
    • "root_id": 55,
    • "path": "Building A > Main Conference Room",
    • "has_children": false,
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by_id": 15,
    • "updated_by_id": 22
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

List locations

Returns a paginated list of locations with optional search and sorting capabilities

Authorizations:
bearer_auth
query Parameters
search
string
sort
string
Default: "name asc"
Example: sort=created_at desc

Sort by field ascending or descending

object
Example: filter[name_cont]=building

Filter using filter[field_matcher] syntax

page
integer
Default: 1

Page number

per_page
integer
Default: 50

Items per page

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": [
    • {
      }
    ],
  • "meta": {
    • "entity": {
      },
    • "customer": {
      },
    • "pagination": {
      },
    • "sort": [
      ],
    • "search": "Building A",
    • "filter": {
      }
    }
}

Get location

Authorizations:
bearer_auth
path Parameters
id
required
integer

Location ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 56,
    • "name": "Main Conference Room",
    • "description": "Large conference room with projector and whiteboard. Seats up to 12 people.",
    • "address": "101-123 Example St",
    • "parent": {
      },
    • "root_id": 55,
    • "path": "Building A > Main Conference Room",
    • "has_children": false,
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by_id": 15,
    • "updated_by_id": 22
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Update location

Authorizations:
bearer_auth
path Parameters
id
required
integer

Location ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json

Fields to update on Location

required
object

Responses

Request samples

Content type
application/json
{
  • "location": {
    • "name": "Main Conference Room",
    • "description": "Large conference room with projector and whiteboard. Seats up to 12 people.",
    • "address": "101-123 Example St",
    • "parent_id": 55,
    • "qr_code_attributes": {
      },
    • "uploads_attributes": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 56,
    • "name": "Main Conference Room",
    • "description": "Large conference room with projector and whiteboard. Seats up to 12 people.",
    • "address": "101-123 Example St",
    • "parent": {
      },
    • "root_id": 55,
    • "path": "Building A > Main Conference Room",
    • "has_children": false,
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by_id": 15,
    • "updated_by_id": 22
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Delete location

Authorizations:
bearer_auth
path Parameters
id
required
integer

Location ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "error",
  • "message": "string"
}

Part Transactions

Create new part transaction

Authorizations:
bearer_auth
header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json

Part transaction to create

One of
part_id
required
integer
type
required
string
Enum: "restock" "cost_update"
  • restock - Restock inventory for stock Part
  • cost_update - Cost update for non-stock Part
quantity
number <decimal> decimal places <= 3 >= 0
Default: 0

Not used for cost_update type and has no effect if set.

cost
number <decimal> decimal places <= 2 >= 0
note
string
object

Upload files (images and documents). Keys must be numeric strings.

  • Image size limit - 150MB
  • Document size limit - 100MB

Responses

Request samples

Content type
application/json
Example
{
  • "part_id": 102,
  • "type": "restock",
  • "quantity": 2,
  • "cost": 26.15,
  • "note": "Purchase order PO-12345 received",
  • "uploads_attributes": {
    • "0": {
      },
    • "1": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "note": "Purchase order PO-12345 received",
    • "type": "restock",
    • "work_order_id": null,
    • "cost": 26.15,
    • "total_cost": 52.3,
    • "quantity": 2,
    • "part": {
      },
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

List part transactions

Authorizations:
bearer_auth
query Parameters
search
string
sort
string
Example: sort=created_at desc

Sort by field ascending or descending

object
Example: filter[part_id_eq]=1

Filter using filter[field_matcher] syntax

page
integer
Default: 1

Page number

per_page
integer
Default: 50

Items per page

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": [
    • {
      }
    ],
  • "meta": {
    • "entity": {
      },
    • "customer": {
      },
    • "pagination": {
      },
    • "sort": [
      ],
    • "search": "Building A",
    • "filter": {
      },
    • "total_used": 2
    }
}

Get part transaction

Authorizations:
bearer_auth
path Parameters
id
required
integer

Part Transaction ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "note": "Purchase order PO-12345 received",
    • "type": "restock",
    • "work_order_id": null,
    • "cost": 26.15,
    • "total_cost": 52.3,
    • "quantity": 2,
    • "part": {
      },
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Parts

Create new part

Authorizations:
bearer_auth
header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json

Part to create

required
object

Responses

Request samples

Content type
application/json
{
  • "part": {
    • "name": "Air Filter",
    • "description": "Fiberglass panel filter",
    • "is_non_stock": false,
    • "on_hand_qty": 6,
    • "min_qty": 5,
    • "desired_qty": 8,
    • "unit_cost": 26.15,
    • "number": "FL_A",
    • "area": "Filters bin",
    • "lead_time": 7,
    • "part_type_id": 3,
    • "storeroom_id": 1,
    • "measurement_unit_id": 2,
    • "assets_ids": [
      ],
    • "vendor_parts_attributes": [
      ],
    • "qr_code_attributes": {
      },
    • "urls_attributes": [],
    • "uploads_attributes": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "name": "Air Filter",
    • "description": "Fiberglass panel filter",
    • "is_non_stock": false,
    • "number": "FL_A",
    • "area": "Filters bin",
    • "lead_time": 7,
    • "on_hand_qty": 6,
    • "min_qty": 5,
    • "desired_qty": 8,
    • "unit_cost": 26.15,
    • "avg_unit_cost": 26.15,
    • "part_type": {
      },
    • "storeroom": {
      },
    • "measurement_unit": {
      },
    • "urls": [],
    • "available": 5,
    • "reserved": 1,
    • "assets": [
      ],
    • "vendors": [
      ],
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

List parts

Authorizations:
bearer_auth
query Parameters
search
string
sort
string
Example: sort=created_at desc

Sort by field ascending or descending

object
Example: filter[name_cont]=building

Filter using filter[field_matcher] syntax

page
integer
Default: 1

Page number

per_page
integer
Default: 50

Items per page

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": [
    • {
      }
    ],
  • "meta": {
    • "entity": {
      },
    • "customer": {
      },
    • "pagination": {
      },
    • "sort": [
      ],
    • "search": "Building A",
    • "filter": {
      }
    }
}

Get part

Authorizations:
bearer_auth
path Parameters
id
required
integer

Part ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "name": "Air Filter",
    • "description": "Fiberglass panel filter",
    • "is_non_stock": false,
    • "number": "FL_A",
    • "area": "Filters bin",
    • "lead_time": 7,
    • "on_hand_qty": 6,
    • "min_qty": 5,
    • "desired_qty": 8,
    • "unit_cost": 26.15,
    • "avg_unit_cost": 26.15,
    • "part_type": {
      },
    • "storeroom": {
      },
    • "measurement_unit": {
      },
    • "urls": [],
    • "available": 5,
    • "reserved": 1,
    • "assets": [
      ],
    • "vendors": [
      ],
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Update part

Authorizations:
bearer_auth
path Parameters
id
required
integer

Part ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json

Fields to update on Part

required
object

Responses

Request samples

Content type
application/json
{
  • "part": {
    • "name": "Air Filter",
    • "description": "Fiberglass panel filter",
    • "min_qty": 5,
    • "desired_qty": 8,
    • "number": "FL_A",
    • "area": "Filters bin",
    • "lead_time": 7,
    • "part_type_id": 3,
    • "storeroom_id": 1,
    • "measurement_unit_id": 2,
    • "assets_ids": [
      ],
    • "vendor_parts_attributes": [
      ],
    • "vendors_ids": [ ],
    • "qr_code_attributes": {
      },
    • "urls_attributes": [],
    • "uploads_attributes": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "name": "Air Filter",
    • "description": "Fiberglass panel filter",
    • "is_non_stock": false,
    • "number": "FL_A",
    • "area": "Filters bin",
    • "lead_time": 7,
    • "on_hand_qty": 6,
    • "min_qty": 5,
    • "desired_qty": 8,
    • "unit_cost": 26.15,
    • "avg_unit_cost": 26.15,
    • "part_type": {
      },
    • "storeroom": {
      },
    • "measurement_unit": {
      },
    • "urls": [],
    • "available": 5,
    • "reserved": 1,
    • "assets": [
      ],
    • "vendors": [
      ],
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Delete part

Authorizations:
bearer_auth
path Parameters
id
required
integer

Part ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "error",
  • "message": "string"
}

Reconcile part inventory

Authorizations:
bearer_auth
path Parameters
id
required
integer

Part ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json
quantity
required
number <decimal> decimal places <= 3

Positive or negative adjustment amount. The resulting on_hand_qty after applying this reconciliation must not be negative.

note
required
string
object

Upload files (images and documents). Keys must be numeric strings.

  • Image size limit - 150MB
  • Document size limit - 100MB

Responses

Request samples

Content type
application/json
{
  • "quantity": -2,
  • "note": "2 units damaged during shipping",
  • "uploads_attributes": {
    • "0": {
      },
    • "1": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "name": "Air Filter",
    • "description": "Fiberglass panel filter",
    • "is_non_stock": false,
    • "number": "FL_A",
    • "area": "Filters bin",
    • "lead_time": 7,
    • "on_hand_qty": 6,
    • "min_qty": 5,
    • "desired_qty": 8,
    • "unit_cost": 26.15,
    • "avg_unit_cost": 26.15,
    • "part_type": {
      },
    • "storeroom": {
      },
    • "measurement_unit": {
      },
    • "urls": [],
    • "available": 5,
    • "reserved": 1,
    • "assets": [
      ],
    • "vendors": [
      ],
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Requests

Create new request

Authorizations:
bearer_auth
header Parameters
X-Entity-Id
required
integer
https://app.clickmaint.ca/api/v1/parts/{id}/reconcile

Request samples

Content type
application/json
{
  • "quantity": -2,
  • "note": "2 units damaged during shipping",
  • "uploads_attributes": {
    • "0": {
      },
    • "1": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "name": "Air Filter",
    • "description": "Fiberglass panel filter",
    • "is_non_stock": false,
    • "number": "FL_A",
    • "area": "Filters bin",
    • "lead_time": 7,
    • "on_hand_qty": 6,
    • "min_qty": 5,
    • "desired_qty": 8,
    • "unit_cost": 26.15,
    • "avg_unit_cost": 26.15,
    • "part_type": {
      },
    • "storeroom": {
      },
    • "measurement_unit": {
      },
    • "urls": [],
    • "available": 5,
    • "reserved": 1,
    • "assets": [
      ],
    • "vendors": [
      ],
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Update part unit cost

Authorizations:
bearer_auth
path Parameters
id
required
integer

Part ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json
cost
required
number decimal places <= 2 >= 0

Sets the new unit_cost for the Part by creating a cost_update transaction.

note
string
object

Upload files (images and documents). Keys must be numeric strings.

  • Image size limit - 150MB
  • Document size limit - 100MB

Responses

Request samples

Content type
application/json
{
  • "cost": 225.5,
  • "note": "Cost updated per invoice INV-9847",
  • "uploads_attributes": {
    • "0": {
      },
    • "1": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "name": "Air Filter",
    • "description": "Fiberglass panel filter",
    • "is_non_stock": false,
    • "number": "FL_A",
    • "area": "Filters bin",
    • "lead_time": 7,
    • "on_hand_qty": 6,
    • "min_qty": 5,
    • "desired_qty": 8,
    • "unit_cost": 26.15,
    • "avg_unit_cost": 26.15,
    • "part_type": {
      },
    • "storeroom": {
      },
    • "measurement_unit": {
      },
    • "urls": [],
    • "available": 5,
    • "reserved": 1,
    • "assets": [
      ],
    • "vendors": [
      ],
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Update part average unit cost

Authorizations:
bearer_auth
path Parameters
id
required
integer

Part ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json
cost
required
number decimal places <= 2 >= 0

Sets the new avg_unit_cost for the Part by creating an average_cost_update transaction.

note
string
object

Upload files (images and documents). Keys must be numeric strings.

  • Image size limit - 150MB
  • Document size limit - 100MB

Responses

Request samples

Content type
application/json
{
  • "cost": 207.35,
  • "note": "Adjusting after supplier rebate credit",
  • "uploads_attributes": {
    • "0": {
      },
    • "1": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "name": "Air Filter",
    • "description": "Fiberglass panel filter",
    • "is_non_stock": false,
    • "number": "FL_A",
    • "area": "Filters bin",
    • "lead_time": 7,
    • "on_hand_qty": 6,
    • "min_qty": 5,
    • "desired_qty": 8,
    • "unit_cost": 26.15,
    • "avg_unit_cost": 26.15,
    • "part_type": {
      },
    • "storeroom": {
      },
    • "measurement_unit": {
      },
    • "urls": [],
    • "available": 5,
    • "reserved": 1,
    • "assets": [
      ],
    • "vendors": [
      ],
    • "qr_code": "guVT5ngMeZ9xPBIk8db4dCGXVU",
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

List part transaction history

Authorizations:
bearer_auth
path Parameters
id
required
integer

Part ID

query Parameters
search
string
sort
string
Example: sort=created_at desc

Sort by field ascending or descending

object
Example: filter[note_cont]=invoice

Filter using filter[field_matcher] syntax

page
integer
Default: 1

Page number

per_page
integer
Default: 50

Items per page

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": [
    • {
      }
    ],
  • "meta": {
    • "entity": {
      },
    • "customer": {
      },
    • "pagination": {
      },
    • "sort": [
      ],
    • "search": "Building A",
    • "filter": {
      },
    • "total_used": 8.5
    }
}

Get part transaction

Authorizations:
bearer_auth
path Parameters
id
required
integer

Part ID

transaction_id
required
integer

Part Transaction ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 102,
    • "note": "Purchase order PO-12345 received",
    • "type": "restock",
    • "work_order_id": null,
    • "cost": 26.15,
    • "total_cost": 52.3,
    • "quantity": 2,
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Requests

Create new request

Authorizations:
bearer_auth
header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json

Request to create

required
object

Responses

Request samples

Content type
application/json
{
  • "work_order_request": {
    • "title": "Fix water leakage in Freezer",
    • "description": "Water leakage due to blocked defrost drain",
    • "status": "on_hold",
    • "notify": true,
    • "priority": "high",
    • "location_id": 122,
    • "asset_id": 45,
    • "categories_ids": [
      ],
    • "technicians_ids": [
      ],
    • "vendors_ids": [
      ],
    • "due_date": "2025-07-17T12:00:00Z",
    • "uploads_attributes": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 1126,
    • "title": "Fix water leakage in Freezer",
    • "description": "Water leakage due to blocked defrost drain",
    • "status": "on_hold",
    • "notify": true,
    • "priority": "high",
    • "work_order_id": 864,
    • "location": {
      },
    • "asset": {
      },
    • "categories": [
      ],
    • "technicians": [
      ],
    • "vendors": [
      ],
    • "due_date": "2025-07-17T12:00:00Z",
    • "completed_at": "2025-07-15T09:30:00Z",
    • "request_portal": {
      },
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

List requests

Authorizations:
bearer_auth
query Parameters
search
string
sort
string
Default: "created_at desc"
Example: sort=created_at desc

Sort by field ascending or descending

object
Example: filter[title_cont]=building

Filter using filter[field_matcher] syntax

page
integer
Default: 1

Page number

per_page
integer
Default: 50

Items per page

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": [
    • {
      }
    ],
  • "meta": {
    • "entity": {
      },
    • "customer": {
      },
    • "pagination": {
      },
    • "sort": [
      ],
    • "search": "Building A",
    • "filter": {
      }
    }
}

Get request

Authorizations:
bearer_auth
path Parameters
id
required
integer

Request ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 1126,
    • "title": "Fix water leakage in Freezer",
    • "description": "Water leakage due to blocked defrost drain",
    • "status": "on_hold",
    • "notify": true,
    • "priority": "high",
    • "work_order_id": 864,
    • "location": {
      },
    • "asset": {
      },
    • "categories": [
      ],
    • "technicians": [
      ],
    • "vendors": [
      ],
    • "due_date": "2025-07-17T12:00:00Z",
    • "completed_at": "2025-07-15T09:30:00Z",
    • "request_portal": {
      },
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Update request

Authorizations:
bearer_auth
path Parameters
id
required
integer

Request ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json

Fields to update on Request

required
object

Responses

Request samples

Content type
application/json
{
  • "work_order_request": {
    • "title": "Fix water leakage in Freezer",
    • "description": "Water leakage due to blocked defrost drain",
    • "status": "on_hold",
    • "notify": true,
    • "priority": "high",
    • "location_id": 122,
    • "asset_id": 45,
    • "categories_ids": [
      ],
    • "technicians_ids": [
      ],
    • "vendors_ids": [
      ],
    • "due_date": "2025-07-17T12:00:00Z",
    • "uploads_attributes": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 1126,
    • "title": "Fix water leakage in Freezer",
    • "description": "Water leakage due to blocked defrost drain",
    • "status": "on_hold",
    • "notify": true,
    • "priority": "high",
    • "work_order_id": 864,
    • "location": {
      },
    • "asset": {
      },
    • "categories": [
      ],
    • "technicians": [
      ],
    • "vendors": [
      ],
    • "due_date": "2025-07-17T12:00:00Z",
    • "completed_at": "2025-07-15T09:30:00Z",
    • "request_portal": {
      },
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Delete request

Authorizations:
bearer_auth
path Parameters
id
required
integer

Request ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "error",
  • "message": "string"
}

Work Orders

Create new work order

Authorizations:
bearer_auth
header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json

Work order to create

required
object

Responses

Request samples

Content type
application/json
{
  • "work_order": {
    • "title": "Fix water leakage in Freezer",
    • "type": "reactive",
    • "description": "Water leakage due to blocked defrost drain",
    • "priority": "high",
    • "work_order_request_id": 864,
    • "due_date": "2025-07-17T12:00:00Z",
    • "completed_at": "2025-07-15T09:30:00Z",
    • "location_id": 122,
    • "asset_id": 45,
    • "status_id": 5,
    • "categories_ids": [
      ],
    • "account_codes_ids": [
      ],
    • "procedure_template_ids": [
      ],
    • "technicians_ids": [
      ],
    • "vendors_ids": [
      ],
    • "notify_vendors_on_create": "yes",
    • "notify_vendors_on_update": "yes",
    • "checklist": [
      ],
    • "uploads_attributes": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 1126,
    • "title": "Fix water leakage in Freezer",
    • "description": "Water leakage due to blocked defrost drain",
    • "priority": "high",
    • "type": "reactive",
    • "pm_schedule_id": 78,
    • "procedures": [
      ],
    • "checklist": [
      ],
    • "status": {
      },
    • "work_order_request": {
      },
    • "asset": {
      },
    • "downtime_tracking": {
      },
    • "categories": [
      ],
    • "account_codes": [
      ],
    • "technicians": [
      ],
    • "vendors": [
      ],
    • "notify_vendors_on_create": "yes",
    • "notify_vendors_on_update": "yes",
    • "location": {
      },
    • "due_date": "2025-07-17T12:00:00Z",
    • "completed_at": "2025-07-15T09:30:00Z",
    • "total_costs": {
      },
    • "active_timer_current_user": {
      },
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

List work orders

Authorizations:
bearer_auth
query Parameters
search
string
sort
string
Default: "created_at desc"
Example: sort=created_at desc

Sort by field ascending or descending

object
Example: filter[title_cont]=building

Filter using filter[field_matcher] syntax

page
integer
Default: 1

Page number

per_page
integer
Default: 50

Items per page

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": [
    • {
      }
    ],
  • "meta": {
    • "entity": {
      },
    • "customer": {
      },
    • "pagination": {
      },
    • "sort": [
      ],
    • "search": "Building A",
    • "filter": {
      }
    }
}

Get work order

Authorizations:
bearer_auth
path Parameters
id
required
integer

Work Order ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 1126,
    • "title": "Fix water leakage in Freezer",
    • "description": "Water leakage due to blocked defrost drain",
    • "priority": "high",
    • "type": "reactive",
    • "pm_schedule_id": 78,
    • "procedures": [
      ],
    • "checklist": [
      ],
    • "status": {
      },
    • "work_order_request": {
      },
    • "asset": {
      },
    • "downtime_tracking": {
      },
    • "categories": [
      ],
    • "account_codes": [
      ],
    • "technicians": [
      ],
    • "vendors": [
      ],
    • "notify_vendors_on_create": "yes",
    • "notify_vendors_on_update": "yes",
    • "location": {
      },
    • "due_date": "2025-07-17T12:00:00Z",
    • "completed_at": "2025-07-15T09:30:00Z",
    • "total_costs": {
      },
    • "active_timer_current_user": {
      },
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Update work order

Authorizations:
bearer_auth
path Parameters
id
required
integer

Work Order ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Request Body schema: application/json

Fields to update on Work Order

required
object

Responses

Request samples

Content type
application/json
{
  • "work_order": {
    • "title": "Fix water leakage in Freezer",
    • "description": "Water leakage due to blocked defrost drain",
    • "priority": "none",
    • "due_date": "2019-08-24T14:15:22Z",
    • "completed_at": "2019-08-24T14:15:22Z",
    • "location_id": 122,
    • "asset_id": 45,
    • "status_id": 1,
    • "categories_ids": [
      ],
    • "account_codes_ids": [
      ],
    • "procedure_template_ids": [
      ],
    • "technicians_ids": [
      ],
    • "vendors_ids": [
      ],
    • "notify_vendors_on_update": "yes",
    • "checklist": [
      ],
    • "uploads_attributes": {
      }
    }
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "data": {
    • "id": 1126,
    • "title": "Fix water leakage in Freezer",
    • "description": "Water leakage due to blocked defrost drain",
    • "priority": "high",
    • "type": "reactive",
    • "pm_schedule_id": 78,
    • "procedures": [
      ],
    • "checklist": [
      ],
    • "status": {
      },
    • "work_order_request": {
      },
    • "asset": {
      },
    • "downtime_tracking": {
      },
    • "categories": [
      ],
    • "account_codes": [
      ],
    • "technicians": [
      ],
    • "vendors": [
      ],
    • "notify_vendors_on_create": "yes",
    • "notify_vendors_on_update": "yes",
    • "location": {
      },
    • "due_date": "2025-07-17T12:00:00Z",
    • "completed_at": "2025-07-15T09:30:00Z",
    • "total_costs": {
      },
    • "active_timer_current_user": {
      },
    • "images": [
      ],
    • "documents": [
      ],
    • "created_at": "2025-07-17T19:19:20Z",
    • "updated_at": "2025-09-24T14:20:25Z",
    • "created_by": {
      },
    • "updated_by": {
      }
    },
  • "meta": {
    • "entity": {
      },
    • "customer": {
      }
    }
}

Delete work order

Authorizations:
bearer_auth
path Parameters
id
required
integer

Work Order ID

header Parameters
X-Entity-Id
required
integer

Entity ID

Responses

Response samples

Content type
application/json
{
  • "status": "error",
  • "message": "string"
}