Browse Help Desk documentation
API reference

Endpoint reference

Every GVenta Help Desk REST endpoint — 186 in 22 groups — with method, path, authentication and what each call does.

Documented from GVenta Help Desk version 1.8.55.

Conventions

All endpoints are relative to your own instance, for example https://your-instance.example/api. Staff endpoints take a JWT from POST /api/auth/login (or fall back to the browser session), long-lived API keys are sent as X-API-Key or Authorization: Bearer, "flexible" endpoints accept either, and client-portal endpoints use client-scoped tokens. Requests authenticated with an API key are exempt from CSRF. New to the API? Read API getting started first, then try the worked examples.

Staff authentication

Method Path Auth What it does
POST /api/auth/login None

Authenticate with email and password.

Returns an access token, refresh token, user record and a password_must_change flag.

POST /api/auth/logout JWT

Blacklist the presented token and end the session.

POST /api/auth/refresh None

Exchange a refresh token for a new access token.

POST /api/auth/forgot-password None

Send a password reset email.

POST /api/auth/reset-password None

Complete a password reset using an emailed token.

GET /api/auth/me JWT

Return the authenticated user.

Client authentication

Method Path Auth What it does
POST /api/client/auth/login None

Authenticate a customer contact and return a client-scoped token pair.

POST /api/client/auth/logout Client

End the client session and blacklist the token.

POST /api/client/auth/refresh None

Refresh a client access token.

POST /api/client/auth/forgot-password None

Send a client password reset email.

POST /api/client/auth/reset-password None

Complete a client password reset.

Also the account-activation path.

POST /api/client/auth/register None

Self-register a client account.

With a ticket number, activates instantly after verifying the requester email matches; without one, emails an activation link and returns a uniform response that cannot be used to enumerate accounts.

Public

Method Path Auth What it does
GET /api/public/ticket/{ticket_number}/requester-email None

Return the masked requester address for a ticket number.

Used to hint the correct sign-in address on the registration form.

GET /oauth/success None

Microsoft 365 OAuth completion landing endpoint.

GET /api/health None

Health probe returning status, timestamp and version.

Rate-limit exempt.

GET /api/metrics Token

Metrics in Prometheus exposition format.

Protected by METRICS_TOKEN when set. Rate-limit exempt.

Client portal

Client-portal endpoints are scoped to the signed-in contact's company: ownership is verified on every ticket and attachment, mismatches are audit-logged and answered with 404, and internal notes are stripped server-side.

Method Path Auth What it does
GET /api/client/tickets Client

List the contact's company's tickets.

Supports page, per_page (max 100) and status.

GET /api/client/tickets/{id} Client

Return a single ticket with its conversation and attachments.

Internal notes are removed server-side. Company ownership is verified; mismatches are audit-logged and return 404.

POST /api/client/tickets Client

Create a ticket.

Body: subject, description, optional priority, optional attachments[].

POST /api/client/tickets/{id}/responses Client

Add a reply to a ticket.

Optionally with CC addresses and attachments[]. Reopens pending tickets, refuses closed tickets and notifies the assigned agent.

GET /api/client/tickets/{id}/attachments/{attachmentId} Client

Stream an attachment inline after ownership verification.

GET /api/client/tickets/{id}/attachments/{attachmentId}/download Client

Download an attachment after ownership verification.

GET /api/client/kb/categories Client

List visible categories containing at least one accessible article.

GET /api/client/kb/articles Client

Search and list accessible knowledge base articles.

Supports search, category_id, limit, offset.

GET /api/client/kb/articles/{id} Client

Return a single accessible article.

Tickets

Core ticket read and create endpoints are "flexible" so an integration can authenticate with either a JWT or an API key; an unknown source value on create auto-registers in the ticket-source vocabulary.

Method Path Auth What it does
GET /api/tickets Flexible

List and filter tickets.

Filters: status (comma-separated), priority, assigned_to (accepts unassigned), requester_email, customer_id (comma-separated), source, search, tags, date_from, date_to, date_field (created_at / updated_at / resolved_at / closed_at / sla_due_at), limit (max 100), offset, order_by, order_dir.

GET /api/tickets/{id} Flexible

Return a single ticket with its relations.

GET /api/tickets/by-number/{ticketNumber} Flexible

Look up a ticket by its human-readable ticket number.

POST /api/tickets Flexible

Create a ticket.

Requires subject and a valid requester_email. Optional status, priority, description, source, assigned_to, customer_id. An unknown source auto-registers. A description becomes the opening message. Assignment triggers a notification email.

PUT /api/tickets/{id} JWT

Update ticket fields.

DELETE /api/tickets/{id} JWT

Delete a ticket.

PUT /api/tickets/{id}/assign JWT

Assign or unassign a ticket.

Body: user_id (nullable). Notifies the new assignee.

