mirror of
https://github.com/jmagar/unraid-mcp.git
synced 2026-03-01 16:04:24 -08:00
**Project Configuration:** - Enhance pyproject.toml with comprehensive metadata, keywords, and classifiers - Add LICENSE file (MIT) for proper open-source distribution - Add PUBLISHING.md with comprehensive publishing guidelines - Update .gitignore to exclude tool artifacts (.cache, .pytest_cache, .ruff_cache, .ty_cache) - Ignore documentation working directories (.docs, .full-review, docs/plans, docs/sessions) **Documentation:** - Add extensive Unraid API research documentation - API source code analysis and resolver mapping - Competitive analysis and feature gap assessment - Release notes analysis (7.0.0, 7.1.0, 7.2.0) - Connect platform overview and remote access documentation - Document known API patterns, limitations, and edge cases **Testing & Code Quality:** - Expand test coverage across all tool modules - Add destructive action confirmation tests - Improve test assertions and error case validation - Refine type annotations for better static analysis **Tool Improvements:** - Enhance error handling consistency across all tools - Improve type safety with explicit type annotations - Refine GraphQL query construction patterns - Better handling of optional parameters and edge cases This commit prepares the project for v0.2.0 release with improved metadata, comprehensive documentation, and enhanced code quality. Co-authored-by: Claude <noreply@anthropic.com>
1452 lines
39 KiB
Markdown
1452 lines
39 KiB
Markdown
# Unraid API Documentation Crawl - Complete Content
|
|
|
|
**Date:** 2026-02-07
|
|
**Source:** Firecrawl deep crawl of official Unraid documentation, blog, and community resources
|
|
**Vector DB:** All content auto-embedded to Qdrant (firecrawl collection)
|
|
|
|
---
|
|
|
|
## Table of Contents
|
|
|
|
1. [API Documentation (docs.unraid.net/API/)](#1-api-documentation)
|
|
- [API Overview](#11-api-overview)
|
|
- [How to Use the API](#12-how-to-use-the-api)
|
|
- [CLI Reference](#13-cli-reference)
|
|
- [API Key App Developer Authorization Flow](#14-api-key-app-developer-authorization-flow)
|
|
- [Programmatic API Key Management](#15-programmatic-api-key-management)
|
|
- [OIDC Provider Setup](#16-oidc-provider-setup)
|
|
- [Upcoming Features / Roadmap](#17-upcoming-features--roadmap)
|
|
2. [Complete GraphQL Schema](#2-complete-graphql-schema)
|
|
- [Root Types (Query, Mutation, Subscription)](#21-root-types)
|
|
- [Resource Types](#22-resource-types)
|
|
- [Enums and Scalars](#23-enums-and-scalars)
|
|
3. [Unraid Connect Documentation](#3-unraid-connect-documentation)
|
|
4. [Release Notes (API-Relevant)](#4-release-notes-api-relevant)
|
|
5. [Blog Posts](#5-blog-posts)
|
|
6. [Community Resources](#6-community-resources)
|
|
7. [Source URLs Index](#7-source-urls-index)
|
|
|
|
---
|
|
|
|
## 1. API Documentation
|
|
|
|
### 1.1 API Overview
|
|
|
|
**Source:** https://docs.unraid.net/API/
|
|
|
|
Starting with Unraid 7.2, the API comes built into the operating system -- no plugin installation required.
|
|
|
|
The Unraid API provides a **GraphQL interface** for programmatic interaction with your Unraid server. It enables automation, monitoring, and integration capabilities through a modern, strongly-typed API with:
|
|
- Multiple authentication methods (API keys, session cookies, and SSO/OIDC)
|
|
- Comprehensive system coverage
|
|
- Built-in developer tools
|
|
|
|
#### Availability
|
|
|
|
**Native integration (Unraid 7.2+):**
|
|
- No plugin installation required
|
|
- Automatically available on system startup
|
|
- Deep system integration
|
|
- Access through **Settings > Management Access > API**
|
|
|
|
**Plugin installation (Pre-7.2 and Advanced Users):**
|
|
1. Install the Unraid Connect plugin from Community Applications
|
|
2. Configure the plugin
|
|
3. Access API functionality through the GraphQL Sandbox
|
|
|
|
The Unraid Connect plugin provides the API for pre-7.2 versions. You do NOT need to sign in to Unraid Connect to use the API locally. Installing the plugin on Unraid 7.2+ gives you access to newer API features before they are included in OS releases.
|
|
|
|
#### Get Started (Unraid 7.2+)
|
|
1. The API is already installed and running.
|
|
2. Access settings at **Settings > Management Access > API**.
|
|
3. Enable the GraphQL Sandbox for development.
|
|
4. Create your first API key.
|
|
5. Start making GraphQL queries!
|
|
|
|
#### Get Started (Pre-7.2 Versions)
|
|
1. Install the Unraid Connect plugin from Community Applications.
|
|
2. No Unraid Connect login required for local API access.
|
|
3. Configure the plugin settings.
|
|
4. Enable the GraphQL Sandbox.
|
|
5. Start exploring the API!
|
|
|
|
---
|
|
|
|
### 1.2 How to Use the API
|
|
|
|
**Source:** https://docs.unraid.net/API/how-to-use-the-api/
|
|
|
|
The Unraid API provides a GraphQL interface that allows you to interact with your Unraid server. This guide covers authentication, common queries, and usage patterns.
|
|
|
|
#### Enabling the GraphQL Sandbox
|
|
|
|
**Live Documentation:**
|
|
- View the complete API schema and documentation at [Apollo GraphQL Studio](https://studio.apollographql.com/graph/Unraid-API/variant/current/home)
|
|
|
|
**WebGUI method (recommended):**
|
|
1. Navigate to **Settings > Management Access > Developer Options**
|
|
2. Enable the **GraphQL Sandbox** toggle
|
|
3. Access the GraphQL playground at: `http://YOUR_SERVER_IP/graphql`
|
|
|
|
**CLI method:**
|
|
```bash
|
|
unraid-api developer --sandbox true
|
|
```
|
|
Or use interactive mode:
|
|
```bash
|
|
unraid-api developer
|
|
```
|
|
|
|
#### Authentication
|
|
|
|
Most queries and mutations require authentication. You can authenticate using:
|
|
1. **API Keys** -- For programmatic access
|
|
2. **Cookies** -- Automatic when signed in to the WebGUI
|
|
3. **SSO/OIDC** -- When configured with external providers
|
|
|
|
**Managing API keys (WebGUI):**
|
|
Navigate to **Settings > Management Access > API Keys** to:
|
|
- View existing API keys
|
|
- Create new API keys
|
|
- Manage permissions and roles
|
|
- Revoke or regenerate keys
|
|
|
|
**Managing API keys (CLI):**
|
|
```bash
|
|
unraid-api apikey --create
|
|
```
|
|
|
|
**Using API keys:**
|
|
Include the generated API key in your GraphQL requests as a header:
|
|
```json
|
|
{
|
|
"x-api-key": "YOUR_API_KEY"
|
|
}
|
|
```
|
|
|
|
#### Available Schemas
|
|
|
|
The API provides access to:
|
|
- **System information**: CPU, memory, OS info, system status and health, baseboard and hardware info
|
|
- **Array management**: Array status and configuration, start/stop operations, disk status and health, parity checks
|
|
- **Docker management**: List and manage Docker containers, monitor container status, manage Docker networks
|
|
- **Remote access**: Configure and manage remote access settings, SSO configuration, allowed origins
|
|
|
|
#### Example Queries
|
|
|
|
**Check system status:**
|
|
```graphql
|
|
query {
|
|
info {
|
|
os {
|
|
platform
|
|
distro
|
|
release
|
|
uptime
|
|
}
|
|
cpu {
|
|
manufacturer
|
|
brand
|
|
cores
|
|
threads
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Monitor array status:**
|
|
```graphql
|
|
query {
|
|
array {
|
|
state
|
|
capacity {
|
|
disks {
|
|
free
|
|
used
|
|
total
|
|
}
|
|
}
|
|
disks {
|
|
name
|
|
size
|
|
status
|
|
temp
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**List Docker containers:**
|
|
```graphql
|
|
query {
|
|
dockerContainers {
|
|
id
|
|
names
|
|
state
|
|
status
|
|
autoStart
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Schema Types
|
|
|
|
**Base types:** `Node` (interface for objects with unique IDs), `JSON` (complex JSON data), `DateTime` (timestamp values), `Long` (64-bit integers)
|
|
|
|
**Resource types:** `Array` (array and disk management), `Docker` (container and network management), `Info` (system information), `Config` (server configuration), `Connect` (remote access settings)
|
|
|
|
**Available roles:** `admin` (full access), `connect` (remote access features), `guest` (limited read access)
|
|
|
|
#### Error Handling
|
|
|
|
The API returns standard GraphQL errors:
|
|
```json
|
|
{
|
|
"errors": [
|
|
{
|
|
"message": "Error description",
|
|
"locations": [...],
|
|
"path": [...]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
The API implements rate limiting to prevent abuse.
|
|
|
|
---
|
|
|
|
### 1.3 CLI Reference
|
|
|
|
**Source:** https://docs.unraid.net/API/cli/
|
|
|
|
All commands follow the pattern: `unraid-api <command> [options]`.
|
|
|
|
#### Service Management
|
|
|
|
**Start:**
|
|
```bash
|
|
unraid-api start [--log-level <level>]
|
|
# Levels: trace|debug|info|warn|error|fatal
|
|
# Alternative: LOG_LEVEL=trace unraid-api start
|
|
```
|
|
|
|
**Stop:**
|
|
```bash
|
|
unraid-api stop [--delete]
|
|
# --delete: Optional. Delete the PM2 home directory.
|
|
```
|
|
|
|
**Restart:**
|
|
```bash
|
|
unraid-api restart [--log-level <level>]
|
|
```
|
|
|
|
**Logs:**
|
|
```bash
|
|
unraid-api logs [-l <lines>]
|
|
# -l, --lines: Number of lines to tail (default: 100)
|
|
```
|
|
|
|
#### Configuration Commands
|
|
|
|
**View config:**
|
|
```bash
|
|
unraid-api config
|
|
```
|
|
|
|
**Switch environment:**
|
|
```bash
|
|
unraid-api switch-env [-e <environment>]
|
|
# -e: production|staging
|
|
```
|
|
|
|
**Developer mode:**
|
|
```bash
|
|
unraid-api developer # Interactive prompt
|
|
unraid-api developer --sandbox true # Enable GraphQL sandbox
|
|
unraid-api developer --sandbox false # Disable GraphQL sandbox
|
|
unraid-api developer --enable-modal # Enable modal testing tool
|
|
unraid-api developer --disable-modal # Disable modal testing tool
|
|
```
|
|
|
|
Also available via WebGUI: **Settings > Management Access > Developer Options**
|
|
|
|
#### API Key Management
|
|
|
|
```bash
|
|
unraid-api apikey [options]
|
|
```
|
|
|
|
Options:
|
|
- `--name <name>`: Name of the key
|
|
- `--create`: Create a new key
|
|
- `-r, --roles <roles>`: Comma-separated list of roles
|
|
- `-p, --permissions <permissions>`: Comma-separated list of permissions
|
|
- `-d, --description <description>`: Description for the key
|
|
|
|
Also available via WebGUI: **Settings > Management Access > API Keys**
|
|
|
|
#### SSO (Single Sign-On) Management
|
|
|
|
```bash
|
|
unraid-api sso # Base command
|
|
unraid-api sso add-user # Add SSO user (aliases: add, a)
|
|
unraid-api sso remove-user # Remove SSO user (aliases: remove, r)
|
|
unraid-api sso list-users # List SSO users (aliases: list, l)
|
|
unraid-api sso validate-token <token> # Validate SSO token (aliases: validate, v)
|
|
```
|
|
|
|
#### Report Generation
|
|
|
|
```bash
|
|
unraid-api report [-r] [-j]
|
|
# -r, --raw: Display raw command output
|
|
# -j, --json: Display output in JSON format
|
|
```
|
|
|
|
---
|
|
|
|
### 1.4 API Key App Developer Authorization Flow
|
|
|
|
**Source:** https://docs.unraid.net/API/api-key-app-developer-authorization-flow/
|
|
|
|
Applications can request API access to an Unraid server by redirecting users to a special authorization page where users can review requested permissions and create an API key with one click.
|
|
|
|
#### Flow
|
|
|
|
1. **Application initiates request**: The app redirects the user to:
|
|
```
|
|
https://[unraid-server]/ApiKeyAuthorize?name=MyApp&scopes=docker:read,vm:*&redirect_uri=https://myapp.com/callback&state=abc123
|
|
```
|
|
|
|
2. **User authentication**: If not already logged in, the user is redirected to login first (standard Unraid auth).
|
|
|
|
3. **Consent screen**: User sees:
|
|
- Application name and description
|
|
- Requested permissions (with checkboxes to approve/deny specific scopes)
|
|
- API key name field (pre-filled)
|
|
- Authorize & Cancel buttons
|
|
|
|
4. **API key creation**: Upon authorization:
|
|
- API key is created with approved scopes.
|
|
- Key is displayed to the user.
|
|
- If `redirect_uri` is provided, user is redirected back with the key.
|
|
|
|
5. **Callback**: App receives the API key:
|
|
```
|
|
https://myapp.com/callback?api_key=xxx&state=abc123
|
|
```
|
|
|
|
#### Query Parameters
|
|
|
|
- `name` (required): Name of the requesting application
|
|
- `description` (optional): Description of the application
|
|
- `scopes` (required): Comma-separated list of requested scopes
|
|
- `redirect_uri` (optional): URL to redirect after authorization
|
|
- `state` (optional): Opaque value for maintaining state
|
|
|
|
#### Scope Format
|
|
|
|
Scopes follow the pattern: `resource:action`.
|
|
|
|
**Examples:**
|
|
- `docker:read` -- read access to Docker
|
|
- `vm:*` -- full access to VMs
|
|
- `system:update` -- update access to system
|
|
- `role:viewer` -- viewer role access
|
|
- `role:admin` -- admin role access
|
|
|
|
**Available resources:** `docker`, `vm`, `system`, `share`, `user`, `network`, `disk`, and others.
|
|
**Available actions:** `create`, `read`, `update`, `delete`, or `*` for all.
|
|
|
|
**Security notes:**
|
|
- Redirect URIs must use HTTPS (except localhost for development)
|
|
- Users explicitly approve each permission
|
|
- The flow uses existing Unraid authentication sessions
|
|
- API keys are shown once and must be saved securely
|
|
|
|
#### Example Integration (JavaScript)
|
|
|
|
```javascript
|
|
const unraidServer = 'tower.local';
|
|
const appName = 'My Docker Manager';
|
|
const scopes = 'docker:*,system:read';
|
|
const redirectUri = 'https://myapp.com/unraid/callback';
|
|
const state = generateRandomState();
|
|
|
|
// Store state for verification
|
|
sessionStorage.setItem('oauth_state', state);
|
|
|
|
// Redirect user to authorization page
|
|
window.location.href =
|
|
`https://${unraidServer}/ApiKeyAuthorize?` +
|
|
`name=${encodeURIComponent(appName)}&` +
|
|
`scopes=${encodeURIComponent(scopes)}&` +
|
|
`redirect_uri=${encodeURIComponent(redirectUri)}&` +
|
|
`state=${encodeURIComponent(state)}`;
|
|
|
|
// Handle callback
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
const apiKey = urlParams.get('api_key');
|
|
const returnedState = urlParams.get('state');
|
|
|
|
if (returnedState === sessionStorage.getItem('oauth_state')) {
|
|
// Save API key securely
|
|
saveApiKey(apiKey);
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 1.5 Programmatic API Key Management
|
|
|
|
**Source:** https://docs.unraid.net/API/programmatic-api-key-management/
|
|
|
|
Create, use, and delete API keys programmatically for automated workflows, CI/CD pipelines, temporary access provisioning, and infrastructure as code.
|
|
|
|
#### Creating API Keys
|
|
|
|
**Basic creation with JSON output:**
|
|
```bash
|
|
unraid-api apikey --create --name "workflow key" --roles ADMIN --json
|
|
```
|
|
|
|
Output:
|
|
```json
|
|
{
|
|
"key": "your-generated-api-key-here",
|
|
"name": "workflow key",
|
|
"id": "generated-uuid"
|
|
}
|
|
```
|
|
|
|
**Advanced creation with permissions:**
|
|
```bash
|
|
unraid-api apikey --create \
|
|
--name "limited access key" \
|
|
--permissions "DOCKER:READ_ANY,ARRAY:READ_ANY" \
|
|
--description "Read-only access for monitoring" \
|
|
--json
|
|
```
|
|
|
|
**Handling existing keys (overwrite):**
|
|
```bash
|
|
unraid-api apikey --create --name "existing key" --roles ADMIN --overwrite --json
|
|
```
|
|
|
|
#### Deleting API Keys
|
|
|
|
```bash
|
|
# Non-interactive deletion by name
|
|
unraid-api apikey --delete --name "workflow key"
|
|
|
|
# JSON output for deletion
|
|
unraid-api apikey --delete --name "workflow key" --json
|
|
```
|
|
|
|
#### Available Roles
|
|
|
|
| Role | Description |
|
|
|------|-------------|
|
|
| `ADMIN` | Full system access |
|
|
| `CONNECT` | Unraid Connect features |
|
|
| `VIEWER` | Read-only access |
|
|
| `GUEST` | Limited access |
|
|
|
|
#### Available Resources
|
|
|
|
`ACTIVATION_CODE`, `API_KEY`, `ARRAY`, `CLOUD`, `CONFIG`, `CONNECT`, `CONNECT__REMOTE_ACCESS`, `CUSTOMIZATIONS`, `DASHBOARD`, `DISK`, `DISPLAY`, `DOCKER`, `FLASH`, `INFO`, `LOGS`, `ME`, `NETWORK`, `NOTIFICATIONS`, `ONLINE`, `OS`, `OWNER`, `PERMISSION`, `REGISTRATION`, `SERVERS`, `SERVICES`, `SHARE`, `VARS`, `VMS`, `WELCOME`
|
|
|
|
#### Available Actions
|
|
|
|
`CREATE_ANY`, `CREATE_OWN`, `READ_ANY`, `READ_OWN`, `UPDATE_ANY`, `UPDATE_OWN`, `DELETE_ANY`, `DELETE_OWN`
|
|
|
|
#### Complete Workflow Example (Temporary Access)
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
# 1. Create temporary API key
|
|
echo "Creating temporary API key..."
|
|
KEY_DATA=$(unraid-api apikey --create \
|
|
--name "temp deployment key" \
|
|
--roles ADMIN \
|
|
--description "Temporary key for deployment $(date)" \
|
|
--json)
|
|
|
|
# 2. Extract the API key
|
|
API_KEY=$(echo "$KEY_DATA" | jq -r '.key')
|
|
echo "API key created successfully"
|
|
|
|
# 3. Use the key for operations
|
|
echo "Configuring services..."
|
|
curl -H "Authorization: Bearer $API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"provider": "azure", "clientId": "your-client-id"}' \
|
|
http://localhost:3001/graphql
|
|
|
|
# 4. Clean up (always runs, even on error)
|
|
trap 'echo "Cleaning up..."; unraid-api apikey --delete --name "temp deployment key"' EXIT
|
|
|
|
echo "Deployment completed successfully"
|
|
```
|
|
|
|
---
|
|
|
|
### 1.6 OIDC Provider Setup
|
|
|
|
**Source:** https://docs.unraid.net/API/oidc-provider-setup/
|
|
|
|
OpenID Connect (OIDC) enables Single Sign-On (SSO) for the Unraid API using external identity providers like Google, Microsoft, Authelia, Keycloak, Authentik, and Okta.
|
|
|
|
#### Quick Start
|
|
|
|
1. Navigate to **Settings > Management Access > API > OIDC**
|
|
2. Click the **+** button to add a new provider
|
|
3. Configure the provider settings
|
|
|
|
#### Required Redirect URI (ALL providers)
|
|
|
|
```
|
|
http://YOUR_UNRAID_IP/graphql/api/auth/oidc/callback
|
|
```
|
|
|
|
#### Authorization Modes
|
|
|
|
**Simple mode (recommended):**
|
|
- Allow specific email domains (e.g., @company.com)
|
|
- Allow specific email addresses
|
|
- Best for most users
|
|
|
|
**Advanced mode:**
|
|
- Create complex authorization rules based on JWT claims
|
|
- Operators: equals, contains, endsWith, startsWith
|
|
- Combine conditions with OR/AND logic
|
|
- Check group memberships, verify multiple claims
|
|
|
|
#### Provider-Specific Configuration
|
|
|
|
**Unraid.net (built-in):**
|
|
- Pre-configured, just set authorization rules
|
|
|
|
**Google:**
|
|
- Issuer URL: `https://accounts.google.com`
|
|
- Requires valid domain names for OAuth redirect URIs (no local IPs or .local domains)
|
|
- Options: Reverse Proxy, Tailscale (.ts.net), Dynamic DNS
|
|
|
|
**Authelia:**
|
|
- Issuer URL: `https://auth.yourdomain.com`
|
|
- Client ID: `unraid-api`
|
|
- Scopes: `openid`, `profile`, `email`, `groups`
|
|
|
|
**Microsoft/Azure AD:**
|
|
- Issuer URL: `https://login.microsoftonline.com/YOUR_TENANT_ID/v2.0`
|
|
|
|
**Keycloak:**
|
|
- Issuer URL: `https://keycloak.example.com/realms/YOUR_REALM`
|
|
|
|
**Authentik:**
|
|
- Issuer URL: `https://authentik.example.com/application/o/<application_slug>/`
|
|
|
|
**Okta:**
|
|
- Issuer URL: `https://YOUR_DOMAIN.okta.com`
|
|
|
|
All providers require scopes: `openid`, `profile`, `email`
|
|
|
|
#### Issuer URL Format
|
|
|
|
Use the **base URL** (recommended for security):
|
|
- Base URL: `https://accounts.google.com` (recommended)
|
|
- Full discovery URL: `https://accounts.google.com/.well-known/openid-configuration` (not recommended)
|
|
|
|
---
|
|
|
|
### 1.7 Upcoming Features / Roadmap
|
|
|
|
**Source:** https://docs.unraid.net/API/upcoming-features/
|
|
|
|
#### Completed Features
|
|
|
|
| Feature | Available Since |
|
|
|---------|----------------|
|
|
| API Development Environment Improvements | v4.0.0 |
|
|
| Include API in Unraid OS | Unraid v7.2-beta.1 |
|
|
| Separate API from Connect Plugin | Unraid v7.2-beta.1 |
|
|
| Permissions System Rewrite | v4.0.0 |
|
|
| OIDC/SSO Support | Unraid v7.2-beta.1 |
|
|
| Array Status Monitoring | v4.0.0 |
|
|
| Docker Container Status Monitoring | v4.0.0 |
|
|
| Array/Cache Share Status Monitoring | v4.0.0 |
|
|
| Notifications System & Interface | v4.0.0 |
|
|
|
|
#### Upcoming / In Development
|
|
|
|
| Feature | Target Timeline |
|
|
|---------|----------------|
|
|
| Make API Open Source | Completed - open-sourced January 2025 (GitHub) |
|
|
| Developer Tools for Plugins | Q2 2025 |
|
|
| User Interface Component Library | In Development |
|
|
| New Settings Pages | Q2 2025 |
|
|
| Custom Theme Creator | Q2-Q3 2025 |
|
|
| New Connect Settings Interface | Q1 2025 |
|
|
| Storage Pool Creation/Status Interface | Q2 2025 |
|
|
| New Docker Status Interface Design | Q3 2025 |
|
|
| Docker Container Setup Interface | Q3 2025 |
|
|
| Docker Compose Support | TBD |
|
|
| New Plugins Interface | Q3 2025 |
|
|
| Plugin Development Tools | TBD |
|
|
|
|
#### Under Consideration
|
|
|
|
- Storage Share Creation & Settings
|
|
- Storage Share Management Interface
|
|
|
|
#### Version Support
|
|
|
|
| Unraid Version | API Version | Support Status |
|
|
|---------------|-------------|----------------|
|
|
| Unraid v7.2-beta.1+ | Latest | Active |
|
|
| 7.0 - 7.1.x | v4.x via Plugin | Limited |
|
|
| 6.12.x | v4.x via Plugin | Limited |
|
|
| < 6.12 | Not Supported | EOL |
|
|
|
|
#### GitHub Repository
|
|
|
|
- Open source: https://github.com/unraid/api
|
|
- Latest release: v4.29.2 (December 19, 2025)
|
|
- 102 releases total
|
|
- Language: TypeScript 77.4%, Vue 11.8%, PHP 5.6%, Shell 2.3%
|
|
- Stars: 95, Forks: 17
|
|
|
|
---
|
|
|
|
## 2. Complete GraphQL Schema
|
|
|
|
**Source:** https://github.com/domalab/unraid-api-client/blob/113c94f1/schema.graphql
|
|
**Reference:** https://deepwiki.com/domalab/unraid-api-client/7-graphql-schema-reference
|
|
|
|
The Unraid GraphQL API follows standard GraphQL conventions with three root types: Query (for fetching data), Mutation (for modifying data), and Subscription (for real-time updates).
|
|
|
|
### 2.1 Root Types
|
|
|
|
#### Query Type
|
|
|
|
```graphql
|
|
type Query {
|
|
apiKeys: [ApiKey!]!
|
|
apiKey(id: ID!): ApiKey
|
|
array: Array!
|
|
parityHistory: [ParityCheck]
|
|
online: Boolean
|
|
info: Info
|
|
cloud: Cloud
|
|
config: Config!
|
|
remoteAccess: RemoteAccess!
|
|
extraAllowedOrigins: [String!]!
|
|
connect: Connect!
|
|
disk(id: ID!): Disk
|
|
disks: [Disk]!
|
|
display: Display
|
|
dockerContainers(all: Boolean): [DockerContainer!]!
|
|
docker: Docker!
|
|
dockerNetwork(id: ID!): DockerNetwork!
|
|
dockerNetworks(all: Boolean): [DockerNetwork]!
|
|
flash: Flash
|
|
network: Network
|
|
notifications: Notifications!
|
|
owner: Owner
|
|
registration: Registration
|
|
server: Server
|
|
servers: [Server!]!
|
|
services: [Service!]!
|
|
shares: [Share]
|
|
unassignedDevices: [UnassignedDevice]
|
|
me: Me
|
|
user(id: ID!): User
|
|
users(input: usersInput): [User!]!
|
|
vars: Vars
|
|
vms: Vms
|
|
}
|
|
```
|
|
|
|
#### Mutation Type
|
|
|
|
```graphql
|
|
type Mutation {
|
|
createApiKey(input: CreateApiKeyInput!): ApiKeyWithSecret!
|
|
addPermission(input: AddPermissionInput!): Boolean!
|
|
addRoleForUser(input: AddRoleForUserInput!): Boolean!
|
|
addRoleForApiKey(input: AddRoleForApiKeyInput!): Boolean!
|
|
removeRoleFromApiKey(input: RemoveRoleFromApiKeyInput!): Boolean!
|
|
startArray: Array
|
|
stopArray: Array
|
|
addDiskToArray(input: arrayDiskInput): Array
|
|
removeDiskFromArray(input: arrayDiskInput): Array
|
|
mountArrayDisk(id: ID!): Disk
|
|
unmountArrayDisk(id: ID!): Disk
|
|
clearArrayDiskStatistics(id: ID!): JSON
|
|
startParityCheck(correct: Boolean): JSON
|
|
pauseParityCheck: JSON
|
|
resumeParityCheck: JSON
|
|
cancelParityCheck: JSON
|
|
login(username: String!, password: String!): String
|
|
shutdown: String
|
|
reboot: String
|
|
connectSignIn(input: ConnectSignInInput!): Boolean!
|
|
connectSignOut: Boolean!
|
|
enableDynamicRemoteAccess(input: EnableDynamicRemoteAccessInput!): Boolean!
|
|
setAdditionalAllowedOrigins(input: AllowedOriginInput!): [String!]!
|
|
setupRemoteAccess(input: SetupRemoteAccessInput!): Boolean!
|
|
createNotification(input: NotificationData!): Notification!
|
|
deleteNotification(id: String!, type: NotificationType!): NotificationOverview!
|
|
deleteArchivedNotifications: NotificationOverview!
|
|
archiveNotification(id: String!): Notification!
|
|
unreadNotification(id: String!): Notification!
|
|
archiveNotifications(ids: [String!]): NotificationOverview!
|
|
unarchiveNotifications(ids: [String!]): NotificationOverview!
|
|
archiveAll(importance: Importance): NotificationOverview!
|
|
unarchiveAll(importance: Importance): NotificationOverview!
|
|
recalculateOverview: NotificationOverview!
|
|
addUser(input: addUserInput!): User
|
|
deleteUser(input: deleteUserInput!): User
|
|
}
|
|
```
|
|
|
|
#### Subscription Type
|
|
|
|
```graphql
|
|
type Subscription {
|
|
array: Array!
|
|
parityHistory: ParityCheck!
|
|
ping: String!
|
|
info: Info!
|
|
online: Boolean!
|
|
config: Config!
|
|
display: Display
|
|
dockerContainer(id: ID!): DockerContainer!
|
|
dockerContainers: [DockerContainer]
|
|
dockerNetwork(id: ID!): DockerNetwork!
|
|
dockerNetworks: [DockerNetwork]!
|
|
flash: Flash!
|
|
notificationAdded: Notification!
|
|
notificationsOverview: NotificationOverview!
|
|
owner: Owner!
|
|
registration: Registration!
|
|
server: Server
|
|
service(name: String!): [Service!]
|
|
share(id: ID!): Share!
|
|
shares: [Share!]
|
|
unassignedDevices: [UnassignedDevice!]
|
|
me: Me
|
|
user(id: ID!): User!
|
|
users: [User]!
|
|
vars: Vars!
|
|
vms: Vms
|
|
}
|
|
```
|
|
|
|
### 2.2 Resource Types
|
|
|
|
#### Permission & API Key Types
|
|
|
|
```graphql
|
|
type Permission {
|
|
resource: Resource!
|
|
actions: [String!]!
|
|
}
|
|
|
|
type ApiKey {
|
|
id: ID!
|
|
name: String!
|
|
description: String
|
|
roles: [Role!]!
|
|
createdAt: DateTime!
|
|
permissions: [Permission!]!
|
|
}
|
|
|
|
type ApiKeyWithSecret {
|
|
id: ID!
|
|
key: String!
|
|
name: String!
|
|
description: String
|
|
roles: [Role!]!
|
|
createdAt: DateTime!
|
|
permissions: [Permission!]!
|
|
}
|
|
|
|
input CreateApiKeyInput {
|
|
name: String!
|
|
description: String
|
|
roles: [Role!]
|
|
permissions: [AddPermissionInput!]
|
|
overwrite: Boolean
|
|
}
|
|
```
|
|
|
|
#### Array Type
|
|
|
|
```graphql
|
|
type Array implements Node {
|
|
id: ID!
|
|
previousState: ArrayState
|
|
pendingState: ArrayPendingState
|
|
state: ArrayState!
|
|
capacity: ArrayCapacity!
|
|
boot: ArrayDisk
|
|
parities: [ArrayDisk!]!
|
|
disks: [ArrayDisk!]!
|
|
caches: [ArrayDisk!]!
|
|
}
|
|
|
|
type ArrayDisk {
|
|
id: ID!
|
|
idx: Int!
|
|
name: String
|
|
device: String
|
|
size: Long!
|
|
status: ArrayDiskStatus
|
|
rotational: Boolean
|
|
temp: Int
|
|
numReads: Long!
|
|
numWrites: Long!
|
|
numErrors: Long!
|
|
fsSize: Long
|
|
fsFree: Long
|
|
fsUsed: Long
|
|
exportable: Boolean
|
|
type: ArrayDiskType!
|
|
warning: Int
|
|
critical: Int
|
|
fsType: String
|
|
comment: String
|
|
format: String
|
|
transport: String
|
|
}
|
|
|
|
type ArrayCapacity {
|
|
kilobytes: Capacity!
|
|
disks: Capacity!
|
|
}
|
|
|
|
type Capacity {
|
|
free: String!
|
|
used: String!
|
|
total: String!
|
|
}
|
|
```
|
|
|
|
#### Docker Types
|
|
|
|
```graphql
|
|
type DockerContainer {
|
|
id: ID!
|
|
names: [String!]
|
|
image: String!
|
|
imageId: String!
|
|
command: String!
|
|
created: Int!
|
|
ports: [ContainerPort!]!
|
|
sizeRootFs: Long
|
|
labels: JSON
|
|
state: ContainerState!
|
|
status: String!
|
|
hostConfig: ContainerHostConfig
|
|
networkSettings: JSON
|
|
mounts: [JSON]
|
|
autoStart: Boolean!
|
|
}
|
|
|
|
type Docker implements Node {
|
|
id: ID!
|
|
containers: [DockerContainer!]
|
|
networks: [DockerNetwork!]
|
|
}
|
|
|
|
type DockerNetwork {
|
|
name: String
|
|
id: ID
|
|
created: String
|
|
scope: String
|
|
driver: String
|
|
enableIPv6: Boolean!
|
|
ipam: JSON
|
|
internal: Boolean!
|
|
attachable: Boolean!
|
|
ingress: Boolean!
|
|
configFrom: JSON
|
|
configOnly: Boolean!
|
|
containers: JSON
|
|
options: JSON
|
|
labels: JSON
|
|
}
|
|
```
|
|
|
|
#### Info (System Information) Type
|
|
|
|
```graphql
|
|
type Info implements Node {
|
|
apps: InfoApps
|
|
baseboard: Baseboard
|
|
cpu: InfoCpu
|
|
devices: Devices
|
|
display: Display
|
|
id: ID!
|
|
machineId: ID
|
|
memory: InfoMemory
|
|
os: Os
|
|
system: System
|
|
time: DateTime!
|
|
versions: Versions
|
|
}
|
|
|
|
type InfoCpu {
|
|
manufacturer: String!
|
|
brand: String!
|
|
vendor: String!
|
|
family: String!
|
|
model: String!
|
|
stepping: Int!
|
|
revision: String!
|
|
voltage: String
|
|
speed: Float!
|
|
speedmin: Float!
|
|
speedmax: Float!
|
|
threads: Int!
|
|
cores: Int!
|
|
processors: Long!
|
|
socket: String!
|
|
cache: JSON!
|
|
flags: [String!]
|
|
}
|
|
|
|
type InfoMemory {
|
|
max: Long!
|
|
total: Long!
|
|
free: Long!
|
|
used: Long!
|
|
active: Long!
|
|
available: Long!
|
|
buffcache: Long!
|
|
swaptotal: Long!
|
|
swapused: Long!
|
|
swapfree: Long!
|
|
layout: [MemoryLayout!]
|
|
}
|
|
|
|
type Os {
|
|
platform: String
|
|
distro: String
|
|
release: String
|
|
codename: String
|
|
kernel: String
|
|
arch: String
|
|
hostname: String
|
|
codepage: String
|
|
logofile: String
|
|
serial: String
|
|
build: String
|
|
uptime: DateTime
|
|
}
|
|
```
|
|
|
|
#### VM Types
|
|
|
|
```graphql
|
|
type Vms {
|
|
id: ID!
|
|
domain: [VmDomain!]
|
|
}
|
|
|
|
type VmDomain {
|
|
uuid: ID!
|
|
name: String
|
|
state: VmState!
|
|
}
|
|
```
|
|
|
|
#### Network Type
|
|
|
|
```graphql
|
|
type Network implements Node {
|
|
iface: String
|
|
ifaceName: String
|
|
ipv4: String
|
|
ipv6: String
|
|
mac: String
|
|
internal: String
|
|
operstate: String
|
|
type: String
|
|
duplex: String
|
|
mtu: String
|
|
speed: String
|
|
carrierChanges: String
|
|
id: ID!
|
|
accessUrls: [AccessUrl!]
|
|
}
|
|
```
|
|
|
|
#### Share Type
|
|
|
|
```graphql
|
|
type Share {
|
|
name: String
|
|
free: Long
|
|
used: Long
|
|
size: Long
|
|
include: [String]
|
|
exclude: [String]
|
|
cache: Boolean
|
|
nameOrig: String
|
|
comment: String
|
|
allocator: String
|
|
splitLevel: String
|
|
floor: String
|
|
cow: String
|
|
color: String
|
|
luksStatus: String
|
|
}
|
|
```
|
|
|
|
#### User Types
|
|
|
|
```graphql
|
|
interface UserAccount {
|
|
id: ID!
|
|
name: String!
|
|
description: String!
|
|
roles: [Role!]!
|
|
permissions: [Permission!]
|
|
}
|
|
|
|
type Me implements UserAccount {
|
|
id: ID!
|
|
name: String!
|
|
description: String!
|
|
roles: [Role!]!
|
|
permissions: [Permission!]
|
|
}
|
|
|
|
type User implements UserAccount {
|
|
id: ID!
|
|
name: String!
|
|
description: String!
|
|
roles: [Role!]!
|
|
password: Boolean
|
|
permissions: [Permission!]
|
|
}
|
|
```
|
|
|
|
#### Notification Types
|
|
|
|
```graphql
|
|
type Notifications implements Node {
|
|
id: ID!
|
|
overview: NotificationOverview!
|
|
list(filter: NotificationFilter!): [Notification!]!
|
|
}
|
|
|
|
type Notification implements Node {
|
|
id: ID!
|
|
title: String!
|
|
subject: String!
|
|
description: String!
|
|
importance: Importance!
|
|
link: String
|
|
type: NotificationType!
|
|
timestamp: String
|
|
formattedTimestamp: String
|
|
}
|
|
|
|
type NotificationOverview {
|
|
unread: NotificationCounts!
|
|
archive: NotificationCounts!
|
|
}
|
|
|
|
type NotificationCounts {
|
|
info: Int!
|
|
warning: Int!
|
|
alert: Int!
|
|
total: Int!
|
|
}
|
|
```
|
|
|
|
#### Vars Type (Server Configuration)
|
|
|
|
```graphql
|
|
type Vars implements Node {
|
|
id: ID!
|
|
version: String # Unraid version
|
|
maxArraysz: Int
|
|
maxCachesz: Int
|
|
name: String # Machine hostname
|
|
timeZone: String
|
|
comment: String
|
|
security: String
|
|
workgroup: String
|
|
domain: String
|
|
useNtp: Boolean
|
|
ntpServer1: String
|
|
ntpServer2: String
|
|
ntpServer3: String
|
|
ntpServer4: String
|
|
useSsl: Boolean
|
|
port: Int # WebUI HTTP port
|
|
portssl: Int # WebUI HTTPS port
|
|
useTelnet: Boolean
|
|
useSsh: Boolean
|
|
portssh: Int
|
|
startPage: String
|
|
startArray: Boolean
|
|
spindownDelay: String
|
|
defaultFormat: String
|
|
defaultFsType: String
|
|
shutdownTimeout: Int
|
|
shareDisk: String
|
|
shareUser: String
|
|
shareSmbEnabled: Boolean
|
|
shareNfsEnabled: Boolean
|
|
shareAfpEnabled: Boolean
|
|
shareCacheEnabled: Boolean
|
|
shareMoverSchedule: String
|
|
shareMoverLogging: Boolean
|
|
safeMode: Boolean
|
|
configValid: Boolean
|
|
configError: ConfigErrorState
|
|
deviceCount: Int
|
|
flashGuid: String
|
|
flashProduct: String
|
|
flashVendor: String
|
|
regState: RegistrationState
|
|
regTo: String # Registration owner
|
|
mdState: String
|
|
mdNumDisks: Int
|
|
mdNumDisabled: Int
|
|
mdNumInvalid: Int
|
|
mdNumMissing: Int
|
|
mdResync: Int
|
|
mdResyncAction: String
|
|
fsState: String
|
|
fsProgress: String # Human friendly array events string
|
|
fsCopyPrcnt: Int # 0-100 for disk upgrade/swap
|
|
shareCount: Int
|
|
shareSmbCount: Int
|
|
shareNfsCount: Int
|
|
csrfToken: String
|
|
# ... and many more fields
|
|
}
|
|
```
|
|
|
|
#### Cloud/Connect Types
|
|
|
|
```graphql
|
|
type Cloud {
|
|
error: String
|
|
apiKey: ApiKeyResponse!
|
|
relay: RelayResponse
|
|
minigraphql: MinigraphqlResponse!
|
|
cloud: CloudResponse!
|
|
allowedOrigins: [String!]!
|
|
}
|
|
|
|
type Connect implements Node {
|
|
id: ID!
|
|
dynamicRemoteAccess: DynamicRemoteAccessStatus!
|
|
}
|
|
|
|
type RemoteAccess {
|
|
accessType: WAN_ACCESS_TYPE!
|
|
forwardType: WAN_FORWARD_TYPE
|
|
port: Port
|
|
}
|
|
```
|
|
|
|
#### Disk Type (Physical Disk)
|
|
|
|
```graphql
|
|
type Disk {
|
|
device: String!
|
|
type: String!
|
|
name: String!
|
|
vendor: String!
|
|
size: Long!
|
|
bytesPerSector: Long!
|
|
totalCylinders: Long!
|
|
totalHeads: Long!
|
|
totalSectors: Long!
|
|
totalTracks: Long!
|
|
tracksPerCylinder: Long!
|
|
sectorsPerTrack: Long!
|
|
firmwareRevision: String!
|
|
serialNum: String!
|
|
interfaceType: DiskInterfaceType!
|
|
smartStatus: DiskSmartStatus!
|
|
temperature: Long!
|
|
partitions: [DiskPartition!]
|
|
}
|
|
```
|
|
|
|
### 2.3 Enums and Scalars
|
|
|
|
#### Scalar Types
|
|
|
|
| Scalar | Description |
|
|
|--------|-------------|
|
|
| `JSON` | Complex JSON data structures |
|
|
| `Long` | 52-bit integers |
|
|
| `UUID` | Universally Unique Identifier |
|
|
| `DateTime` | RFC 3339 date-time string |
|
|
| `Port` | Valid TCP port (0-65535) |
|
|
| `URL` | Standard URL format |
|
|
|
|
#### Key Enums
|
|
|
|
**Resource (for permissions):**
|
|
`api_key`, `array`, `cloud`, `config`, `connect`, `connect__remote_access`, `customizations`, `dashboard`, `disk`, `display`, `docker`, `flash`, `info`, `logs`, `me`, `network`, `notifications`, `online`, `os`, `owner`, `permission`, `registration`, `servers`, `services`, `share`, `vars`, `vms`, `welcome`
|
|
|
|
**Role:**
|
|
`admin`, `connect`, `guest`
|
|
|
|
**ArrayState:**
|
|
`STARTED`, `STOPPED`, `NEW_ARRAY`, `RECON_DISK`, `DISABLE_DISK`, `SWAP_DSBL`, `INVALID_EXPANSION`, `PARITY_NOT_BIGGEST`, `TOO_MANY_MISSING_DISKS`, `NEW_DISK_TOO_SMALL`, `NO_DATA_DISKS`
|
|
|
|
**ArrayDiskStatus:**
|
|
`DISK_NP`, `DISK_OK`, `DISK_NP_MISSING`, `DISK_INVALID`, `DISK_WRONG`, `DISK_DSBL`, `DISK_NP_DSBL`, `DISK_DSBL_NEW`, `DISK_NEW`
|
|
|
|
**ArrayDiskType:**
|
|
`Data`, `Parity`, `Flash`, `Cache`
|
|
|
|
**ContainerState:**
|
|
`RUNNING`, `EXITED`
|
|
|
|
**VmState:**
|
|
`NOSTATE`, `RUNNING`, `IDLE`, `PAUSED`, `SHUTDOWN`, `SHUTOFF`, `CRASHED`, `PMSUSPENDED`
|
|
|
|
**DiskInterfaceType:**
|
|
`SAS`, `SATA`, `USB`, `PCIe`, `UNKNOWN`
|
|
|
|
**DiskFsType:**
|
|
`xfs`, `btrfs`, `vfat`, `zfs`
|
|
|
|
**Importance (Notifications):**
|
|
`ALERT`, `INFO`, `WARNING`
|
|
|
|
**NotificationType:**
|
|
`UNREAD`, `ARCHIVE`
|
|
|
|
**WAN_ACCESS_TYPE:**
|
|
`DYNAMIC`, `ALWAYS`, `DISABLED`
|
|
|
|
**RegistrationState:**
|
|
`TRIAL`, `BASIC`, `PLUS`, `PRO`, `STARTER`, `UNLEASHED`, `LIFETIME`, `EEXPIRED`, `EGUID`, `EGUID1`, `ETRIAL`, `ENOKEYFILE`, `ENOFLASH`, `EBLACKLISTED`, `ENOCONN`
|
|
|
|
---
|
|
|
|
## 3. Unraid Connect Documentation
|
|
|
|
**Source:** https://docs.unraid.net/unraid-connect/overview-and-setup
|
|
**Source:** https://docs.unraid.net/unraid-connect/remote-access
|
|
**Source:** https://docs.unraid.net/unraid-connect/automated-flash-backup
|
|
|
|
Unraid Connect is the cloud management layer that provides:
|
|
- Remote access to your Unraid server from anywhere
|
|
- Automated flash backup to the cloud
|
|
- Server dashboard and monitoring from unraid.net
|
|
- The API plugin for pre-7.2 Unraid versions
|
|
|
|
Key points:
|
|
- Unraid Connect plugin is completely optional on 7.2+
|
|
- The API functionality was separated from Connect in 7.2
|
|
- You do NOT need to sign in to Unraid Connect to use the API locally
|
|
- Connect adds cloud communication features (remote access, dashboard, flash backup)
|
|
- Remote access uses WireGuard VPN or Dynamic DNS
|
|
|
|
---
|
|
|
|
## 4. Release Notes (API-Relevant)
|
|
|
|
### Unraid 7.2.0 (October 29, 2025)
|
|
|
|
**Source:** https://docs.unraid.net/unraid-os/release-notes/7.2.0
|
|
|
|
**Major API changes:**
|
|
- The Unraid API is now built into Unraid OS (no plugin required)
|
|
- The new Notifications panel is the first major feature built on the API
|
|
- Dashboard now gets CPU usage stats from the Unraid API
|
|
- Over time, the entire webGUI will transition to use the API
|
|
- Fully open source: https://github.com/unraid/api
|
|
- SSO/OIDC login support for the webGUI
|
|
- API version: dynamix.unraid.net 4.25.3
|
|
|
|
**Other key 7.2.0 changes:**
|
|
- Responsive CSS (mobile-friendly webGUI)
|
|
- ZFS RAIDZ expansion
|
|
- Ext2/3/4, NTFS, exFAT support
|
|
- IPv6 Docker custom networks with ULA support
|
|
- Welcome screen for new systems
|
|
|
|
### Unraid 7.1.0 (May 2025)
|
|
|
|
**Source:** https://docs.unraid.net/unraid-os/release-notes/7.1.0
|
|
|
|
- API available via Unraid Connect plugin
|
|
- Focus on ZFS improvements, Docker enhancements, and VM updates
|
|
|
|
### Unraid 7.0.0 (February 2025)
|
|
|
|
**Source:** https://docs.unraid.net/unraid-os/release-notes/7.0.0
|
|
|
|
- Major release introducing ZFS support
|
|
- API available via Unraid Connect plugin
|
|
- Modernized PHP stack and security improvements
|
|
|
|
---
|
|
|
|
## 5. Blog Posts
|
|
|
|
### API Feature Bounty Program (September 5, 2025)
|
|
|
|
**Source:** https://unraid.net/blog/api-feature-bounty-program
|
|
|
|
Unraid launched a Feature Bounty Program for developers to contribute to the API roadmap:
|
|
- Feature requests become bounties
|
|
- Developers build and claim bounties for monetary rewards
|
|
- Community-driven growth
|
|
|
|
**Live bounty board:** https://github.com/orgs/unraid/projects/3/views/1
|
|
**Feature bounty info:** https://unraid.net/feature-bounty
|
|
|
|
**Community API projects highlighted:**
|
|
- Unraid Mobile App (by S3ppo) - https://forums.unraid.net/topic/189522-unraid-mobile-app/
|
|
- Homepage Dashboard Widget (by surf108)
|
|
- Home Assistant Integration (by domalab) - https://github.com/domalab/ha-unraid-connect
|
|
- Unloggarr AI-powered log analysis (by jmagar) - https://github.com/jmagar/unloggarr
|
|
- nzb360 Mobile App (Android) - https://play.google.com/store/apps/details?id=com.kevinforeman.nzb360
|
|
- API Show and Tell Discord channel
|
|
|
|
### Unraid 7.2.0 Stable Release Blog (October 29, 2025)
|
|
|
|
**Source:** https://unraid.net/blog/unraid-7-2-0
|
|
|
|
Highlights the API as now integrated directly into Unraid OS:
|
|
- "The Unraid API is now integrated directly into Unraid OS, giving developers and power users new ways to interact with their systems."
|
|
- New Notifications panel is the first major feature built on the API
|
|
- Over time, more of the webGUI will transition to use the API
|
|
- Fully open source at https://github.com/unraid/api
|
|
- Supports external authentication (OIDC) for secure, scalable access
|
|
|
|
---
|
|
|
|
## 6. Community Resources
|
|
|
|
### Third-Party API Client
|
|
|
|
**Source:** https://deepwiki.com/domalab/unraid-api-client/
|
|
|
|
The `domalab/unraid-api-client` repository provides:
|
|
- Python client for the Unraid GraphQL API
|
|
- Shell script client for bash-based automation
|
|
- Complete GraphQL schema file (schema.graphql)
|
|
- Example queries for all major resource types
|
|
- Authentication examples
|
|
- Error handling patterns
|
|
|
|
GitHub: https://github.com/domalab/unraid-api-client
|
|
|
|
### Official Unraid API GitHub
|
|
|
|
**Source:** https://github.com/unraid/api
|
|
|
|
- Monorepo: Unraid API / Connect / UI
|
|
- TypeScript (77.4%), Vue (11.8%), PHP (5.6%)
|
|
- 95 stars, 17 forks
|
|
- 102 releases (latest v4.29.2)
|
|
- Open source since January 2025
|
|
- Topics: api, unraid, unraid-api, unraid-connect, unraid-ui
|
|
|
|
### Community Forums
|
|
|
|
- Unraid API / Unraid Connect forum: https://forums.unraid.net/forum/93-unraid-api-unraid-connect/
|
|
- 68 posts in the API subforum
|
|
- Topics include API key issues, plugin updates, and integration questions
|
|
|
|
---
|
|
|
|
## 7. Source URLs Index
|
|
|
|
### Official API Documentation (Primary Sources)
|
|
| URL | Description |
|
|
|-----|-------------|
|
|
| https://docs.unraid.net/API/ | API overview and getting started |
|
|
| https://docs.unraid.net/API/how-to-use-the-api/ | Authentication, queries, and usage |
|
|
| https://docs.unraid.net/API/cli/ | CLI command reference |
|
|
| https://docs.unraid.net/API/api-key-app-developer-authorization-flow/ | App developer auth flow |
|
|
| https://docs.unraid.net/API/programmatic-api-key-management/ | Programmatic key management |
|
|
| https://docs.unraid.net/API/oidc-provider-setup/ | OIDC/SSO provider configuration |
|
|
| https://docs.unraid.net/API/upcoming-features/ | Roadmap and feature status |
|
|
|
|
### GraphQL Schema (Primary Sources)
|
|
| URL | Description |
|
|
|-----|-------------|
|
|
| https://github.com/domalab/unraid-api-client/blob/113c94f1/schema.graphql | Complete GraphQL schema file |
|
|
| https://deepwiki.com/domalab/unraid-api-client/7-graphql-schema-reference | Schema reference documentation |
|
|
| https://studio.apollographql.com/graph/Unraid-API/variant/current/home | Apollo Studio (requires auth) |
|
|
|
|
### Unraid Connect Documentation
|
|
| URL | Description |
|
|
|-----|-------------|
|
|
| https://docs.unraid.net/unraid-connect/overview-and-setup | Connect overview |
|
|
| https://docs.unraid.net/unraid-connect/remote-access | Remote access configuration |
|
|
| https://docs.unraid.net/unraid-connect/automated-flash-backup | Automated flash backup |
|
|
|
|
### Release Notes
|
|
| URL | Description |
|
|
|-----|-------------|
|
|
| https://docs.unraid.net/unraid-os/release-notes/7.2.0 | Unraid 7.2.0 (API built-in) |
|
|
| https://docs.unraid.net/unraid-os/release-notes/7.1.0 | Unraid 7.1.0 |
|
|
| https://docs.unraid.net/unraid-os/release-notes/7.0.0 | Unraid 7.0.0 |
|
|
| https://docs.unraid.net/unraid-os/release-notes/7.0.1 | Unraid 7.0.1 |
|
|
| https://docs.unraid.net/unraid-os/release-notes/7.2.1 | Unraid 7.2.1 |
|
|
| https://docs.unraid.net/unraid-os/release-notes/7.2.2 | Unraid 7.2.2 |
|
|
| https://docs.unraid.net/unraid-os/release-notes/7.2.3 | Unraid 7.2.3 |
|
|
|
|
### Blog Posts
|
|
| URL | Description |
|
|
|-----|-------------|
|
|
| https://unraid.net/blog/unraid-7-2-0 | 7.2.0 stable release announcement |
|
|
| https://unraid.net/blog/api-feature-bounty-program | API Feature Bounty Program |
|
|
| https://unraid.net/blog/unraid-7 | Unraid 7.0 announcement |
|
|
| https://unraid.net/blog/unraid-7-1 | Unraid 7.1 announcement |
|
|
| https://unraid.net/blog/unraid-7-2-0-beta.1 | 7.2.0 beta.1 |
|
|
| https://unraid.net/blog/unraid-7-2-0-beta.2 | 7.2.0 beta.2 |
|
|
| https://unraid.net/blog/unraid-7-2-0-beta.3 | 7.2.0 beta.3 |
|
|
| https://unraid.net/blog/unraid-7-2-0-rc-1 | 7.2.0 RC 1 |
|
|
| https://unraid.net/blog/unraid-7-2-0-rc-2 | 7.2.0 RC 2 |
|
|
|
|
### GitHub Repositories
|
|
| URL | Description |
|
|
|-----|-------------|
|
|
| https://github.com/unraid/api | Official Unraid API monorepo |
|
|
| https://github.com/unraid/api/releases | API releases (102 total) |
|
|
| https://github.com/domalab/unraid-api-client | Third-party API client (Python/Shell) |
|
|
| https://github.com/domalab/ha-unraid-connect | Home Assistant integration |
|
|
| https://github.com/jmagar/unloggarr | AI-powered log analysis |
|
|
| https://github.com/orgs/unraid/projects/3/views/1 | Feature bounty board |
|
|
|
|
### Community
|
|
| URL | Description |
|
|
|-----|-------------|
|
|
| https://forums.unraid.net/forum/93-unraid-api-unraid-connect/ | API/Connect forum |
|
|
| https://unraid.net/feature-bounty | Feature bounty program info |
|
|
|
|
---
|
|
|
|
## Data Collection Summary
|
|
|
|
- **Sites mapped:** 4 (docs.unraid.net/API/, docs.unraid.net/connect/, docs.unraid.net/unraid-os/release-notes/, unraid.net/blog/)
|
|
- **Pages crawled:** 7 API docs + 19 Connect + 7 release notes + 12 blog posts + 10 deepwiki pages + misc = ~60 pages
|
|
- **Vector DB chunks:** 351 from docs.unraid.net, 575 from unraid.net, plus deepwiki, forums, and GitHub
|
|
- **Raw files saved:** 6 files in docs/research/raw/
|
|
- **GraphQL schema:** Complete schema.graphql extracted (1,600+ lines)
|