OpenAPI Specification
openapi: 3.0.0
info:
description: Welcome to the MaintainX API documentation!<br/><br/>You can use the MaintainX API to programmatically interact with all the entities in MaintainX. Use it to retrieve and manage data of Work Orders, Work Requests, Assets, and more!<br/><br/>To get started, in your MaintainX account go to <a href="https://app.getmaintainx.com/settings/integrations/apiKeys">"Settings > Integrations"</a> and click "+ New Key" button to generate a new Rest API key.<br/><br/><b>Missing something?</b><br/>Don't hesitate to reach out <a href="mailto:support@getmaintainx.com">support@getmaintainx.com</a><br/><br/>
version: '1'
title: MaintainX Asset Criticalities Custom Fields API
contact:
url: https://www.getmaintainx.com/
name: Support
email: support@getmaintainx.com
x-logo:
url: https://maintainx-static.s3-us-west-2.amazonaws.com/img/default-org-logo.png
backgroundColor: '#FFFFFF'
altText: MaintainX logo
servers:
- url: https://api.getmaintainx.com/v1
description: Endpoint
security:
- Bearer: []
tags:
- name: Custom Fields
description: Operations on Custom Fields
x-traitTag: false
paths:
/customfields/{entity}:
post:
summary: Create custom field
parameters:
- schema:
type: string
enum:
- assets
- locations
- parts
- workOrders
- vendors
- purchaseOrders
- lineItemPurchaseOrders
name: entity
in: path
required: true
description: Type of entity
example: assets
- schema:
type: boolean
description: Set `skipWebhook=true`, `skipWebhook=1` or `skipWebhook=yes` to skip all webhooks upon successful operation on the endpoint. [Learn more about webhooks](#tag/Subscriptions-and-Webhooks)
name: skipWebhook
in: query
required: false
- schema:
type: integer
description: Required if using a multi organizations token
name: x-organization-id
in: header
required: false
example: '1'
requestBody:
description: Custom fields to create
required: true
content:
application/json:
schema:
type: object
description: The custom field data
required:
- fields
properties:
fields:
type: array
items:
type: object
required:
- label
- type
properties:
label:
type: string
example: Date Purchased
type:
type: string
enum:
- oneline
- multiline
- number
- singleSelect
- date
- datetime
- link
options:
nullable: true
type: array
items:
type: string
includeInRecurrence:
nullable: true
type: boolean
description: Only relevent in the context of Work Orders
required:
nullable: true
type: boolean
description: Mark this field as required. This only affect the frontend.
unlisted:
nullable: true
type: boolean
description: Mark this custom field as unlisted. Once unlisted it will only be editable through the Rest API. When the custom field contains data, it will be displayed in the frontend; otherwise, it will remain hidden.
responses:
'200':
description: Successfully created the custom fields
content:
application/json:
schema:
type: array
items:
type: object
required:
- id
- label
- type
- sortOrder
properties:
id:
type: number
description: ID of the custom field
example: 1
label:
type: string
description: The label of the custom field
example: Date Purchased
sortOrder:
type: integer
description: The order which the field will be displayed in the UI
example: 25
type:
type: string
enum:
- oneline
- multiline
- number
- singleSelect
- date
- datetime
- link
options:
type: array
description: The possible choices to the field (if applicable).
items:
type: string
'400':
description: OrganizationId was not provided
content:
application/json:
schema:
type: object
required:
- errors
example:
errors:
- error: Missing x-organization-id header.
properties:
errors:
type: array
items:
type: object
required:
- error
properties:
error:
type: string
fieldPath:
nullable: true
type: string
fieldValue:
nullable: true
oneOf:
- type: string
- type: number
- type: boolean
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
description: Failed to create the custom field
content:
application/json:
schema:
type: object
required:
- errors
example:
errors:
- error: User don't have the right permissions
properties:
errors:
type: array
items:
type: object
required:
- error
properties:
error:
type: string
fieldPath:
nullable: true
type: string
fieldValue:
nullable: true
oneOf:
- type: string
- type: number
- type: boolean
'404':
description: Could not find the specified custom field.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: string
example: custom field Not Found
tags:
- Custom Fields
get:
summary: List custom fields
parameters:
- schema:
type: string
enum:
- assets
- locations
- parts
- workOrders
- vendors
- purchaseOrders
- lineItemPurchaseOrders
name: entity
in: path
required: true
description: Type of entity
example: assets
- schema:
type: integer
description: Required if using a multi organizations token
name: x-organization-id
in: header
required: false
example: '1'
responses:
'200':
description: Successfully fetched the custom fields
content:
application/json:
schema:
type: array
items:
type: object
required:
- id
- label
- type
- sortOrder
properties:
id:
type: number
description: ID of the custom field
example: 1
label:
type: string
description: The label of the custom field
example: Date Purchased
sortOrder:
type: integer
description: A weighted value used to sort the custom fields. Fields are sorted lowest to highest. This is different from sortIndex.
example: 25
type:
type: string
enum:
- oneline
- multiline
- number
- singleSelect
- date
- datetime
- link
required:
nullable: true
type: boolean
description: This field is marked as required. This only affect the frontend.
unlisted:
nullable: true
type: boolean
description: This field is marked as unlisted. Once unlisted it will only be editable through the Rest API. When the custom field contains data, it will be displayed in the frontend; otherwise, it will remain hidden.
options:
type: array
description: The possible choices to the field (if applicable).
items:
type: string
'400':
description: OrganizationId was not provided
content:
application/json:
schema:
type: object
required:
- errors
example:
errors:
- error: Missing x-organization-id header.
properties:
errors:
type: array
items:
type: object
required:
- error
properties:
error:
type: string
fieldPath:
nullable: true
type: string
fieldValue:
nullable: true
oneOf:
- type: string
- type: number
- type: boolean
'401':
$ref: '#/components/responses/UnauthorizedError'
'404':
description: Could not find the specified custom field.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: string
example: custom field Not Found
tags:
- Custom Fields
/customfields/{entity}/{id}:
patch:
summary: Edit custom field
parameters:
- schema:
type: integer
name: id
in: path
required: true
description: ID of the custom field
example: '1'
- schema:
type: string
enum:
- assets
- locations
- parts
- workOrders
- vendors
- purchaseOrders
- lineItemPurchaseOrders
name: entity
in: path
required: true
description: Type of entity
example: assets
- schema:
type: boolean
description: Set `skipWebhook=true`, `skipWebhook=1` or `skipWebhook=yes` to skip all webhooks upon successful operation on the endpoint. [Learn more about webhooks](#tag/Subscriptions-and-Webhooks)
name: skipWebhook
in: query
required: false
requestBody:
description: Custom field to create
required: true
content:
application/json:
schema:
type: object
description: The custom field data
required:
- field
properties:
field:
type: object
properties:
label:
type: string
example: Date Purchased
type:
type: string
enum:
- oneline
- multiline
- number
- singleSelect
- date
- datetime
- link
options:
nullable: true
type: array
items:
type: string
includeInRecurrence:
nullable: true
type: boolean
description: Only relevent in the context of Work Orders
sortIndex:
type: integer
description: 'Represents the actual index (zero based) that you wish the element to be set at. For example, if you have 6 custom fields, and would like to set the field as the second element, you would pass sortIndex: 1. This would in turn affect the sortOrder weight.'
required:
nullable: true
type: boolean
description: Mark this custom field as required
unlisted:
nullable: true
type: boolean
description: Mark this custom field as unlisted
responses:
'204':
description: Successfully edited the custom field
'400':
description: Failed to edit the custom field
content:
application/json:
schema:
type: object
required:
- errors
example:
errors:
- error: Invalid Property
properties:
errors:
type: array
items:
type: object
required:
- error
properties:
error:
type: string
fieldPath:
nullable: true
type: string
fieldValue:
nullable: true
oneOf:
- type: string
- type: number
- type: boolean
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
description: Failed to edit the custom field
content:
application/json:
schema:
type: object
required:
- errors
example:
errors:
- error: User don't have the right permissions
properties:
errors:
type: array
items:
type: object
required:
- error
properties:
error:
type: string
fieldPath:
nullable: true
type: string
fieldValue:
nullable: true
oneOf:
- type: string
- type: number
- type: boolean
'404':
description: Could not find the specified custom field.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: string
example: custom field Not Found
tags:
- Custom Fields
delete:
summary: Delete custom field
parameters:
- schema:
type: integer
name: id
in: path
required: true
description: ID of the custom field
example: '1'
- schema:
type: string
enum:
- assets
- locations
- parts
- workOrders
- vendors
- purchaseOrders
- lineItemPurchaseOrders
name: entity
in: path
required: true
description: Type of entity
example: assets
- schema:
type: boolean
description: Set `skipWebhook=true`, `skipWebhook=1` or `skipWebhook=yes` to skip all webhooks upon successful operation on the endpoint. [Learn more about webhooks](#tag/Subscriptions-and-Webhooks)
name: skipWebhook
in: query
required: false
responses:
'204':
description: Successfully deleted the Custom Fields
'401':
$ref: '#/components/responses/UnauthorizedError'
'404':
description: Could not find the specified Custom Fields.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: string
example: Custom Fields Not Found
'500':
description: Internal server error.
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: string
example: Internal server error.
tags:
- Custom Fields
components:
responses:
UnauthorizedError:
description: Invalid token
securitySchemes:
Bearer:
description: "\n <p>Authenticate by adding the following HTTP header to your requests:</p>\n<pre>Authorization: bearer {{token}}</pre>\n<p>The <code>token</code> can be generated in your MaintainX account. Go to <a href=\"https://app.getmaintainx.com/settings/integrations/apiKeys\">\"Settings > Integrations > API Keys\"</a> to generate a key for your user.</p>\n"
type: http
scheme: bearer
bearerFormat: JWT
x-webhooks:
API_TOKEN_CREATED:
post:
summary: API Token Created
security: []
description: Fires when a REST API token is generated.
tags:
- Subscriptions & Webhooks
requestBody:
content:
application/json:
schema:
type: object
required:
- orgId
- actorId
- occurredAt
properties:
orgId:
type: number
description: Global ID of the organization
example: 321
actorId:
type: number
description: User ID of the actor who triggered the event
example: 100
occurredAt:
type: string
format: date-time
description: Date & time at which the event occurred
example: '2022-01-01T00:00:00.000Z'
operationId: API_TOKEN_CREATED
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
API_TOKEN_REVOKED:
post:
summary: API Token Revoked
security: []
description: Fires when a REST API token is revoked.
tags:
- Subscriptions & Webhooks
requestBody:
content:
application/json:
schema:
type: object
required:
- orgId
- actorId
- occurredAt
properties:
orgId:
type: number
description: Global ID of the organization
example: 321
actorId:
type: number
description: User ID of the actor who triggered the event
example: 100
occurredAt:
type: string
format: date-time
description: Date & time at which the event occurred
example: '2022-01-01T00:00:00.000Z'
operationId: API_TOKEN_REVOKED
responses:
'200':
description: Return a 200 status to indicate that the data was received successfully
ASSET_STATUS_CHANGE:
post:
summary: Asset Status Change
security: []
description: ''
tags:
- Subscriptions & Webhooks
requestBody:
content:
application/json:
schema:
type: object
required:
- assetId
- orgId
- oldStatus
- newStatus
- occurredAt
properties:
assetId:
type: number
description: Global ID of the asset
example: 42
orgId:
type: number
description: Global ID of the organization
example: 21
oldStatus:
description: Previous status of the asset
type: object
properties:
id:
type: number
example: 42
description: Global ID of the asset status.
customStatus:
type: object
required:
- label
properties:
id:
type: number
example: Global ID of the custom asset status.
label:
type: string
example: Decommissioned
createdAt:
type: string
format: date-time
description: Date & time at which the asset custom status was created.
example: '2022-01-01T12:34:56.123Z'
updatedAt:
type: string
format: date-time
description: Date & time at which the asset custom status was last updated.
example: '2022-01-01T12:34:56.123Z'
deletedAt:
type: string
nullable: true
description: Date at which the asset custom status was deleted.
format: date-time
example: '2022-01-01T12:34:56.123Z'
downtimeType:
type: string
nullable: true
example: null
enum:
- PLANNED
- UNPLANNED
deprecated: true
description: Downtime type on asset custom statuses will always return null. Use downtime type on asset status instead.
description: Custom status assigned to asset.
nullable: true
customStatusId:
type: number
description: Id of the custom status assigned to asset.
nullable: true
example: 53
status:
type: string
example: OFFLINE
description: Asset status value.
enum:
- IGNORE
- OFFLINE
- ONLINE
downtimeType:
type: string
nullable: true
example: PLANNED
enum:
- PLANNED
- UNPLANNED
startedAt:
type: string
format: date-time
example: '2022-01-01T12:34:56.123Z'
description: Asset status effective start date.
endedAt:
type: string
format: date-time
example: '2022-01-01T12:34:56.123Z'
description: Asset status effective end date.
nullable: true
description:
type: string
example: Overheated - needs servicing.
nullable: true
createdAt:
type: string
format: date-time
example: '2022-01-01T12:34:56.123Z'
readOnly: true
description: Date & time at which the asset status was created.
updatedAt:
type: string
format: date-time
example: '2022-01-01T12:34:56.123Z'
readOnly: true
description: Date & time at which the asset status was last updated.
deletedAt:
type: string
format: date-time
example: '2022-01-01T12:34:56.123Z'
readOnly: true
description: Date & time at which the asset status was deleted.
nullable: true
example:
status: ONLINE
startedAt: '2022-01-01T12:34:56.123Z'
endedAt: '2022-01-01T12:34:56.123Z'
description: Back online after scheduled maintenance
createdAt: '2022-01-01T12:34:56.123Z'
updatedAt: '2022-01-01T12:34:56.123Z'
deletedAt: '2022-01-01T12:34:56.123Z'
newStatus:
description: New status of the asset
type: object
properties:
id:
type: number
example: 42
description: Global ID of the asset status.
customStatus:
type: object
required:
- label
properties:
id:
type: number
example: Global ID of the custom asset status.
label:
type: string
example: Decommissioned
createdAt:
type: string
format: date-time
description: Date & time at which the asset custom status was created.
example: '2022-01-01T12:34:56.123Z'
updatedAt:
type: string
format: date-time
description: Date & time at which the asset custom status was last updated.
example: '2022-01-01T12:34:56.123Z'
deletedAt:
type: string
nullable: true
description: Date at which the asset custom status was deleted.
format: date-time
example: '2022-01-01T12:34:56.123Z'
downtimeType:
type: string
nullable: true
example: null
enum:
- PLANNED
- UNPLANNED
deprecated: true
description: Downtime type on asset custom statuses will always return null. Use downtime type on asset status instead.
description: Custom status assigned to asset.
nullable: true
customStatusId:
type: number
description: Id of the custom status assigned to asset.
nullable: true
example: 53
status:
type: string
example: OFFLINE
description: Asset status value.
enum:
- IGNORE
- OFFLINE
- ONLINE
downtimeType:
type: string
nullable: true
example: PLANNED
enum:
- PLANNED
- UNPLANNED
startedAt:
type: string
format: date-time
example: '2022-01-01T12:34:56.123Z'
description: Asset status effective start date.
endedAt:
type: string
format: date-time
example: '2022-01-01T12:34:56.123Z'
description: Asset status effective end date.
nullable: true
description:
type: string
example: Overheated - needs servicing.
nullable: true
createdAt:
type: string
format: date-time
example: '2022-01-01T12:34:56.123Z'
readOnly: true
description: Date & time at which the asset status was created.
updatedAt:
type: string
format: date-time
example: '2022-01-01T12:34:56.123Z'
readOnly: true
description: Date & time at which the asset status was last updated.
deletedAt:
type: string
format: date-time
example: '2022-01-01T12:34:56.123Z'
readOnly: true
description: Date & time at which the asset status was deleted.
nullable: true
example:
status: OFFLINE
customStatus:
id: 13
label: Technical issues
downtimeType: UNPLANNED
createdAt: '2022-01-01T12:34:56.123Z'
updatedAt: '2022-01-01T12:34:56.123Z'
startedAt: '2022-01-01T12:34:56.123Z'
description: Overheated - needs servicing.
createdAt: '2022-01-01T12:34:56.123Z'
updatedAt: '2022-01-01T12:34:56.123Z'
occurredAt:
type: string
format: date-time
# --- truncated at 32 KB (200 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/maintainx/refs/heads/main/openapi/maintainx-custom-fields-api-openapi.yml