PUT /api/tickets/{id}/customer JWT

Link or unlink the ticket's company.

Body: customer_id (nullable).

PUT /api/tickets/{id}/status JWT

Change a ticket's status.

Fires customer and agent notifications plus the admin side-channel.

PUT /api/tickets/{id}/priority JWT

Change a ticket's priority.

GET /api/tickets/{id}/tags JWT

List a ticket's tags.

POST /api/tickets/{id}/tags JWT

Add a tag to a ticket.

DELETE /api/tickets/{id}/tags/{tagId} JWT

Remove a tag from a ticket.

POST /api/tickets/{id}/reply JWT

Send a reply on a ticket.

Accepts JSON or multipart/form-data with body, is_html, internal_note, cc (JSON array) and attachments[]. Persists the message, resolves and records CCs, uploads attachments, emails the customer with attachments included, stamps first_response_at, and returns granular delivery status (email_sent, email_error, email_error_code). Enforces AI-agent reply permissions.

POST /api/tickets/{id}/spam JWT

Archive a ticket to the spam table and hard-delete the original.

The spam record keeps the full ticket detail.

Messages and attachments

Method Path Auth What it does
GET /api/tickets/{ticketId}/messages Flexible

Return the full conversation thread for a ticket.

POST /api/tickets/{ticketId}/messages Flexible

Create a message on a ticket.

message_type is one of customer_reply, agent_reply, internal_note, system. Sender identity is derived from the authenticated user when not supplied, preventing sender spoofing, while explicit values remain available to the sync workers posting on a customer's behalf. Bumps the ticket's updated_at and dispatches ticket.new_message for agent and customer replies.

GET /api/messages/{id} JWT

Return a single message.

PUT /api/messages/{id} JWT

Update a message.

DELETE /api/messages/{id} JWT

Delete a message.

GET /api/messages/{messageId}/attachments JWT

List a message's attachments.

POST /api/messages/{messageId}/attachments JWT

Attach files to a message.

GET /api/messages/search JWT

Full-text search across message bodies.

GET /api/attachments/{id}/download None

Download an attachment through the proxy.

Never exposes a public storage URL.

DELETE /api/attachments/{id} JWT

Delete an attachment from storage and the database.

Customers and contacts

Method Path Auth What it does
GET /api/customers JWT

List and search companies.

Supports per_page, is_active, search and industry filters. Returns contact and ticket counts.

GET /api/customers/{id} JWT

Return a single company with its contacts.

POST /api/customers JWT

Create a company.

PUT /api/customers/{id} JWT

Update a company.

DELETE /api/customers/{id} JWT

Soft-delete a company.

GET /api/customers/{id}/contacts JWT

List the contacts for a company.

POST /api/customers/{id}/contacts JWT

Create a contact under a company.

GET /api/contacts JWT

List and filter all contacts across companies.

GET /api/contacts/{id} JWT

Return a single contact.

PUT /api/contacts/{id} JWT

Update a contact.

DELETE /api/contacts/{id} JWT

Soft-delete a contact.

Users and roles

Method Path Auth What it does
GET /api/users JWT

List staff users.

POST /api/users JWT

Create a staff user.

Body: email, names, password, role, active flag, AI-agent flags.

PUT /api/users/{id} JWT

Update a user.

DELETE /api/users/{id} JWT

Delete a user.

POST /api/users/{id}/reset-password JWT

Set a temporary password for a user.

Flags password_must_change and optionally emails the user.

PUT /api/users/profile JWT

Update your own profile.

PUT /api/users/password JWT

Change your own password.

POST /api/users/avatar JWT

Upload your avatar to object storage.

GET /api/roles JWT

List all roles with display names, descriptions and permission lists.

GET /api/roles/{role} JWT

Return one role's metadata.

GET /api/roles/me/permissions JWT

Return the caller's effective permissions.

POST /api/roles/me/check-permission JWT

Test whether the caller holds a single permission.

POST /api/roles/me/check-permissions JWT

Test several permissions at once.

Knowledge base

Method Path Auth What it does
GET /api/kb/articles None

List and filter articles.

Filters: status, category_id, author_id, is_featured, search, tag_id, visibility, can_edit_role, limit, offset, order_by, order_dir.

GET /api/kb/articles/{id} None

Return a single article, with permission checking.

GET /api/kb/articles/slug/{slug} None

Return a single article by slug.

POST /api/kb/articles JWT

Create an article.

Requires category_id, title, body_html. Auto-generates a unique slug, plain-text body and excerpt. Accepts tags and company_ids.

PUT /api/kb/articles/{id} JWT

Update an article.

DELETE /api/kb/articles/{id} JWT

Delete an article.

POST /api/kb/articles/{id}/publish JWT

Publish an article and stamp published_at.

POST /api/kb/articles/{id}/unpublish JWT

