feat(infrastructure): initialize TrueNAS Scale infrastructure collection system
Initial repository setup for TrueNAS Scale configuration management and disaster recovery. This system provides automated collection, versioning, and documentation of TrueNAS configuration state. Key components: - Configuration collection scripts with API integration - Disaster recovery exports (configs, storage, system state) - Comprehensive documentation and API reference - Sub-agent architecture for specialized operations Infrastructure protected: - Storage pools and datasets configuration - Network configuration and routing - Sharing services (NFS, SMB, iSCSI) - System tasks (snapshots, replication, cloud sync) - User and group management Security measures: - API keys managed via environment variables - Sensitive data excluded via .gitignore - No credentials committed to repository 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
703
START-HERE-DOCS/TRUENAS_API_REFERENCE.md
Normal file
703
START-HERE-DOCS/TRUENAS_API_REFERENCE.md
Normal file
@@ -0,0 +1,703 @@
|
||||
# TrueNAS Scale API v2.0 Reference
|
||||
|
||||
**Target Server:** 192.168.2.150
|
||||
**API Version:** 2.0
|
||||
**Documentation Type:** Collection-Focused Reference
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Authentication](#authentication)
|
||||
2. [API Basics](#api-basics)
|
||||
3. [System Endpoints](#system-endpoints)
|
||||
4. [Storage Endpoints](#storage-endpoints)
|
||||
5. [Sharing Endpoints](#sharing-endpoints)
|
||||
6. [Network Endpoints](#network-endpoints)
|
||||
7. [Service Endpoints](#service-endpoints)
|
||||
8. [Task Endpoints](#task-endpoints)
|
||||
9. [User Management](#user-management)
|
||||
10. [Error Codes](#error-codes)
|
||||
11. [Examples](#examples)
|
||||
|
||||
---
|
||||
|
||||
## Authentication
|
||||
|
||||
### API Key Generation
|
||||
|
||||
**Method 1: Web UI**
|
||||
1. Log in to TrueNAS Scale: `https://192.168.2.150`
|
||||
2. Navigate to: **Account** → **API Keys**
|
||||
3. Click **Add**
|
||||
4. Configure:
|
||||
- Name: `homelab-collection`
|
||||
- Username: `admin` (or your user)
|
||||
- Expiration: Optional
|
||||
5. Click **Save**
|
||||
6. **IMPORTANT:** Copy the key immediately (shown only once)
|
||||
|
||||
**Method 2: CLI (if logged in via SSH)**
|
||||
```bash
|
||||
midclt call auth.generate_token 120 # 120 seconds validity
|
||||
```
|
||||
|
||||
### Authentication Headers
|
||||
|
||||
**All API requests require:**
|
||||
```http
|
||||
Authorization: Bearer <API_KEY>
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
**Example:**
|
||||
```bash
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/system/info" \
|
||||
-H "Authorization: Bearer 1-YourAPIKeyHere" \
|
||||
-H "Content-Type: application/json" \
|
||||
--insecure # Only if using self-signed certificate
|
||||
```
|
||||
|
||||
### Testing Authentication
|
||||
|
||||
```bash
|
||||
# Test 1: Get system version (minimal permissions)
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/system/version" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
-H "Content-Type: application/json" \
|
||||
--insecure
|
||||
|
||||
# Expected response:
|
||||
# {"fullversion": "TrueNAS-SCALE-23.10.1", "version": "23.10.1"}
|
||||
|
||||
# Test 2: Get system info (more detailed)
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/system/info" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
-H "Content-Type: application/json" \
|
||||
--insecure | jq .
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## API Basics
|
||||
|
||||
### Base URL
|
||||
```
|
||||
https://192.168.2.150/api/v2.0
|
||||
```
|
||||
|
||||
### Response Format
|
||||
All responses are JSON-formatted.
|
||||
|
||||
**Success Response:**
|
||||
```json
|
||||
{
|
||||
"id": 1,
|
||||
"name": "example",
|
||||
"status": "SUCCESS"
|
||||
}
|
||||
```
|
||||
|
||||
**Error Response:**
|
||||
```json
|
||||
{
|
||||
"error": "Error message",
|
||||
"errname": "EINVAL",
|
||||
"extra": null
|
||||
}
|
||||
```
|
||||
|
||||
### Query Parameters
|
||||
|
||||
**Filtering:**
|
||||
```bash
|
||||
# Get datasets with specific properties
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/pool/dataset?name=Vauly" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure
|
||||
```
|
||||
|
||||
### HTTP Methods
|
||||
|
||||
| Method | Purpose | Idempotent | Collection Use |
|
||||
|--------|---------|------------|----------------|
|
||||
| GET | Retrieve data | Yes | Primary method |
|
||||
| POST | Create resource | No | Not used |
|
||||
| PUT | Update resource | Yes | Not used |
|
||||
| DELETE | Remove resource | Yes | Not used |
|
||||
|
||||
**Collection scripts use GET only** (read-only operations).
|
||||
|
||||
---
|
||||
|
||||
## System Endpoints
|
||||
|
||||
### GET /api/v2.0/system/info
|
||||
**Description:** Get comprehensive system information
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/system/info" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"version": "TrueNAS-SCALE-23.10.1",
|
||||
"hostname": "truenas",
|
||||
"physmem": 68719476736,
|
||||
"model": "AMD Ryzen",
|
||||
"cores": 16,
|
||||
"physical_cores": 8,
|
||||
"loadavg": [0.5, 0.6, 0.7],
|
||||
"uptime": "10 days, 5:30:15",
|
||||
"uptime_seconds": 896415.0,
|
||||
"boottime": "2025-12-04T10:30:00",
|
||||
"datetime": "2025-12-14T15:30:15",
|
||||
"timezone": "America/New_York"
|
||||
}
|
||||
```
|
||||
|
||||
**Key Fields:**
|
||||
- `version`: TrueNAS Scale version
|
||||
- `physmem`: Physical memory in bytes
|
||||
- `cores`: Total CPU cores
|
||||
- `uptime_seconds`: System uptime
|
||||
- `loadavg`: 1, 5, 15-minute load averages
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/system/version
|
||||
**Description:** Get TrueNAS version string
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/system/version" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"fullversion": "TrueNAS-SCALE-23.10.1",
|
||||
"version": "23.10.1"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/system/advanced
|
||||
**Description:** Get advanced system settings
|
||||
|
||||
**Response includes:**
|
||||
- Boot scrub interval
|
||||
- Console settings
|
||||
- Power management
|
||||
- Syslog configuration
|
||||
- Debug settings
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/system/general
|
||||
**Description:** Get general system configuration
|
||||
|
||||
**Response includes:**
|
||||
- Web UI settings (ports, protocols)
|
||||
- Timezone and language
|
||||
- Keyboard map
|
||||
- Certificate configuration
|
||||
|
||||
---
|
||||
|
||||
## Storage Endpoints
|
||||
|
||||
### GET /api/v2.0/pool
|
||||
**Description:** List all storage pools
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/pool" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Vauly",
|
||||
"guid": "1234567890123456789",
|
||||
"status": "ONLINE",
|
||||
"path": "/mnt/Vauly",
|
||||
"scan": {
|
||||
"function": "SCRUB",
|
||||
"state": "FINISHED",
|
||||
"start_time": "2025-12-10T02:00:00",
|
||||
"end_time": "2025-12-10T06:30:00",
|
||||
"percentage": 100.0,
|
||||
"errors": 0
|
||||
},
|
||||
"is_decrypted": true,
|
||||
"healthy": true,
|
||||
"size": 3221225472000,
|
||||
"allocated": 67108864000,
|
||||
"free": 3154116608000,
|
||||
"fragmentation": "1%",
|
||||
"topology": {
|
||||
"data": [],
|
||||
"cache": [],
|
||||
"log": [],
|
||||
"spare": []
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
**Key Fields:**
|
||||
- `name`: Pool name (e.g., "Vauly")
|
||||
- `status`: Pool health status
|
||||
- `healthy`: Boolean health indicator
|
||||
- `size`: Total pool size in bytes
|
||||
- `free`: Available space in bytes
|
||||
- `scan`: Last scrub information
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/pool/dataset
|
||||
**Description:** List all datasets and zvols
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/pool/dataset" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "Vauly/iso-vault",
|
||||
"type": "FILESYSTEM",
|
||||
"name": "Vauly/iso-vault",
|
||||
"pool": "Vauly",
|
||||
"encrypted": false,
|
||||
"mountpoint": "/mnt/Vauly/iso-vault",
|
||||
"compression": {
|
||||
"parsed": "lz4",
|
||||
"value": "lz4"
|
||||
},
|
||||
"used": {
|
||||
"parsed": 67108864000,
|
||||
"value": "62.5G"
|
||||
},
|
||||
"available": {
|
||||
"parsed": 3154116608000,
|
||||
"value": "2.9T"
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
**Query specific dataset:**
|
||||
```bash
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/pool/dataset?id=Vauly/iso-vault" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/disk
|
||||
**Description:** Get disk inventory
|
||||
|
||||
**Response includes:**
|
||||
- Disk serial numbers
|
||||
- Model information
|
||||
- Size and type (HDD/SSD)
|
||||
- Current pool assignment
|
||||
- SMART status
|
||||
- Temperature readings
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/disk/temperature
|
||||
**Description:** Get current disk temperatures
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/disk/temperature" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"sda": 35,
|
||||
"sdb": 32,
|
||||
"sdc": 34,
|
||||
"sdd": 36
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/pool/scrub
|
||||
**Description:** Get scrub status and history
|
||||
|
||||
**Response includes:**
|
||||
- Current scrub state
|
||||
- Start/end times
|
||||
- Bytes processed
|
||||
- Error count
|
||||
- Completion percentage
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/smart/test/results
|
||||
**Description:** Get SMART test results for all disks
|
||||
|
||||
**Response includes:**
|
||||
- Test type (short/long)
|
||||
- Test status
|
||||
- Completion time
|
||||
- Any errors found
|
||||
|
||||
---
|
||||
|
||||
## Sharing Endpoints
|
||||
|
||||
### GET /api/v2.0/sharing/nfs
|
||||
**Description:** Get all NFS share configurations
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/sharing/nfs" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"path": "/mnt/Vauly/iso-vault",
|
||||
"comment": "ISO storage for Proxmox",
|
||||
"networks": ["192.168.2.0/24"],
|
||||
"hosts": [],
|
||||
"ro": false,
|
||||
"maproot_user": "root",
|
||||
"maproot_group": "root",
|
||||
"security": ["SYS"],
|
||||
"enabled": true
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/sharing/smb
|
||||
**Description:** Get all SMB/CIFS share configurations
|
||||
|
||||
**Response includes:**
|
||||
- Share name and path
|
||||
- Access permissions
|
||||
- Guest access settings
|
||||
- Host allow/deny lists
|
||||
- Enable status
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/sharing/iscsi/target
|
||||
**Description:** Get iSCSI target configurations
|
||||
|
||||
### GET /api/v2.0/sharing/iscsi/extent
|
||||
**Description:** Get iSCSI extent configurations
|
||||
|
||||
---
|
||||
|
||||
## Network Endpoints
|
||||
|
||||
### GET /api/v2.0/interface
|
||||
**Description:** Get network interface configurations
|
||||
|
||||
**Response includes:**
|
||||
- Interface name and type
|
||||
- IP addresses (IPv4/IPv6)
|
||||
- MTU settings
|
||||
- Link state
|
||||
- DHCP configuration
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/network/configuration
|
||||
**Description:** Get global network configuration
|
||||
|
||||
**Response includes:**
|
||||
- Hostname and domain
|
||||
- Default gateway
|
||||
- DNS servers
|
||||
- Service announcement settings
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/staticroute
|
||||
**Description:** Get static route configurations
|
||||
|
||||
---
|
||||
|
||||
## Service Endpoints
|
||||
|
||||
### GET /api/v2.0/service
|
||||
**Description:** Get status of all services
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/service" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"service": "ssh",
|
||||
"enable": true,
|
||||
"state": "RUNNING",
|
||||
"pids": [1234]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"service": "nfs",
|
||||
"enable": true,
|
||||
"state": "RUNNING",
|
||||
"pids": [5678, 5679]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### GET /api/v2.0/ssh
|
||||
**Description:** Get SSH service configuration
|
||||
|
||||
**Response includes:**
|
||||
- TCP port
|
||||
- Root login settings
|
||||
- Password authentication
|
||||
- SFTP log settings
|
||||
|
||||
---
|
||||
|
||||
## Task Endpoints
|
||||
|
||||
### GET /api/v2.0/cronjob
|
||||
**Description:** Get cron job configurations
|
||||
|
||||
### GET /api/v2.0/pool/snapshottask
|
||||
**Description:** Get snapshot task configurations
|
||||
|
||||
### GET /api/v2.0/rsynctask
|
||||
**Description:** Get rsync task configurations
|
||||
|
||||
### GET /api/v2.0/cloudsync
|
||||
**Description:** Get cloud sync task configurations
|
||||
|
||||
### GET /api/v2.0/replication
|
||||
**Description:** Get ZFS replication task configurations
|
||||
|
||||
---
|
||||
|
||||
## User Management
|
||||
|
||||
### GET /api/v2.0/user
|
||||
**Description:** Get all user accounts
|
||||
|
||||
**Response includes:**
|
||||
- Username and UID
|
||||
- Home directory
|
||||
- Shell
|
||||
- Group memberships
|
||||
- SSH public keys
|
||||
|
||||
### GET /api/v2.0/group
|
||||
**Description:** Get all groups
|
||||
|
||||
---
|
||||
|
||||
## Error Codes
|
||||
|
||||
### HTTP Status Codes
|
||||
|
||||
| Code | Meaning | Description |
|
||||
|------|---------|-------------|
|
||||
| 200 | OK | Request successful |
|
||||
| 400 | Bad Request | Invalid request syntax |
|
||||
| 401 | Unauthorized | Invalid or missing API key |
|
||||
| 403 | Forbidden | Insufficient permissions |
|
||||
| 404 | Not Found | Resource doesn't exist |
|
||||
| 429 | Too Many Requests | Rate limit exceeded |
|
||||
| 500 | Internal Server Error | Server-side error |
|
||||
|
||||
### TrueNAS Error Names
|
||||
|
||||
| Error Name | Description | Common Cause |
|
||||
|------------|-------------|--------------|
|
||||
| `EINVAL` | Invalid argument | Wrong parameter type or value |
|
||||
| `ENOENT` | No such file or directory | Resource doesn't exist |
|
||||
| `EACCES` | Permission denied | Insufficient permissions |
|
||||
| `EFAULT` | General fault | Internal middleware error |
|
||||
|
||||
---
|
||||
|
||||
## Examples
|
||||
|
||||
### Complete Health Check Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# truenas-health-check.sh
|
||||
|
||||
TRUENAS_HOST="192.168.2.150"
|
||||
TRUENAS_API_KEY="${TRUENAS_API_KEY:?API key not set}"
|
||||
|
||||
API_BASE="https://${TRUENAS_HOST}/api/v2.0"
|
||||
CURL_OPTS="-s -H 'Authorization: Bearer ${TRUENAS_API_KEY}' --insecure"
|
||||
|
||||
echo "=== TrueNAS Health Check ==="
|
||||
|
||||
# System version
|
||||
echo "System Version:"
|
||||
curl ${CURL_OPTS} "${API_BASE}/system/version" | jq -r '.fullversion'
|
||||
|
||||
# Pool status
|
||||
echo "Pool Status:"
|
||||
curl ${CURL_OPTS} "${API_BASE}/pool" | \
|
||||
jq -r '.[] | "\(.name): \(.status) (Healthy: \(.healthy))"'
|
||||
|
||||
# Disk temperatures
|
||||
echo "Disk Temperatures:"
|
||||
curl ${CURL_OPTS} "${API_BASE}/disk/temperature" | \
|
||||
jq -r 'to_entries[] | "\(.key): \(.value)°C"'
|
||||
|
||||
# Service status
|
||||
echo "Service Status:"
|
||||
curl ${CURL_OPTS} "${API_BASE}/service" | \
|
||||
jq -r '.[] | select(.enable == true) | "\(.service): \(.state)"'
|
||||
```
|
||||
|
||||
### Export Pool Configuration
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# export-pool-config.sh
|
||||
|
||||
POOL_NAME="Vauly"
|
||||
OUTPUT_DIR="./pool-export-$(date +%Y%m%d)"
|
||||
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
|
||||
# Pool info
|
||||
curl -s -X GET "https://192.168.2.150/api/v2.0/pool" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure | jq ".[] | select(.name == \"${POOL_NAME}\")" \
|
||||
> "${OUTPUT_DIR}/pool-${POOL_NAME}.json"
|
||||
|
||||
# Datasets
|
||||
curl -s -X GET "https://192.168.2.150/api/v2.0/pool/dataset" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure | jq ".[] | select(.pool == \"${POOL_NAME}\")" \
|
||||
> "${OUTPUT_DIR}/datasets-${POOL_NAME}.json"
|
||||
|
||||
echo "Pool configuration exported to: ${OUTPUT_DIR}"
|
||||
```
|
||||
|
||||
### Monitor Specific Dataset
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# monitor-dataset.sh
|
||||
|
||||
DATASET="Vauly/iso-vault"
|
||||
API_BASE="https://192.168.2.150/api/v2.0"
|
||||
|
||||
# URL encode the dataset name
|
||||
ENCODED_DATASET=$(echo "${DATASET}" | sed 's/\//%2F/g')
|
||||
|
||||
curl -s -X GET "${API_BASE}/pool/dataset?id=${ENCODED_DATASET}" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure | jq '{
|
||||
name: .name,
|
||||
type: .type,
|
||||
mountpoint: .mountpoint,
|
||||
used: .used.value,
|
||||
available: .available.value,
|
||||
compression: .compression.value
|
||||
}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Middleware CLI Alternative
|
||||
|
||||
For commands requiring higher privileges or unavailable via API:
|
||||
|
||||
```bash
|
||||
# Connect via SSH
|
||||
ssh admin@192.168.2.150
|
||||
|
||||
# Use midclt for middleware calls
|
||||
midclt call system.info
|
||||
midclt call pool.query
|
||||
midclt call pool.dataset.query '[["pool", "=", "Vauly"]]'
|
||||
|
||||
# Complex queries with filters
|
||||
midclt call disk.query '[["pool", "=", "Vauly"]]' \
|
||||
'{"select": ["name", "serial", "model", "size"]}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Version Compatibility
|
||||
|
||||
**This documentation is based on:**
|
||||
- TrueNAS Scale 23.10.x (Cobia)
|
||||
- API version 2.0
|
||||
|
||||
**Check API version:**
|
||||
```bash
|
||||
curl -X GET "https://192.168.2.150/api/v2.0/system/version" \
|
||||
-H "Authorization: Bearer ${TRUENAS_API_KEY}" \
|
||||
--insecure
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Additional Resources
|
||||
|
||||
**Official Documentation:**
|
||||
- API Docs: https://www.truenas.com/docs/api/scale_rest_api.html
|
||||
- WebSocket API: https://www.truenas.com/docs/api/scale_websocket_api.html
|
||||
|
||||
**Community:**
|
||||
- Forums: https://forums.truenas.com/
|
||||
- GitHub: https://github.com/truenas/middleware
|
||||
|
||||
**Tools:**
|
||||
- API Explorer: `https://192.168.2.150/api/docs/` (built-in)
|
||||
|
||||
---
|
||||
|
||||
**Document Version:** 1.0.0
|
||||
**Last Updated:** 2025-12-14
|
||||
**API Version:** 2.0
|
||||
**Maintained By:** Scribe Agent
|
||||
**Homelab Repository:** /home/jramos/homelab
|
||||
Reference in New Issue
Block a user