The Valethon Helpdesk API enables end-user portals and integrations to interact with the support system. It provides ticket management, asset visibility, knowledge base access, AI chat, billing, and project tracking for authenticated helpdesk users.
Base URL: https://{tenant}.valethon.com/helpdesk/api/v1
The Helpdesk API supports two authentication methods:
Standard browser session via cookies. Used by the Helpdesk SPA.
For programmatic access. Obtain tokens via the login endpoint and include them in subsequent requests.
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Token Lifecycle:
All responses return JSON with consistent structure:
Success:
{
"success": true,
"data": { ... }
}
Error:
{
"error": "Description of the error"
}
Paginated:
{
"tickets": [ ... ],
"pagination": {
"page": 1,
"limit": 20,
"total": 150,
"total_pages": 8
}
}
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created |
| 204 | No Content (successful DELETE) |
| 400 | Bad Request (validation error) |
| 401 | Unauthorized (authentication required) |
| 403 | Forbidden (insufficient permissions or module disabled) |
| 404 | Not Found |
| 500 | Internal Server Error |
Authenticate with email and password. Returns JWT tokens.
Request:
{
"username": "user@company.com",
"password": "secret"
}
Response (200):
{
"success": true,
"access_token": "eyJhbG...",
"refresh_token": "dGhpcyBpc...",
"token_type": "Bearer",
"expires_in": 3600,
"user": {
"employee_number": 42,
"first_name": "Jane",
"last_name": "Smith",
"email": "jane@company.com",
"company_name": "Acme Corp"
}
}
Exchange a refresh token for a new access token.
Request:
{
"refresh_token": "dGhpcyBpc..."
}
Response (200):
{
"success": true,
"access_token": "eyJhbG...",
"token_type": "Bearer",
"expires_in": 3600
}
Check current authentication status.
Response (200):
{
"authenticated": true,
"user": { ... }
}
Destroy session and optionally revoke refresh token.
Request (optional):
{
"refresh_token": "dGhpcyBpc..."
}
Get the authenticated user's full profile.
Response (200):
{
"employee_number": 42,
"company_number": 1,
"site_number": 5,
"first_name": "Jane",
"last_name": "Smith",
"email": "jane@company.com",
"phone": "+1-555-0123",
"department": "Engineering",
"company_name": "Acme Corp",
"site_name": "Main Office",
"permissions": {
"can_create_tickets": true,
"can_view_assets": true,
"can_view_billing": false
}
}
Update the authenticated user's profile fields.
Request:
{
"first_name": "Jane",
"last_name": "Smith-Jones",
"phone": "+1-555-9999"
}
Change the authenticated user's password.
Request:
{
"current_password": "oldpass",
"new_password": "newpass123!"
}
Get enabled OAuth providers for social login.
Response (200):
{
"success": true,
"providers": [
{ "key": "google", "name": "Google", "icon": "google", "color": "#4285F4" },
{ "key": "microsoft", "name": "Microsoft", "icon": "microsoft", "color": "#00A4EF" }
]
}
Get OAuth authorization URL for a provider.
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| provider | string | Yes | google, microsoft, or apple |
| redirect_uri | string | No | Custom redirect URI |
List tickets for the authenticated user.
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
| status | string | all | open, closed, in_progress, on_hold, all |
| page | int | 1 | Page number |
| limit | int | 20 | Items per page (max 100) |
Response (200):
{
"tickets": [
{
"ticket_id": 1042,
"ticket_number": 3018,
"subject": "Printer not working",
"description": "The main office printer shows offline...",
"status": "open",
"priority": 3,
"job_type": "Hardware",
"assigned_tech": 5,
"created_at": "2026-03-10T14:30:00Z",
"updated_at": "2026-03-11T09:15:00Z",
"closed_at": null
}
],
"pagination": { "page": 1, "limit": 20, "total": 45, "total_pages": 3 }
}
Create a new support ticket.
Request:
{
"subject": "VPN connection failing",
"description": "Unable to connect to VPN since this morning...",
"priority": 3,
"job_type": "Network"
}
Response (201):
{
"success": true,
"ticket_id": 1043,
"ticket_number": 3019,
"subject": "VPN connection failing",
"status": "open",
"requires_approval": false
}
Get full ticket details including comments, assets, and contracts.
Response (200):
{
"ticket_id": 1042,
"ticket_number": 3018,
"subject": "Printer not working",
"description": "...",
"status": "open",
"priority": 3,
"job_type": "Hardware",
"assigned_tech": 5,
"created_at": "2026-03-10T14:30:00Z",
"comments": [
{
"comment_id": 501,
"comment": "I've checked the network cable...",
"author_name": "Mike Tech",
"is_internal": false,
"created_at": "2026-03-10T15:00:00Z"
}
],
"asset": { "asset_id": 200, "machine_name": "HP LaserJet Pro" },
"contracts": []
}
Update ticket fields (status, priority, subject, job type).
Add a comment to a ticket.
Request:
{
"comment": "I've tried restarting the printer and the issue persists."
}
List tickets pending manager approval. Requires manager role.
Get count of tickets pending approval (for UI badge).
Response (200):
{
"is_manager": true,
"pending_count": 3
}
Approve a pending ticket. Requires manager role.
Reject a pending ticket with reason. Requires manager role.
Request:
{
"reason": "This request needs additional budget approval first."
}
Get tickets for the authenticated user's team (manager only).
Search tickets with advanced filters.
Perform bulk operations on multiple tickets.
Export tickets to file (CSV, PDF).
List employees for the company.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| page | int | Page number |
| per_page | int | Items per page |
| search | string | Search by name or email |
| status | string | Filter by status |
| department | string | Filter by department |
Get employee details.
Create a new employee.
Update employee information.
Get employee list for dropdown selectors.
Get template structure for creating employees.
Bulk import employees from CSV or JSON.
Manager group endpoints require IT admin privileges.
List all manager groups.
Get manager group details.
Create a new manager group.
Update a manager group.
Delete a manager group.
Add a manager to a group.
Remove a manager from a group.
Add a member to a manager group.
Remove a member from a manager group.
Get employees available to add to a group.
Asset endpoints require authentication and asset read/edit permissions.
List assets the user has access to.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| page | int | Page number |
| per_page | int | Items per page |
| type | string | Filter by asset type |
| status | string | Filter by status |
| q | string | Search query |
| mine | boolean | Only user's assigned assets |
Get asset details with ports, credentials, licenses, and contracts.
Create a new asset. Requires asset edit permission.
Update asset information.
Delete an asset.
Add a network port to an asset.
Update port information.
Delete a port.
Add login credentials to an asset.
Update stored credentials.
Delete stored credentials.
Get licenses linked to an asset.
Link a license to an asset.
Unlink a license from an asset.
Get service contracts linked to an asset.
Get IP addresses assigned to an asset.
Get assets for dropdown selectors.
Get template for creating assets.
Bulk import assets.
Start a new chat session or resume an existing one.
Response (200):
{
"chat_id": 101,
"status": "active",
"ticket_id": null,
"started_at": "2026-03-13T10:00:00Z",
"resumed": false,
"messages": []
}
Get chat message history.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| page | int | Page number |
| per_page | int | Messages per page |
| since | string | ISO timestamp, return messages after this time |
Send a message to the chat (processed by Val AI).
Request:
{
"message": "My laptop won't connect to the Wi-Fi network"
}
Response (200):
{
"message_id": 502,
"sender_type": "user",
"message": "My laptop won't connect to the Wi-Fi network",
"created_at": "2026-03-13T10:05:00Z"
}
Create a ticket from the chat conversation.
Request transfer to a human support agent.
End the chat session.
Search and list knowledge base articles.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| page | int | Page number |
| per_page | int | Items per page |
| search | string | Full-text search query |
| category | string | Filter by category |
Get a single article with related entity links.
Create a new KB article.
Update an existing KB article.
Billing endpoints require the Billing module to be enabled for the company.
List company invoices.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| page | int | Page number |
| per_page | int | Items per page |
| status | string | Filter by invoice status |
Get invoice details with line items.
List company payments.
List billing proposals.
Get proposal details.
Act on a proposal (accept, reject).
List active subscriptions.
List billing statements.
List company networks.
Get network details with VLAN information.
List company sites and locations.
List software licenses for the company.
List service contracts.
List registered domains.
List company projects.
Get project details with phases, milestones, and punch list.
List milestones for a project.
List milestones pending approval (manager only).
Get count of milestones pending approval.
Get milestone details.
Approve a milestone (manager only).
Reject a milestone with reason (manager only).
Request additional information about a milestone.
Get project punch list items.
Submit punch list items.
Respond to punch list item feedback.
Upload attachments to a punch list item.
Get dashboard metrics and KPIs.
List available reports.
Get report configuration.
Create a new report.
Update report configuration.
Delete a report.
Execute report and get results.
Export report to file (CSV, PDF, XLSX).
Sync report to Google Sheets.
Get available fields for report creation.
Universal search across all entities (tickets, assets, employees, KB articles).
List saved search queries.
Save a search query.
Delete a saved search.
Get backup status and recent backups.
List data recovery requests.
Submit a data restoration request.
Called on SPA initialization. Returns tenant branding, user context, features, and OAuth providers. No authentication required.
Dynamically generated CSS with tenant branding colors. No authentication required.
Get service outage status for the company.
Get available job types (ticket categories).
Get enabled feature modules for the company.
| Permission | Controls |
|---|---|
can_create_tickets | Ticket creation |
asset_edit (None/Read Only/Modify) | Asset access level |
ismgr | Manager approval capabilities |
it_privileges | IT admin features |
| Billing module | Access to billing endpoints |
The API enforces rate limits per session/token. When exceeded, a 429 Too Many Requests response is returned. Standard limits apply per-tenant.
For the OpenAPI specification, see helpdesk-openapi.yaml.
For ServiceOS admin API documentation, see ServiceOS API Reference.
For CRM integration API documentation, see CRM API Reference.