Return an article to draft.

POST /api/kb/articles/{id}/vote/helpful None

Record a helpful vote.

POST /api/kb/articles/{id}/vote/not-helpful None

Record a not-helpful vote.

GET /api/kb/categories None

List categories.

GET /api/kb/categories/tree None

Return the full nested category tree.

GET /api/kb/categories/{id} None

Return a single category.

GET /api/kb/categories/slug/{slug} None

Return a category by slug.

GET /api/kb/categories/{id}/breadcrumbs None

Return the ancestor chain for a category.

POST /api/kb/categories JWT

Create a category.

Body: name, slug, description, parent, visibility, company assignments.

PUT /api/kb/categories/{id} JWT

Update a category.

DELETE /api/kb/categories/{id} JWT

Delete a category.

POST /api/kb/categories/reorder JWT

Bulk reorder categories.

POST /api/kb/categories/{id}/move JWT

Re-parent a category.

GET /api/kb/images JWT

List media library images.

POST /api/kb/images JWT

Upload an image to the media library.

Multipart upload; CSRF-exempt for the upload form.

GET /api/kb/images/{id} None

Serve an image through the authenticated proxy.

DELETE /api/kb/images/{id} JWT

Delete an image.

Reports

Access to the reporting endpoints is restricted to the Super Admin, Agent and Viewer roles.

Method Path Auth What it does
GET /api/reports/overview JWT

Return summary statistics, status and priority distributions, volume trend, dual SLA compliance, response-time distribution and source distribution.

Accepts date_from, date_to and the shared filter set (status, priority, source, agent_id, customer_id).

GET /api/reports/agents JWT

Return agent performance, leaderboard, workload and optional per-agent detail.

GET /api/reports/customers JWT

Return customer statistics, top customers and optional per-customer detail.

GET /api/reports/contacts JWT

Return contact-level ticket statistics.

GET /api/reports/sources JWT

Return per-source volumes and trend over time.

GET /api/reports/filters JWT

Return the available filter options (active agents, customers, statuses) for building filter UIs.

GET /api/reports/export JWT

Export a report as CSV.

type selects the report; the same filters as the on-screen report are applied.

SLA

Method Path Auth What it does
GET /api/sla-settings JWT

Return policies, business hours, holidays and digest configuration in one call.

PUT /api/sla-policies JWT · Super Admin

Update per-priority first-response and resolution targets in minutes.

Validates priority values and enforces a one-minute minimum.

PUT /api/sla/business-hours JWT · Super Admin

Set the timezone and per-weekday enabled/open/close windows.

The timezone is validated against the system timezone list.

POST /api/sla/holidays JWT · Super Admin

Add a named non-working date.

DELETE /api/sla/holidays/{id} JWT · Super Admin

Remove a holiday.

PUT /api/sla/digest JWT · Super Admin

Configure weekly and monthly digests and their recipients.

Notifications

Method Path Auth What it does
GET /api/notifications/events JWT

List the five event types with enabled state and descriptions.

PUT /api/notifications/events/{key} JWT

Enable or disable an event.

GET /api/notifications/recipients/{eventKey} JWT

List the recipients for one event.

POST /api/notifications/recipients JWT

Add a recipient to an event.

PUT /api/notifications/recipients/{id} JWT

Update a recipient.

DELETE /api/notifications/recipients/{id} JWT

Remove a recipient.

GET /api/notifications/settings JWT

Return notification settings such as the daily report time.

PUT /api/notifications/settings JWT

Update notification settings.

POST /api/notifications/test/{eventKey} JWT

Send a test notification for an event.

Email — inbound sources

Method Path Auth What it does
GET /api/email-sources JWT

List configured inbound mailboxes.

GET /api/email-sources/{id} JWT

Return a single inbound source.

POST /api/email-sources JWT

Create a Microsoft 365 or IMAP inbound source.

Body: name, type, mailbox/credentials, sync folder, sync interval, mark-as-read, color, active flag. Credentials are encrypted at rest.

PUT /api/email-sources/{id} JWT

Update an inbound source.

DELETE /api/email-sources/{id} JWT

Soft-delete an inbound source.

POST /api/email-sources/{id}/make-default JWT

Mark a source as the default.

Clears the previous default.

POST /api/email-sources/test-connection JWT

Run a live connection test.

Checks DNS resolution, port connectivity and authentication.

POST /api/email-sources/{id}/start-worker JWT

Start this source's sync worker.

POST /api/email-sources/{id}/stop-worker JWT

Stop this source's sync worker.

Email — outbound configuration

Method Path Auth What it does
GET /api/outgoing-email JWT

Return the current active sending configuration.

POST /api/outgoing-email JWT

Save the sending configuration.

Microsoft 365 or SendGrid; From address and name, reply-to, domain.

POST /api/outgoing-email/test-connection JWT

