MaintainX Users API

Operations on Users

Operations 6

POST /users Create new user
GET /users List users
GET /users/{id} Get user
PATCH /users/{id} Update user
DELETE /users/{id} Remove user from organization
POST /users/{id}/messages Create new direct message to a user

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/maintainx-users-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

maintainx-users-api-openapi.yml Raw ↑
openapi: 3.2.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 &gt; Integrations"</a> and click "&plus; 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 Users 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: Users
  description: Operations on Users
  x-traitTag: false
paths:
  /users:
    post:
      summary: Create new user
      requestBody:
        description: User to create
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - firstName
              - lastName
              properties:
                firstName:
                  type: string
                  example: John
                lastName:
                  type: string
                  example: Doe
                role:
                  type:
                  - string
                  - 'null'
                  enum:
                  - ADMIN
                  - MEMBER
                  - OPERATOR
                  - REQUESTER
                  - SERVICE_ACCOUNT
                  example: MEMBER
                customRole:
                  type:
                  - string
                  - 'null'
                  example: Custom Role Name
                  description: Custom role name if the user has a custom role assigned
                email:
                  type:
                  - string
                  - 'null'
                  example: user@example.com
                phoneNumber:
                  type:
                  - string
                  - 'null'
                  example: 415-555-0100
                externalData:
                  description: Extra data that can be attached to the user, for example to help reference to a matching record in an external system.
                  oneOf:
                  - type: object
                    example:
                      popularErpSolutionId: asd732da
                  - type: number
                    example: 732
                  - type: string
                    example: asd732da
                extraFields:
                  type: object
                  description: 'Custom Fields on the entity. The object keys are the exact Custom Field labels, including spaces or special characters. (ie: "Department")'
                  additionalProperties:
                    type: string
                  example:
                    Department: Engineering
                authType:
                  type:
                  - string
                  - 'null'
                  enum:
                  - NORMAL
                  - SAML
                  - OIDC
                  example: SAML
                inviteType:
                  type:
                  - string
                  - 'null'
                  enum:
                  - ALL
                  - EMAIL
                  - SMS
                  - NONE
                  example: ALL
                hourlyRate:
                  type:
                  - integer
                  - 'null'
                  example: 120
                  description: Cost in cents. For example, for $1.20, put 120. Set to `null` to set the user's rate to organization default hourly rate if defined, otherwise it would set the rate to the user's hourly rate defined in any work order. If none is defined, setting `null` will set the user's hourly rate to `null`
      responses:
        '201':
          description: Successfully created user
          content:
            application/json:
              schema:
                type: object
                required:
                - id
                properties:
                  id:
                    type: integer
                    example: 963
                    description: Global ID of the user
        '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:
                          type:
                          - string
                          - 'null'
                        fieldValue:
                          oneOf:
                          - type: string
                          - type: number
                          - type: boolean
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          description: Failed to create the user
          content:
            application/json:
              schema:
                type: object
                required:
                - errors
                example:
                  errors:
                  - error: You do not have permission to create this user.
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      required:
                      - error
                      properties:
                        error:
                          type: string
                        fieldPath:
                          type:
                          - string
                          - 'null'
                        fieldValue:
                          oneOf:
                          - type: string
                          - type: number
                          - type: boolean
        '404':
          description: Could not find the specified User.
          content:
            application/json:
              schema:
                type: object
                required:
                - error
                properties:
                  error:
                    type: string
                    example: User Not Found
      tags:
      - Users
      parameters:
      - 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'
    get:
      summary: List users
      description: Endpoint used to list user resources
      parameters:
      - name: cursor
        in: query
        schema:
          description: Last pagination reference
          type: string
      - name: limit
        in: query
        schema:
          description: max number of Users returned
          type: integer
          minimum: 1
          maximum: 200
          default: 100
      - name: onlyAssignable
        schema:
          type: boolean
          description: Will only show users that can be assigned to a work order
        in: query
      - name: email
        schema:
          type: array
          description: 'Filter users by email. You can filter for multiple users by specifying multiple emails like so: `/users?email=user1@example.com&email=user2@example.com`. Note that if you are using special characters in a url, you will need to URI encode them in order for us to interprete them correctly. For example, `+` should be encoded as `%2B` and though we accept `@`, they should still be encoded as `%40`. So filtering for email `user1+test@example.com`, you would use `/users?email=user1%2Btest%example.com` in your URI'
          items:
            type: string
        in: query
      - in: query
        name: expand
        schema:
          title: Expand specific fields in the request
          description: 'To expand multiple fields: `expand=role&expand=extra_fields`'
          type: array
          items:
            type: string
            enum:
            - role
            - extra_fields
      - 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 Users list
          content:
            application/json:
              schema:
                type: object
                required:
                - users
                properties:
                  users:
                    type: array
                    items:
                      type: object
                      required:
                      - id
                      - firstName
                      - lastName
                      properties:
                        id:
                          type: integer
                          example: 963
                          description: Global ID of the user
                        firstName:
                          type: string
                          example: John
                        lastName:
                          type: string
                          example: Doe
                        email:
                          type:
                          - string
                          - 'null'
                          example: user@example.com
                        phoneNumber:
                          type:
                          - string
                          - 'null'
                          example: 415-555-0100
                        authType:
                          type:
                          - string
                          - 'null'
                          enum:
                          - NORMAL
                          - SAML
                          - OIDC
                          example: SAML
                        hourlyRate:
                          type:
                          - integer
                          - 'null'
                          example: 120
                          description: Cost in cents. For example, for $1.20, the value will be 120. If the hourly rate is not set specifically for the user, the API will return the default organization hourly rate, if that is also not set, it will return the hourly rate that is specifically set for the user in any work order. Otherwise, it would be `undefined`
                        lastVisitedAt:
                          type:
                          - string
                          - 'null'
                          format: date-time
                          example: '2026-05-06T12:34:56.000Z'
                          description: Last time the user visited this organization. Scoped to the organization the request is made against. `null` if the user has never visited (e.g. an invited user who has not yet accepted). For service accounts, returns the organization-user creation date.
                        role:
                          type: string
                          enum:
                          - ADMIN
                          - MEMBER
                          - OPERATOR
                          - REQUESTER
                          - SERVICE_ACCOUNT
                          example: MEMBER
                          description: (expand with query parameter)
                        extraFields:
                          type: object
                          description: 'Custom Fields on the entity. The object keys are the exact Custom Field labels, including spaces or special characters. (ie: "Department") (expand with query parameter)'
                          additionalProperties:
                            type: string
                          example:
                            Department: Engineering
                  nextCursor:
                    description: The cursor to retrieve the next page of Users.
                    type:
                    - string
                    - 'null'
                  nextPageUrl:
                    description: Path with query parameters that can be used to retrieve the next page of Users.
                    type:
                    - string
                    - 'null'
        '400':
          description: Error with query
          content:
            application/json:
              schema:
                type: object
                required:
                - error
                properties:
                  error:
                    description: Description of error
                    type: string
        '401':
          $ref: '#/components/responses/UnauthorizedError'
      tags:
      - Users
  /users/{id}:
    get:
      summary: Get user
      parameters:
      - schema:
          type: integer
        name: id
        in: path
        required: true
        description: ID of the user
        example: '1'
      - 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 retrieved user's information
          content:
            application/json:
              schema:
                type: object
                required:
                - user
                properties:
                  user:
                    type: object
                    required:
                    - id
                    - firstName
                    - lastName
                    properties:
                      id:
                        type: integer
                        example: 963
                        description: Global ID of the user
                      firstName:
                        type: string
                        example: John
                      lastName:
                        type: string
                        example: Doe
                      role:
                        type:
                        - string
                        - 'null'
                        enum:
                        - ADMIN
                        - MEMBER
                        - OPERATOR
                        - REQUESTER
                        - SERVICE_ACCOUNT
                        example: MEMBER
                      customRole:
                        type:
                        - string
                        - 'null'
                        example: Custom Role Name
                        description: Custom role name if the user has a custom role assigned
                      email:
                        type:
                        - string
                        - 'null'
                        example: user@example.com
                      phoneNumber:
                        type:
                        - string
                        - 'null'
                        example: 415-555-0100
                      removedFromOrganization:
                        type: boolean
                        example: true
                      authType:
                        type:
                        - string
                        - 'null'
                        enum:
                        - NORMAL
                        - SAML
                        - OIDC
                        example: SAML
                      hourlyRate:
                        type:
                        - integer
                        - 'null'
                        example: 120
                        description: Cost in cents. For example, for $1.20, the value will be 120. If the hourly rate is not set specifically for the user, the API will return the default organization hourly rate, if that is also not set, it will return the hourly rate that is specifically set for the user in any work order. Otherwise, it would be `undefined`
                      externalData:
                        description: Extra data that can be attached to the user, for example to help reference to a matching record in an external system.
                        oneOf:
                        - type: object
                          example:
                            popularErpSolutionId: asd732da
                        - type: number
                          example: 732
                        - type: string
                          example: asd732da
                      extraFields:
                        type: object
                        description: 'Custom Fields on the entity. The object keys are the exact Custom Field labels, including spaces or special characters. (ie: "Department")'
                        additionalProperties:
                          type: string
                        example:
                          Department: Engineering
                      lastVisitedAt:
                        type:
                        - string
                        - 'null'
                        format: date-time
                        example: '2026-05-06T12:34:56.000Z'
                        description: Last time the user visited this organization. Scoped to the organization the request is made against. `null` if the user has never visited (e.g. an invited user who has not yet accepted). For service accounts, returns the organization-user creation date.
        '400':
          description: Error with query
          content:
            application/json:
              schema:
                type: object
                required:
                - error
                properties:
                  error:
                    description: Description of error
                    type: string
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          description: Could not find the specified user or the user cannot access it.
          content:
            application/json:
              schema:
                type: object
                required:
                - error
                properties:
                  error:
                    type: string
                    example: Not Found.
      tags:
      - Users
    patch:
      summary: Update user
      parameters:
      - schema:
          type: integer
        name: id
        in: path
        required: true
        description: ID of the user
        example: '1'
      - 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: User to update
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                firstName:
                  type: string
                  example: John
                lastName:
                  type: string
                  example: Doe
                email:
                  type:
                  - string
                  - 'null'
                  example: user@example.com
                phoneNumber:
                  type:
                  - string
                  - 'null'
                  example: 415-555-0100
                role:
                  type:
                  - string
                  - 'null'
                  enum:
                  - ADMIN
                  - MEMBER
                  - OPERATOR
                  - REQUESTER
                  - SERVICE_ACCOUNT
                  example: MEMBER
                customRole:
                  type:
                  - string
                  - 'null'
                  example: Custom Role Name
                  description: Custom role name if the user has a custom role assigned
                authType:
                  type:
                  - string
                  - 'null'
                  enum:
                  - NORMAL
                  - SAML
                  - OIDC
                  example: SAML
                externalData:
                  description: Extra data that can be attached to the user, for example to help reference to a matching record in an external system.
                  oneOf:
                  - type: object
                    example:
                      popularErpSolutionId: asd732da
                  - type: number
                    example: 732
                  - type: string
                    example: asd732da
                extraFields:
                  type: object
                  description: 'Custom Fields on the entity. The object keys are the exact Custom Field labels, including spaces or special characters. (ie: "Department")'
                  additionalProperties:
                    type: string
                  example:
                    Department: Engineering
                hourlyRate:
                  type:
                  - integer
                  - 'null'
                  example: 120
                  description: Cost in cents. For example, for $1.20, put 120. Set to `null` to set the user's rate to organization default hourly rate if defined, otherwise it would set the rate to the user's hourly rate defined in any work order. If none is defined, setting `null` will set the user's hourly rate to `null`
      responses:
        '200':
          description: Successfully edited user
          content:
            application/json:
              schema:
                type: object
                required:
                - user
                properties:
                  user:
                    type: object
                    required:
                    - id
                    properties:
                      id:
                        type: integer
                        example: 963
                        description: Global ID of the user
                      firstName:
                        type: string
                        example: John
                      lastName:
                        type: string
                        example: Doe
                      role:
                        type:
                        - string
                        - 'null'
                        enum:
                        - ADMIN
                        - MEMBER
                        - OPERATOR
                        - REQUESTER
                        - SERVICE_ACCOUNT
                        example: MEMBER
                      customRole:
                        type:
                        - string
                        - 'null'
                        example: Custom Role Name
                        description: Custom role name if the user has a custom role assigned
                      email:
                        type:
                        - string
                        - 'null'
                        example: user@example.com
                      phoneNumber:
                        type:
                        - string
                        - 'null'
                        example: 415-555-0100
                      removedFromOrganization:
                        type: boolean
                        example: true
                      authType:
                        type:
                        - string
                        - 'null'
                        enum:
                        - NORMAL
                        - SAML
                        - OIDC
                        example: SAML
                      hourlyRate:
                        type:
                        - integer
                        - 'null'
                        example: 120
                        description: Cost in cents. For example, for $1.20, the value will be 120. If the hourly rate is not set specifically for the user, the API will return the default organization hourly rate, if that is also not set, it will return the hourly rate that is specifically set for the user in any work order. Otherwise, it would be `undefined`
                      externalData:
                        description: Extra data that can be attached to the user, for example to help reference to a matching record in an external system.
                        oneOf:
                        - type: object
                          example:
                            popularErpSolutionId: asd732da
                        - type: number
                          example: 732
                        - type: string
                          example: asd732da
                      extraFields:
                        type: object
                        description: 'Custom Fields on the entity. The object keys are the exact Custom Field labels, including spaces or special characters. (ie: "Department")'
                        additionalProperties:
                          type: string
                        example:
                          Department: Engineering
                      lastVisitedAt:
                        type:
                        - string
                        - 'null'
                        format: date-time
                        example: '2026-05-06T12:34:56.000Z'
                        description: Last time the user visited this organization. Scoped to the organization the request is made against. `null` if the user has never visited (e.g. an invited user who has not yet accepted). For service accounts, returns the organization-user creation date.
        '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:
                          type:
                          - string
                          - 'null'
                        fieldValue:
                          oneOf:
                          - type: string
                          - type: number
                          - type: boolean
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          description: Cannot edit Auth Type
          content:
            application/json:
              schema:
                type: object
                required:
                - errors
                example:
                  errors:
                  - error: You do not have permission to edit the Auth Type from SAML to NORMAL.
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      required:
                      - error
                      properties:
                        error:
                          type: string
                        fieldPath:
                          type:
                          - string
                          - 'null'
                        fieldValue:
                          oneOf:
                          - type: string
                          - type: number
                          - type: boolean
        '404':
          description: Could not find the specified user.
          content:
            application/json:
              schema:
                type: object
                required:
                - error
                properties:
                  error:
                    type: string
                    example: user Not Found
      tags:
      - Users
    delete:
      summary: Remove user from organization
      parameters:
      - schema:
          type: integer
        name: id
        in: path
        required: true
        description: ID of the user
        example: '1'
      - 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'
      responses:
        '204':
          description: Successfully removed user
        '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:
                          type:
                          - string
                          - 'null'
                        fieldValue:
                          oneOf:
                          - type: string
                          - type: number
                          - type: boolean
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          description: Could not find the specified user.
          content:
            application/json:
              schema:
                type: object
                required:
                - error
                properties:
                  error:
                    type: string
                    example: user Not Found
      tags:
      - Users
  /users/{id}/messages:
    post:
      summary: Create new direct message to a user
      parameters:
      - schema:
          type: integer
        name: id
        in: path
        required: true
        description: ID of the user
        example: '1'
      - 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: Message to create
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - content
              properties:
                content:
                  type: string
          

# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/maintainx/refs/heads/main/openapi/maintainx-users-api-openapi.yml