The Valethon ServiceOS API provides programmatic access to the full admin interface — tickets, customers, assets, networks, billing, and more. It supports both session-based authentication for the admin SPA and API key authentication for external integrations.
Base URL: https://{tenant}.valethon.com/admin/api/v1
The ServiceOS API supports two authentication methods:
Standard browser session via cookies. Used by the admin SPA and PHP-rendered pages. Sessions are tenant-specific (cookie name: VALETHON_{TENANT_SLUG}).
For programmatic access. API keys are scoped to specific modules with read/write/delete permissions.
Authorization: Bearer vsa_a1b2c3d4e5f6...
Key prefix: vsa_ (Valethon ServiceOS API)
API keys are managed via Settings → API Keys and support:
tickets:read, tickets:write, assets:readAuthorization: Bearer vsa_* headerauth_method (session or api_key)API key requests are rate-limited per key. Session-based requests follow standard session rate limits.
Default limits:
| Auth Method | Limit |
|---|---|
| Session | 300 requests/minute |
| API Key | 120 requests/minute (configurable) |
Headers:
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 115
X-RateLimit-Reset: 1710350460
All API responses follow a consistent JSON structure:
Success:
{
"success": true,
"data": { ... }
}
Error:
{
"success": false,
"error": "Description of the error"
}
Paginated:
{
"success": true,
"data": [ ... ],
"pagination": {
"page": 1,
"per_page": 25,
"total": 500,
"total_pages": 20
}
}
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created |
| 204 | No Content (successful DELETE) |
| 400 | Bad Request (validation error) |
| 401 | Unauthorized (authentication required) |
| 403 | Forbidden (insufficient permissions) |
| 404 | Not Found |
| 409 | Conflict (duplicate resource) |
| 429 | Rate Limited |
| 500 | Internal Server Error |
Permission: tickets:read, tickets:write
List tickets with filtering, sorting, and pagination.
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
| page | int | 1 | Page number |
| per_page | int | 25 | Items per page (max 100) |
| status | string | all | open, closed, in_progress, on_hold, all |
| priority | int | Filter by priority (1-5) | |
| company_number | int | Filter by company | |
| site_number | int | Filter by site | |
| assigned_to | int | Filter by assigned technician | |
| job_type | string | Filter by job type/category | |
| search | string | Full-text search on subject and description | |
| created_after | string | ISO 8601 date filter | |
| created_before | string | ISO 8601 date filter | |
| sort | string | created_at | Sort field |
| order | string | desc | asc or desc |
Response (200):
{
"success": true,
"data": [
{
"ticket_id": 1042,
"ticket_number": 3018,
"subject": "Printer not working in main office",
"description": "The HP LaserJet on floor 2 shows offline...",
"status": "open",
"priority": 3,
"job_type": "Hardware",
"company_number": 5,
"company_name": "Acme Corp",
"site_number": 12,
"site_name": "Main Office",
"assigned_to": 8,
"assigned_name": "Mike Tech",
"created_at": "2026-03-10T14:30:00Z",
"updated_at": "2026-03-11T09:15:00Z",
"closed_at": null
}
],
"pagination": { "page": 1, "per_page": 25, "total": 450, "total_pages": 18 }
}
Create a new ticket.
Request:
{
"subject": "VPN connection failing",
"description": "Unable to connect to VPN since this morning. Error: timeout.",
"priority": 3,
"job_type": "Network",
"company_number": 5,
"site_number": 12,
"assigned_to": 8
}
Response (201):
{
"success": true,
"data": {
"ticket_id": 1043,
"ticket_number": 3019,
"status": "open"
}
}
Get full ticket details including comments, assets, time entries, and contracts.
Update ticket fields (status, priority, assignment, subject, description).
Delete a ticket.
Get comments for a ticket.
Add a comment to a ticket.
Request:
{
"comment": "Checked the VPN server logs. Found certificate expiration issue.",
"is_internal": true
}
Get time entries for a ticket.
Add a time entry.
Request:
{
"duration_minutes": 45,
"description": "Diagnosed VPN certificate issue and renewed certificates",
"billable": true
}
Export tickets to CSV or PDF.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| format | string | csv or pdf |
| status | string | Filter (same as list) |
| date_from | string | Start date |
| date_to | string | End date |
List customer companies.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| page | int | Page number |
| per_page | int | Items per page |
| search | string | Search by company name |
| status | string | active, inactive, all |
Response (200):
{
"success": true,
"data": [
{
"company_number": 5,
"customer": "Acme Corp",
"address": "123 Main St",
"city": "Springfield",
"state": "IL",
"zip": "62701",
"phone": "555-0100",
"status": "Active",
"site_count": 3,
"open_tickets": 12
}
],
"pagination": { ... }
}
Get company details with modules, sites, and summary statistics.
Create a new company.
Update company information.
Delete a company.
Get enabled modules for a company.
Enable or disable modules for a company.
List sites for a company.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| company_number | int | Filter by company |
| page | int | Page number |
| per_page | int | Items per page |
| search | string | Search by site name |
Get site details with buildings, floors, rooms, and zone hierarchy.
Create a new site.
Update site information.
Delete a site.
Get the full site hierarchy (buildings, floors, rooms, zones).
List assets with filtering.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| page | int | Page number |
| per_page | int | Items per page |
| company_number | int | Filter by company |
| site_number | int | Filter by site |
| type | string | Filter by asset type |
| status | string | Filter by status |
| search | string | Search by name, serial, or IP |
Response (200):
{
"success": true,
"data": [
{
"asset_id": 200,
"asset_number": 45,
"machine_name": "HP LaserJet Pro",
"asset_type": "Printer",
"serial_number": "SN12345",
"company_number": 5,
"company_name": "Acme Corp",
"site_number": 12,
"site_name": "Main Office",
"status": "Active",
"ip_address": "192.168.1.50",
"mac_address": "AA:BB:CC:DD:EE:FF"
}
],
"pagination": { ... }
}
Get asset details with ports, credentials, licenses, contracts, and software inventory.
Create a new asset.
Update asset information.
Delete an asset.
Get network ports for an asset.
Add a network port.
Update port information.
Delete a port.
Get installed software for an asset.
Get network topology connections for an asset.
Bulk import assets from CSV.
List contacts/employees for a company.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| company_number | int | Filter by company |
| page | int | Page number |
| per_page | int | Items per page |
| search | string | Search by name or email |
| status | string | Active, Inactive, all |
| department | string | Filter by department |
Get contact details.
Create a new contact.
Update contact information.
Delete a contact.
Bulk import contacts from CSV.
List service contracts.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| company_number | int | Filter by company |
| status | string | active, expired, pending, all |
| page | int | Page number |
| per_page | int | Items per page |
Get contract details with linked assets and renewal information.
Create a new contract.
Update contract information.
Delete a contract.
List software licenses.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| company_number | int | Filter by company |
| page | int | Page number |
| per_page | int | Items per page |
| search | string | Search by license name |
| status | string | active, expired, all |
Get license details with assigned assets.
Create a new license.
Update license information.
Delete a license.
List networks for a company.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| company_number | int | Filter by company |
| site_number | int | Filter by site |
| page | int | Page number |
| per_page | int | Items per page |
Response (200):
{
"success": true,
"data": [
{
"network_id": 10,
"description": "Main Office LAN",
"network_address": "192.168.1.0",
"subnet_mask": "255.255.255.0",
"gateway": "192.168.1.1",
"company_number": 5,
"site_number": 12
}
],
"pagination": { ... }
}
Get network details with IP address assignments.
Create a new network.
Update network information.
Delete a network.
List VLANs.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| company_number | int | Filter by company |
| site_number | int | Filter by site |
| page | int | Page number |
| per_page | int | Items per page |
Get VLAN details with assigned ports.
Create a new VLAN.
Update VLAN information.
Delete a VLAN.
List vendor companies.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| page | int | Page number |
| per_page | int | Items per page |
| search | string | Search by vendor name |
Get vendor details with linked contracts and assets.
Create a new vendor.
Update vendor information.
Delete a vendor.
List invoices.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| company_number | int | Filter by company |
| status | string | draft, sent, paid, overdue, void |
| page | int | Page number |
| per_page | int | Items per page |
| date_from | string | Invoice date range start |
| date_to | string | Invoice date range end |
Get invoice details with line items and payment history.
Create a new invoice.
Update invoice information.
List payments.
Record a payment.
List active subscriptions.
List Service Stack (marketplace) products and subscriptions.
Purchase a Service Stack product.
List registered collectors.
Response (200):
{
"success": true,
"data": [
{
"collector_id": "c-abc123",
"company_number": 5,
"site_number": 12,
"site_name": "Main Office",
"status": "active",
"version": "0.2.0",
"last_seen_at": "2026-03-13T14:00:00Z",
"sync_status": "completed",
"last_sync_at": "2026-03-13T13:55:00Z"
}
]
}
Register a new collector.
Update collector configuration.
Revoke a collector.
Receive discovery data sync from a collector. See the Connect App documentation for sync payload format.
Poll for pending commands (used by collector).
Report command execution result.
Get the discovery processing queue.
Initiate a network discovery scan.
Request:
{
"company_number": 5,
"site_number": 12,
"scan_type": "full",
"subnet": "192.168.1.0/24"
}
Get discovery scan results.
The CRM module has its own dedicated API with separate authentication. See CRM API Reference for complete documentation.
List CRM leads (also available via CRM API).
Get sales pipeline summary and stage counts.
Get CRM dashboard metrics.
List knowledge base articles.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| page | int | Page number |
| per_page | int | Items per page |
| search | string | Full-text search |
| category | int | Filter by category |
| visibility | string | public, internal, both |
Get article details with linked entities.
Create a new article.
Update an article.
Delete an article.
List KB categories.
Create a category.
Get dashboard KPIs and metrics.
Response (200):
{
"success": true,
"data": {
"open_tickets": 45,
"high_priority": 8,
"avg_resolution_hours": 4.2,
"tickets_today": 12,
"tickets_this_week": 67,
"sla_compliance": 94.5
}
}
List available reports.
Get report configuration.
Create a new report.
Update report configuration.
Delete a report.
Execute a report and return results.
Export report to file (CSV, PDF, XLSX).
Get available fields for building reports.
List API keys (masked, showing prefix only).
Create a new API key.
Request:
{
"name": "Monitoring Integration",
"permissions": ["tickets:read", "tickets:write", "assets:read"],
"expires_at": "2027-03-13T00:00:00Z"
}
Response (201):
{
"success": true,
"data": {
"key_id": 5,
"api_key": "vsa_a1b2c3d4e5f6g7h8i9j0...",
"name": "Monitoring Integration",
"prefix": "vsa_a1b2",
"permissions": ["tickets:read", "tickets:write", "assets:read"],
"expires_at": "2027-03-13T00:00:00Z"
},
"message": "Store this key securely. It will not be shown again."
}
Update key name or permissions.
Revoke an API key.
List dropdown configurations.
Update dropdown values.
List email templates.
Update an email template.
Get branding and theme colors.
Update branding and theme colors.
List service outages and current status.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| company_number | int | Filter by company |
| service_id | int | Filter by service |
| status | string | active, resolved, scheduled, all |
Get outage details with status history.
Create a new outage record.
Update outage status (triggers notifications).
Request:
{
"status": "operating_normally",
"notes": "Issue has been resolved. Root cause was DNS misconfiguration.",
"send_notification": true
}
List global service definitions.
Get services assigned to a company.
List workflow definitions.
Get workflow details with steps and conditions.
Create a new workflow.
Update a workflow definition.
Delete a workflow.
Manually trigger a workflow.
Get workflow execution history.
Get system health dashboard data.
Get collector health and sync status.
List active monitoring alerts.
Acknowledge an alert.
Get admin activity log.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| page | int | Page number |
| per_page | int | Items per page |
| user | string | Filter by admin user |
| action | string | create, update, delete |
| entity_type | string | Filter by entity type |
| date_from | string | Start date |
| date_to | string | End date |
Get application error log (ops tenant only).
Get available ticket job types/categories.
List departments.
Get technician statuses.
Perform bulk operations on tickets.
Request:
{
"action": "assign",
"ticket_ids": [1042, 1043, 1044],
"assigned_to": 8
}
Supported actions: assign, close, update_priority, update_status, delete
Perform bulk operations on assets.
Perform bulk import/update of contacts.
List configured webhooks.
Register a new webhook.
Request:
{
"url": "https://your-app.com/webhooks/valethon",
"events": ["ticket.created", "ticket.closed", "asset.discovered"],
"secret": "your_webhook_secret",
"active": true
}
Update webhook configuration.
Remove a webhook.
| Event | Trigger |
|---|---|
ticket.created | New ticket created |
ticket.updated | Ticket fields updated |
ticket.closed | Ticket closed |
ticket.assigned | Ticket assigned to tech |
asset.created | New asset added |
asset.updated | Asset information changed |
asset.discovered | Asset found by discovery |
outage.started | Service outage begins |
outage.resolved | Service outage resolved |
collector.sync | Collector sync completed |
Universal search across all entity types.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| q | string | Search query |
| types | string | Comma-separated types: tickets, companies, assets, contacts, kb |
| limit | int | Max results per type (default 5) |
Response (200):
{
"success": true,
"data": {
"tickets": [
{ "ticket_id": 1042, "subject": "Printer not working", "score": 0.95 }
],
"assets": [
{ "asset_id": 200, "machine_name": "HP LaserJet Pro", "score": 0.85 }
],
"total": 2
}
}
| Permission | Controls |
|---|---|
tickets:read | View tickets, comments, time entries |
tickets:write | Create/update tickets, add comments |
tickets:delete | Delete tickets |
companies:read | View company information |
companies:write | Create/update companies |
assets:read | View assets, ports, software |
assets:write | Create/update assets |
assets:delete | Delete assets |
contacts:read | View contacts/employees |
contacts:write | Create/update contacts |
contracts:read | View service contracts |
contracts:write | Create/update contracts |
licenses:read | View software licenses |
licenses:write | Create/update licenses |
networks:read | View networks, VLANs, IPs |
networks:write | Create/update networks |
billing:read | View invoices, payments |
billing:write | Create invoices, record payments |
kb:read | View KB articles |
kb:write | Create/update KB articles |
reports:read | View and run reports |
reports:write | Create/update report definitions |
settings:read | View settings |
settings:write | Modify settings |
For the Helpdesk API, see Helpdesk API Reference.
For the CRM integration API, see CRM API Reference.