openapi: 3.0.3 info: title: IT Glue / MyGlue API version: "2026-05-24" description: > Focused IT Glue REST API wrapper for MSP automation. The API follows the JSON:API media type and uses an x-api-key header. This spec covers the read surface used by existing read-only integrations plus the non-destructive write endpoints needed for contact sync, password mirroring, configuration creation, and onboarding documentation. x-auth-key-url: https://api.itglue.com/developer/ x-auth-instructions: "Generate an API key in your IT Glue account settings, then choose the base URL for your IT Glue data region." externalDocs: description: Official IT Glue developer documentation url: https://api.itglue.com/developer/ servers: - url: https://api.itglue.com description: IT Glue default data centre - url: https://api.eu.itglue.com description: IT Glue EU data centre - url: https://api.au.itglue.com description: IT Glue Australia data centre security: - ItGlueApiKey: [] tags: - name: Organizations - name: Contacts - name: Passwords - name: Configurations - name: Documents paths: /organizations: get: operationId: listOrganizations tags: [Organizations] summary: List organizations parameters: - $ref: "#/components/parameters/FilterId" - $ref: "#/components/parameters/FilterName" - $ref: "#/components/parameters/PageNumber" - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/Sort" responses: "200": $ref: "#/components/responses/JsonApiCollection" /organizations/{id}: get: operationId: getOrganization tags: [Organizations] summary: Retrieve one organization parameters: - $ref: "#/components/parameters/Id" responses: "200": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" /contacts: get: operationId: listContacts tags: [Contacts] summary: List contacts description: Use filter[email] or filter[organization_id] before creating contacts to avoid duplicates. parameters: - $ref: "#/components/parameters/FilterId" - $ref: "#/components/parameters/FilterName" - $ref: "#/components/parameters/FilterOrganizationId" - name: filter[email] in: query schema: type: string - $ref: "#/components/parameters/PageNumber" - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/Sort" responses: "200": $ref: "#/components/responses/JsonApiCollection" post: operationId: createContact tags: [Contacts] summary: Create a contact description: Idempotent callers should first search by organization id and email address. requestBody: required: true content: application/vnd.api+json: schema: $ref: "#/components/schemas/ContactRequest" application/json: schema: $ref: "#/components/schemas/ContactRequest" responses: "201": $ref: "#/components/responses/JsonApiResource" "422": $ref: "#/components/responses/Unprocessable" /contacts/{id}: get: operationId: getContact tags: [Contacts] summary: Retrieve a contact parameters: - $ref: "#/components/parameters/Id" responses: "200": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" patch: operationId: updateContact tags: [Contacts] summary: Update or deactivate a contact description: Use PATCH for contact deactivation; this spec intentionally does not expose DELETE. parameters: - $ref: "#/components/parameters/Id" requestBody: required: true content: application/vnd.api+json: schema: $ref: "#/components/schemas/ContactUpdateRequest" application/json: schema: $ref: "#/components/schemas/ContactUpdateRequest" responses: "200": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" "422": $ref: "#/components/responses/Unprocessable" /organizations/{organization_id}/relationships/contacts: get: operationId: listOrganizationContacts tags: [Contacts] summary: List contacts for an organization parameters: - $ref: "#/components/parameters/OrganizationId" - name: filter[email] in: query schema: type: string - $ref: "#/components/parameters/PageNumber" - $ref: "#/components/parameters/PageSize" responses: "200": $ref: "#/components/responses/JsonApiCollection" "404": $ref: "#/components/responses/NotFound" post: operationId: createOrganizationContact tags: [Contacts] summary: Create a contact under an organization parameters: - $ref: "#/components/parameters/OrganizationId" requestBody: required: true content: application/vnd.api+json: schema: $ref: "#/components/schemas/OrganizationContactRequest" application/json: schema: $ref: "#/components/schemas/OrganizationContactRequest" responses: "201": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" "422": $ref: "#/components/responses/Unprocessable" /organizations/{organization_id}/relationships/contacts/{id}: patch: operationId: updateOrganizationContact tags: [Contacts] summary: Update or deactivate an organization contact parameters: - $ref: "#/components/parameters/OrganizationId" - $ref: "#/components/parameters/Id" requestBody: required: true content: application/vnd.api+json: schema: $ref: "#/components/schemas/OrganizationContactUpdateRequest" application/json: schema: $ref: "#/components/schemas/OrganizationContactUpdateRequest" responses: "200": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" "422": $ref: "#/components/responses/Unprocessable" /passwords: get: operationId: listPasswords tags: [Passwords] summary: List passwords description: Use filter[name] plus filter[organization_id] before creating password mirror records. parameters: - $ref: "#/components/parameters/FilterId" - $ref: "#/components/parameters/FilterName" - $ref: "#/components/parameters/FilterOrganizationId" - $ref: "#/components/parameters/PageNumber" - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/Sort" responses: "200": $ref: "#/components/responses/JsonApiCollection" post: operationId: createPassword tags: [Passwords] summary: Create a password description: Creates either a general password or an embedded password when resource-id and resource-type are supplied. requestBody: required: true content: application/vnd.api+json: schema: $ref: "#/components/schemas/PasswordRequest" application/json: schema: $ref: "#/components/schemas/PasswordRequest" responses: "201": $ref: "#/components/responses/JsonApiResource" "422": $ref: "#/components/responses/Unprocessable" /passwords/{id}: get: operationId: getPassword tags: [Passwords] summary: Retrieve a password metadata record parameters: - $ref: "#/components/parameters/Id" responses: "200": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" patch: operationId: updatePassword tags: [Passwords] summary: Update a password parameters: - $ref: "#/components/parameters/Id" requestBody: required: true content: application/vnd.api+json: schema: $ref: "#/components/schemas/PasswordUpdateRequest" application/json: schema: $ref: "#/components/schemas/PasswordUpdateRequest" responses: "200": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" "422": $ref: "#/components/responses/Unprocessable" /configurations: get: operationId: listConfigurations tags: [Configurations] summary: List configurations description: Use stable fields such as organization id, name, hostname, serial number, or asset tag before creating records. parameters: - $ref: "#/components/parameters/FilterId" - $ref: "#/components/parameters/FilterName" - $ref: "#/components/parameters/FilterOrganizationId" - name: filter[serial_number] in: query schema: type: string - name: filter[asset_tag] in: query schema: type: string - name: filter[hostname] in: query schema: type: string - $ref: "#/components/parameters/PageNumber" - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/Sort" responses: "200": $ref: "#/components/responses/JsonApiCollection" post: operationId: createConfiguration tags: [Configurations] summary: Create a configuration requestBody: required: true content: application/vnd.api+json: schema: $ref: "#/components/schemas/ConfigurationRequest" application/json: schema: $ref: "#/components/schemas/ConfigurationRequest" responses: "201": $ref: "#/components/responses/JsonApiResource" "422": $ref: "#/components/responses/Unprocessable" /configurations/{id}: get: operationId: getConfiguration tags: [Configurations] summary: Retrieve a configuration parameters: - $ref: "#/components/parameters/Id" responses: "200": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" patch: operationId: updateConfiguration tags: [Configurations] summary: Update a configuration parameters: - $ref: "#/components/parameters/Id" requestBody: required: true content: application/vnd.api+json: schema: $ref: "#/components/schemas/ConfigurationUpdateRequest" application/json: schema: $ref: "#/components/schemas/ConfigurationUpdateRequest" responses: "200": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" "422": $ref: "#/components/responses/Unprocessable" /organizations/{organization_id}/relationships/configurations: get: operationId: listOrganizationConfigurations tags: [Configurations] summary: List configurations for an organization parameters: - $ref: "#/components/parameters/OrganizationId" - $ref: "#/components/parameters/FilterName" - $ref: "#/components/parameters/PageNumber" - $ref: "#/components/parameters/PageSize" responses: "200": $ref: "#/components/responses/JsonApiCollection" "404": $ref: "#/components/responses/NotFound" post: operationId: createOrganizationConfiguration tags: [Configurations] summary: Create a configuration under an organization parameters: - $ref: "#/components/parameters/OrganizationId" requestBody: required: true content: application/vnd.api+json: schema: $ref: "#/components/schemas/OrganizationConfigurationRequest" application/json: schema: $ref: "#/components/schemas/OrganizationConfigurationRequest" responses: "201": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" "422": $ref: "#/components/responses/Unprocessable" /documents: get: operationId: listDocuments tags: [Documents] summary: List documents parameters: - $ref: "#/components/parameters/FilterId" - $ref: "#/components/parameters/FilterName" - $ref: "#/components/parameters/FilterOrganizationId" - $ref: "#/components/parameters/PageNumber" - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/Sort" responses: "200": $ref: "#/components/responses/JsonApiCollection" post: operationId: createDocument tags: [Documents] summary: Create a document requestBody: required: true content: application/vnd.api+json: schema: $ref: "#/components/schemas/DocumentRequest" application/json: schema: $ref: "#/components/schemas/DocumentRequest" responses: "201": $ref: "#/components/responses/JsonApiResource" "422": $ref: "#/components/responses/Unprocessable" /documents/{id}: get: operationId: getDocument tags: [Documents] summary: Retrieve a document parameters: - $ref: "#/components/parameters/Id" responses: "200": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" patch: operationId: updateDocument tags: [Documents] summary: Update a document parameters: - $ref: "#/components/parameters/Id" requestBody: required: true content: application/vnd.api+json: schema: $ref: "#/components/schemas/DocumentUpdateRequest" application/json: schema: $ref: "#/components/schemas/DocumentUpdateRequest" responses: "200": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" "422": $ref: "#/components/responses/Unprocessable" /organizations/{organization_id}/relationships/documents: get: operationId: listOrganizationDocuments tags: [Documents] summary: List documents for an organization parameters: - $ref: "#/components/parameters/OrganizationId" - $ref: "#/components/parameters/FilterName" - $ref: "#/components/parameters/PageNumber" - $ref: "#/components/parameters/PageSize" responses: "200": $ref: "#/components/responses/JsonApiCollection" "404": $ref: "#/components/responses/NotFound" post: operationId: createOrganizationDocument tags: [Documents] summary: Create a document under an organization parameters: - $ref: "#/components/parameters/OrganizationId" requestBody: required: true content: application/vnd.api+json: schema: $ref: "#/components/schemas/OrganizationDocumentRequest" application/json: schema: $ref: "#/components/schemas/OrganizationDocumentRequest" responses: "201": $ref: "#/components/responses/JsonApiResource" "404": $ref: "#/components/responses/NotFound" "422": $ref: "#/components/responses/Unprocessable" components: securitySchemes: ItGlueApiKey: type: apiKey in: header name: x-api-key description: IT Glue read-write API key. x-auth-vars: - name: ITGLUE_API_KEY kind: per_call required: true sensitive: true description: IT Glue API key with permissions for the requested read and write operations. parameters: Id: name: id in: path required: true schema: type: integer OrganizationId: name: organization_id in: path required: true schema: type: integer FilterId: name: filter[id] in: query schema: type: integer FilterName: name: filter[name] in: query schema: type: string description: Exact match where supported by IT Glue. FilterOrganizationId: name: filter[organization_id] in: query schema: type: integer PageNumber: name: page[number] in: query schema: type: integer minimum: 1 PageSize: name: page[size] in: query schema: type: integer minimum: 1 maximum: 1000 Sort: name: sort in: query schema: type: string description: Comma separated sort fields; prefix with - for descending. responses: JsonApiCollection: description: JSON:API collection response. content: application/vnd.api+json: schema: $ref: "#/components/schemas/JsonApiCollection" application/json: schema: $ref: "#/components/schemas/JsonApiCollection" JsonApiResource: description: JSON:API resource response. content: application/vnd.api+json: schema: $ref: "#/components/schemas/JsonApiResource" application/json: schema: $ref: "#/components/schemas/JsonApiResource" NotFound: description: Resource not found. Unprocessable: description: Validation failed. content: application/vnd.api+json: schema: $ref: "#/components/schemas/JsonApiErrors" application/json: schema: $ref: "#/components/schemas/JsonApiErrors" schemas: JsonApiCollection: type: object required: [data] properties: data: type: array items: $ref: "#/components/schemas/JsonApiResourceObject" meta: type: object additionalProperties: true links: type: object additionalProperties: true additionalProperties: true JsonApiResource: type: object required: [data] properties: data: $ref: "#/components/schemas/JsonApiResourceObject" meta: type: object additionalProperties: true links: type: object additionalProperties: true additionalProperties: true JsonApiResourceObject: type: object required: [type] properties: id: type: string type: type: string attributes: type: object additionalProperties: true relationships: type: object additionalProperties: true links: type: object additionalProperties: true additionalProperties: true JsonApiErrors: type: object properties: errors: type: array items: type: object additionalProperties: true additionalProperties: true ContactRequest: type: object required: [data] properties: data: type: object required: [type, attributes] properties: type: type: string enum: [contacts] attributes: $ref: "#/components/schemas/ContactAttributes" additionalProperties: true ContactAttributes: type: object required: [organization-id, name] properties: organization-id: type: integer first-name: type: string last-name: type: string name: type: string title: type: string email: type: string format: email notes: type: string nullable: true important: type: boolean contact-type-id: type: integer location-id: type: integer nullable: true archived: type: boolean description: Included for non-destructive deactivation where available in the tenant. additionalProperties: true ContactUpdateRequest: type: object required: [data] properties: data: type: object required: [type, id, attributes] properties: type: type: string enum: [contacts] id: type: string attributes: $ref: "#/components/schemas/ContactUpdateAttributes" additionalProperties: true ContactUpdateAttributes: type: object properties: organization-id: type: integer first-name: type: string last-name: type: string name: type: string title: type: string email: type: string format: email notes: type: string nullable: true important: type: boolean contact-type-id: type: integer location-id: type: integer nullable: true archived: type: boolean description: Included for non-destructive deactivation where available in the tenant. additionalProperties: true OrganizationContactRequest: type: object required: [data] properties: data: type: object required: [type, attributes] properties: type: type: string enum: [contacts] attributes: $ref: "#/components/schemas/OrganizationContactAttributes" additionalProperties: true OrganizationContactAttributes: type: object required: [name] properties: first-name: type: string last-name: type: string name: type: string title: type: string email: type: string format: email notes: type: string nullable: true important: type: boolean contact-type-id: type: integer location-id: type: integer nullable: true archived: type: boolean description: Included for non-destructive deactivation where available in the tenant. additionalProperties: true OrganizationContactUpdateRequest: type: object required: [data] properties: data: type: object required: [type, id, attributes] properties: type: type: string enum: [contacts] id: type: string attributes: $ref: "#/components/schemas/OrganizationContactUpdateAttributes" additionalProperties: true OrganizationContactUpdateAttributes: type: object properties: first-name: type: string last-name: type: string name: type: string title: type: string email: type: string format: email notes: type: string nullable: true important: type: boolean contact-type-id: type: integer location-id: type: integer nullable: true archived: type: boolean description: Included for non-destructive deactivation where available in the tenant. additionalProperties: true PasswordRequest: type: object required: [data] properties: data: type: object required: [type, attributes] properties: type: type: string enum: [passwords] attributes: $ref: "#/components/schemas/PasswordAttributes" additionalProperties: true PasswordAttributes: type: object required: [organization-id, name] properties: organization-id: type: integer name: type: string username: type: string password: type: string format: password url: type: string nullable: true notes: type: string nullable: true password-category-id: type: integer nullable: true password-folder-id: type: integer nullable: true resource-id: type: integer nullable: true resource-type: type: string nullable: true additionalProperties: true PasswordUpdateRequest: type: object required: [data] properties: data: type: object required: [type, id, attributes] properties: type: type: string enum: [passwords] id: type: string attributes: $ref: "#/components/schemas/PasswordUpdateAttributes" additionalProperties: true PasswordUpdateAttributes: type: object properties: organization-id: type: integer name: type: string username: type: string password: type: string format: password url: type: string nullable: true notes: type: string nullable: true password-category-id: type: integer nullable: true password-folder-id: type: integer nullable: true resource-id: type: integer nullable: true resource-type: type: string nullable: true additionalProperties: true ConfigurationRequest: type: object required: [data] properties: data: type: object required: [type, attributes] properties: type: type: string enum: [configurations] attributes: $ref: "#/components/schemas/ConfigurationAttributes" relationships: type: object additionalProperties: true additionalProperties: true ConfigurationAttributes: type: object required: [organization-id, name] properties: organization-id: type: integer name: type: string hostname: type: string nullable: true configuration-type-id: type: integer configuration-status-id: type: integer manufacturer-id: type: integer nullable: true model-id: type: integer nullable: true location-id: type: integer nullable: true serial-number: type: string nullable: true asset-tag: type: string nullable: true primary-ip: type: string nullable: true mac-address: type: string nullable: true notes: type: string nullable: true additionalProperties: true ConfigurationUpdateRequest: type: object required: [data] properties: data: type: object required: [type, id, attributes] properties: type: type: string enum: [configurations] id: type: string attributes: $ref: "#/components/schemas/ConfigurationUpdateAttributes" relationships: type: object additionalProperties: true additionalProperties: true ConfigurationUpdateAttributes: type: object properties: organization-id: type: integer name: type: string hostname: type: string nullable: true configuration-type-id: type: integer configuration-status-id: type: integer manufacturer-id: type: integer nullable: true model-id: type: integer nullable: true location-id: type: integer nullable: true serial-number: type: string nullable: true asset-tag: type: string nullable: true primary-ip: type: string nullable: true mac-address: type: string nullable: true notes: type: string nullable: true additionalProperties: true OrganizationConfigurationRequest: type: object required: [data] properties: data: type: object required: [type, attributes] properties: type: type: string enum: [configurations] attributes: $ref: "#/components/schemas/OrganizationConfigurationAttributes" relationships: type: object additionalProperties: true additionalProperties: true OrganizationConfigurationAttributes: type: object required: [name] properties: name: type: string hostname: type: string nullable: true configuration-type-id: type: integer configuration-status-id: type: integer manufacturer-id: type: integer nullable: true model-id: type: integer nullable: true location-id: type: integer nullable: true serial-number: type: string nullable: true asset-tag: type: string nullable: true primary-ip: type: string nullable: true mac-address: type: string nullable: true notes: type: string nullable: true additionalProperties: true DocumentRequest: type: object required: [data] properties: data: type: object required: [type, attributes] properties: type: type: string enum: [documents] attributes: $ref: "#/components/schemas/DocumentAttributes" relationships: type: object additionalProperties: true additionalProperties: true DocumentAttributes: type: object required: [organization-id, name] properties: organization-id: type: integer name: type: string content: type: string nullable: true description: Document body content, typically HTML or rich text from IT Glue. restricted: type: boolean nullable: true archived: type: boolean nullable: true public: type: boolean nullable: true document-folder-id: type: integer nullable: true my-glue: type: boolean nullable: true additionalProperties: true DocumentUpdateRequest: type: object required: [data] properties: data: type: object required: [type, id, attributes] properties: type: type: string enum: [documents] id: type: string attributes: $ref: "#/components/schemas/DocumentUpdateAttributes" relationships: type: object additionalProperties: true additionalProperties: true DocumentUpdateAttributes: type: object properties: organization-id: type: integer name: type: string content: type: string nullable: true description: Document body content, typically HTML or rich text from IT Glue. restricted: type: boolean nullable: true archived: type: boolean nullable: true public: type: boolean nullable: true document-folder-id: type: integer nullable: true my-glue: type: boolean nullable: true additionalProperties: true OrganizationDocumentRequest: type: object required: [data] properties: data: type: object required: [type, attributes] properties: type: type: string enum: [documents] attributes: $ref: "#/components/schemas/OrganizationDocumentAttributes" relationships: type: object additionalProperties: true additionalProperties: true OrganizationDocumentAttributes: type: object required: [name] properties: name: type: string content: type: string nullable: true description: Document body content, typically HTML or rich text from IT Glue. restricted: type: boolean nullable: true archived: type: boolean nullable: true public: type: boolean nullable: true document-folder-id: type: integer nullable: true my-glue: type: boolean nullable: true additionalProperties: true