Verify the provider credentials.

POST /api/outgoing-email/verify-dns JWT

Check the sending domain's DNS records.

POST /api/outgoing-email/send-test JWT

Send a real test email.

DELETE /api/outgoing-email/{id} JWT

Remove a sending configuration.

Microsoft 365 OAuth and workers

Method Path Auth What it does
GET /api/oauth/microsoft365/authorize JWT

Begin the OAuth flow via the broker.

GET /api/oauth/microsoft365/status JWT

Return the connection status.

GET /api/oauth/microsoft365/mailboxes JWT

List the mailboxes the connected account can access.

POST /api/oauth/microsoft365/refresh JWT

Force a token refresh.

DELETE /api/oauth/microsoft365/disconnect JWT

Disconnect the account.

GET /api/oauth/microsoft365/test JWT

Test the Graph connection.

POST /api/oauth/microsoft365/mailbox-config JWT

Update the mailbox configuration.

GET /api/oauth/microsoft365/worker-status JWT

Return per-source and aggregated worker health.

Alive state, heartbeat age, last sync, start time, error count, emails today/session/lifetime, last error, last check.

POST /api/oauth/microsoft365/worker/start JWT

Start the sync worker.

POST /api/oauth/microsoft365/worker/stop JWT

Stop the sync worker.

POST /api/oauth/microsoft365/worker/restart JWT

Restart the sync worker.

GET /api/oauth/microsoft365/worker/errors JWT

Return the recent worker error history.

Worker management

Method Path Auth What it does
GET /api/workers JWT

List all registered workers with their intended and actual running state.

GET /api/workers/{name} JWT

Return one worker's state.

POST /api/workers/{name}/start JWT

Start a worker.

Optionally overrides the worker's configuration.

POST /api/workers/{name}/stop JWT

Stop a worker.

Ticket sources

Method Path Auth What it does
GET /api/ticket-sources Flexible

List the channel vocabulary with colors.

POST /api/ticket-sources JWT

Add a source label.

PUT /api/ticket-sources/{id} JWT

Rename or recolor a source label.

DELETE /api/ticket-sources/{id} JWT

Remove a source label.

Appearance and branding

Method Path Auth What it does
GET /api/appearance None

Return the current color scheme and branding settings.

Public so login pages can theme themselves.

PUT /api/appearance JWT

Save colors and branding.

POST /api/appearance/reset JWT

Restore the default appearance.

POST /api/appearance/logo-upload JWT

Upload a client-portal logo.

GET /api/appearance/logo/{type} None

Serve a stored logo through the proxy.

Email customization

Method Path Auth What it does
GET /api/email-customization/settings JWT

Return the business information used across all templates.

PUT /api/email-customization/settings JWT

Update the business information.

GET /api/email-customization/templates JWT

List all email templates.

GET /api/email-customization/templates/{id} JWT

Return one template by ID.

GET /api/email-customization/templates/by-key/{key} JWT

Return one template by key.

For example ticket_reply.

POST /api/email-customization/templates JWT

Create a custom template.

PUT /api/email-customization/templates/{id} JWT

Update a template's subject and body.

DELETE /api/email-customization/templates/{id} JWT

Delete a custom template.

POST /api/email-customization/templates/{id}/preview JWT

Render a preview with live merge data.

POST /api/email-customization/templates/{id}/reset JWT

Restore the shipped default template.

Audit logs

Method Path Auth What it does
GET /api/audit-logs JWT

Return a filterable audit log listing.

GET /api/audit-logs/entity/{entity_type}/{entity_id} JWT

Return the complete change history for one record.

GET /api/audit-logs/user/{user_id} JWT

Return one user's activity.

GET /api/audit-logs/recent JWT

Return the recent activity feed.

GET /api/audit-logs/stats JWT

Return aggregated statistics, groupable by action.

POST /api/audit-logs/export JWT

Export audit logs to CSV.

POST /api/audit-logs/purge JWT

Apply a retention policy to the audit log.

API tokens

Method Path Auth What it does
POST /api/tokens JWT

Create an API token.

Body: name, optional expires_in_days (1–365). Returns the plaintext once. Restricted to Super Admin and Agent.

GET /api/tokens JWT

List your tokens.

Never returns the plaintext.

GET /api/tokens/{id} JWT

Return token metadata.

POST /api/tokens/{id}/revoke JWT

Revoke a token without deleting its record.

DELETE /api/tokens/{id} JWT

Delete a token.

GET /api/tokens/test API key

Verify that an API key works.

CSRF

Method Path Auth What it does
GET /api/csrf/token JWT

Return a user-scoped CSRF token.

GET /api/csrf/session-token None

Return a session-scoped CSRF token for pre-login forms.

GET /api/csrf/config None

Return the CSRF configuration.

Whether enforcement is enabled and the header name.