IT Glue Documents Management
Overview
Documents in IT Glue provide structured documentation storage for organizations, enabling technicians to create runbooks, procedures, network diagrams, and general documentation. Documents support rich HTML content, embedded passwords, and relationships to other IT Glue resources.
Key Concepts
Document Structure
Documents consist of:
- Name - Document title
- Content - Rich HTML content with embedded resources
- Folder - Organizational hierarchy location
- Related Items - Links to configurations, contacts, etc.
Document Folders
Folders provide hierarchical organization:
Organization: Acme Corporation
└── Documents
├── Onboarding
│ ├── New User Setup
│ └── Hardware Deployment
├── Procedures
│ ├── Backup Procedures
│ └── Disaster Recovery
└── Network
├── Network Diagram
└── IP Scheme
Embedded Resources
Documents can embed:
- Passwords - Inline credential display
- Configurations - Asset links
- Contacts - Contact information
- Images - Uploaded images/diagrams
Field Reference
Core Fields
| Field | Type | Required | Description | |-------|------|----------|-------------| | id | integer | System | Auto-generated unique identifier | | organization-id | integer | Yes | Parent organization | | name | string | Yes | Document title | | content | string | No | Rich HTML content | | document-folder-id | integer | No | Folder location |
Relationship Fields
| Field | Type | Description | |-------|------|-------------| | resource-id | integer | Related resource ID | | resource-type | string | Related resource type |
Metadata Fields
| Field | Type | Description | |-------|------|-------------| | created-at | datetime | Creation timestamp | | updated-at | datetime | Last update timestamp |
API Patterns
List Documents
Always use the organization-scoped relationship endpoint — GET /documents (top-level) returns 404 in practice. Use:
GET /organizations/123/relationships/documents
x-api-key: YOUR_API_KEY
Content-Type: application/vnd.api+json
With Name Filter:
GET /organizations/123/relationships/documents?filter[name]=backup
With Pagination:
GET /organizations/123/relationships/documents?page[size]=100&page[number]=1&sort=name
Note: If documents return 404 for an organization, that organization likely does not have the IT Glue Documents module enabled. Use search_flexible_assets instead — flexible assets are the more common way documentation is stored in IT Glue.
Get Single Document
GET /documents/789
x-api-key: YOUR_API_KEY
With Includes:
GET /documents/789?include=organization,document-folder,related-items
Create Document
POST /documents
Content-Type: application/vnd.api+json
x-api-key: YOUR_API_KEY
{
"data": {
"type": "documents",
"attributes": {
"organization-id": 123456,
"name": "New User Setup Procedure",
"document-folder-id": 789,
"content": "<h1>New User Setup Procedure</h1><h2>Overview</h2><p>This procedure covers the steps for setting up a new user account.</p><h2>Prerequisites</h2><ul><li>Active Directory access</li><li>Microsoft 365 admin access</li></ul><h2>Steps</h2><ol><li>Create AD account</li><li>Assign Microsoft 365 license</li><li>Configure email signature</li></ol>"
}
}
}
Update Document Metadata
PATCH /documents/789
Content-Type: application/vnd.api+json
x-api-key: YOUR_API_KEY
{
"data": {
"type": "documents",
"attributes": {
"name": "Updated Document Title"
}
}
}
Important:PATCH /documents/:idwith acontentattribute does not work for multi-section documents. Use the Document Sections API below instead.
Delete Document
DELETE /documents/789
x-api-key: YOUR_API_KEY
Document Sections API
Use the sections API to read and edit the content of multi-section documents. This is the correct approach for modifying document body content — PATCH /documents/:id with a content attribute silently fails on multi-section documents.
Section Types
| Type | Description | |------|-------------| | Document::Heading | Heading element (renders as <h2>, etc.) | | Document::Text | Rich HTML text block |
List Sections
GET /documents/789/relationships/sections
x-api-key: YOUR_API_KEY
Content-Type: application/vnd.api+json
Response:
{
"data": [
{
"id": "1001",
"type": "document-sections",
"attributes": {
"content": "<h2>Overview</h2>",
"section-type": "Document::Heading",
"position": 1
}
},
{
"id": "1002",
"type": "document-sections",
"attributes": {
"content": "<p>This procedure covers...</p>",
"section-type": "Document::Text",
"position": 2
}
}
]
}
Create Section
POST /documents/789/relationships/sections
Content-Type: application/vnd.api+json
x-api-key: YOUR_API_KEY
{
"data": {
"type": "document-sections",
"attributes": {
"section-type": "Document::Text",
"content": "<p>New section content here.</p>"
}
}
}
Update Section
PATCH /documents/789/relationships/sections/1002
Content-Type: application/vnd.api+json
x-api-key: YOUR_API_KEY
{
"data": {
"type": "document-sections",
"attributes": {
"content": "<p>Updated HTML content.</p>"
}
}
}
Delete Section
DELETE /documents/789/relationships/sections/1002
x-api-key: YOUR_API_KEY
Publish Document
After editing sections, publish the document to make changes visible. Use PATCH — POST returns 404.
PATCH /documents/789/publish
x-api-key: YOUR_API_KEY
No request body is required. A successful response is HTTP 200 with the updated document.
Full Workflow: Restructure a Document
async function restructureDocument(docId, newSections) {
// 1. List existing sections
const existing = await fetch(
`${baseUrl}/documents/${docId}/relationships/sections`,
{ headers: { 'x-api-key': apiKey } }
).then(r => r.json());
// 2. Delete all existing sections
for (const section of existing.data) {
await fetch(
`${baseUrl}/documents/${docId}/relationships/sections/${section.id}`,
{ method: 'DELETE', headers: { 'x-api-key': apiKey } }
);
}
// 3. Create new sections in order
for (const section of newSections) {
await fetch(
`${baseUrl}/documents/${docId}/relationships/sections`,
{
method: 'POST',
headers: { 'x-api-key': apiKey, 'Content-Type': 'application/vnd.api+json' },
body: JSON.stringify({
data: {
type: 'document-sections',
attributes: {
'section-type': section.type, // 'Document::Heading' or 'Document::Text'
content: section.content
}
}
})
}
);
}
// 4. Publish to make changes visible (must use PATCH, not POST)
await fetch(
`${baseUrl}/documents/${docId}/publish`,
{ method: 'PATCH', headers: { 'x-api-key': apiKey } }
);
}
Search Documents
By Name:
GET /documents?filter[name]=backup
By Folder:
GET /documents?filter[document-folder-id]=456
Document Folders
List Folders
GET /document-folders
x-api-key: YOUR_API_KEY
By Organization:
GET /organizations/123/relationships/document-folders
Create Folder
POST /document-folders
Content-Type: application/vnd.api+json
{
"data": {
"type": "document-folders",
"attributes": {
"organization-id": 123456,
"name": "Procedures",
"parent-id": null
}
}
}
Nested Folders
{