Platform Status API
The Status API lets you check the health of your Qualytics deployment, capture Dataplane diagnostics, and restart the Dataplane programmatically.
Tip
For complete API documentation, including request and response schemas, visit the API docs.
All endpoints are served from your Qualytics deployment, for example https://your-instance.qualytics.io. The paths below include the /api prefix. Authenticated endpoints take a bearer token.
Permissions
GET /api/status is public and needs no token. GET /api needs the Member role. GET /api/dataplane/diagnostics and PUT /api/admin/restart need the Admin role. See the Permissions page.
Get Platform Info
Retrieve the platform version, cloud provider, engine type, and deployment size.
Endpoint: GET /api
Permission: Member user role
Example request and response
Request:
Response:
Platform Info Response Schema
| Field | Type | Description |
|---|---|---|
application |
string |
The application name. |
description |
string |
The application description. |
version |
string |
The platform version, in date-based format. |
platform |
string |
The cloud provider: aws, gcp, azure, or local. |
engine |
string |
The compute engine: kubernetes, databricks, or local. |
size |
string |
The deployment size: small, medium, large, or xlarge. |
jwt_ttl_seconds |
integer |
The session token time-to-live in seconds, for the provider that authenticated this request. |
Info
For the UI equivalent, see the Deployment card.
Get Platform Status
Check the health of the database, RabbitMQ, and the Dataplane.
Endpoint: GET /api/status
Permission: Public, no token required
Note
This endpoint is public so the sign-in page can report a platform problem before anyone authenticates. It reports deployment health only, and exposes no datastore names, credentials, or data.
Example request and response
Request:
Response (healthy Dataplane):
{
"database_connection": "OK",
"rabbitmq_connection": "OK",
"dataplane_healthcheck": {
"build_date": "2026-03-28",
"implementation_version": "2.8.1",
"git_hash": "60de4a5",
"spark_version": "4.2.0",
"driver_free_memory_mb": 4096,
"max_executors": 8,
"max_memory_per_executor_mb": 8192,
"cores_per_executor": 4,
"max_dataframe_size_mb": 2048,
"thread_pool_parallelism": 16,
"thread_pool_state": "2 running operations [48291, 48305] with 3 queued requests",
"executor_capacity": {
"status": "healthy",
"live_executors": 6,
"pending_tasks": 0,
"capacity_slots": 24,
"max_executors": 8
},
"sync_operation_parallelism": 4,
"sync_admission": {
"current_capacity": 4,
"in_flight": 1,
"waiting": 0,
"floor": 2,
"ceiling": 8,
"process_cpu_percent": 31.4
}
}
}
Response (unhealthy Dataplane). When the engine does not answer, dataplane_healthcheck degrades to the string "UNHEALTHY":
Platform Status Response Schema
| Field | Type | Description |
|---|---|---|
database_connection |
string |
Database connectivity: OK or UNHEALTHY. |
rabbitmq_connection |
string |
Message broker connectivity: OK or UNHEALTHY. |
dataplane_healthcheck |
string or object |
Either the string UNHEALTHY, or the Dataplane object described below. |
Dataplane Fields
| Field | Type | Description |
|---|---|---|
build_date |
string |
The date the running Dataplane build was produced. |
implementation_version |
string |
The version of the Dataplane. |
git_hash |
string |
The build identifier of the Dataplane. |
spark_version |
string |
The Apache Spark version. |
driver_free_memory_mb |
integer |
Free memory on the engine driver, in MB. |
max_executors |
integer |
Maximum number of executor nodes. |
max_memory_per_executor_mb |
integer |
Maximum memory per executor, in MB. |
cores_per_executor |
integer |
CPU cores per executor. |
max_dataframe_size_mb |
integer |
Maximum dataframe size, in MB. |
thread_pool_parallelism |
integer |
Maximum concurrent operations the engine will run. |
thread_pool_state |
string |
Running operations with their IDs, and the number of queued requests. |
executor_capacity |
object or null |
Live executor demand against capacity. Absent when the engine does not report it. |
sync_operation_parallelism |
integer or null |
The concurrent Sync capacity currently granted. Absent when the engine does not report it. |
sync_admission |
object or null |
Detail behind the Sync capacity grant. Absent when the engine does not report it. |
Executor Capacity Object
| Field | Type | Description |
|---|---|---|
status |
string |
healthy, unmet_demand_below_ceiling, or unmet_demand_at_ceiling. The two unmet values drive the capacity warnings in the UI. |
live_executors |
integer |
Executors currently running. |
pending_tasks |
integer |
Tasks waiting for a slot. |
capacity_slots |
integer |
Task slots the live executors provide. |
max_executors |
integer |
The configured executor ceiling. |
Sync Admission Object
| Field | Type | Description |
|---|---|---|
current_capacity |
integer |
Concurrent Sync operations currently allowed, adjusted automatically between the floor and the ceiling. |
in_flight |
integer |
Sync operations running now. |
waiting |
integer |
Sync operations waiting for a slot. |
floor |
integer |
The lowest capacity the engine will drop to. |
ceiling |
integer |
The configured maximum. |
process_cpu_percent |
float or null |
Driver CPU load driving the adjustment. null until the engine's CPU sensor reports. |
Note
git_hash, driver_free_memory_mb, and thread_pool_parallelism are returned by the API but not displayed in the UI.
Info
For the UI equivalent, see Platform Status.
Get Dataplane Diagnostics
Ask the Dataplane to render a diagnostics report and return it as a self-contained HTML page.
Endpoint: GET /api/dataplane/diagnostics
Permission: Admin user role
Note
The call triggers a live render on the engine and can take up to about 30 seconds. Nothing is stored, so each call returns the engine's state at that moment. There is no history endpoint.
Example request
Request:
curl -X GET "https://your-instance.qualytics.io/api/dataplane/diagnostics" \
-H "Authorization: Bearer YOUR_TOKEN" \
-o dataplane-diagnostics.html
Response: 200 OK with Content-Type: text/html. The body is a standalone report that opens in any browser.
| Status Code | Meaning |
|---|---|
200 OK |
The report was rendered and returned. |
408 Request Timeout |
The Dataplane did not answer within the timeout. A busy or undersized engine is the usual cause. |
422 Unprocessable Entity |
The Dataplane answered, but reported that it could not complete the request. |
502 Bad Gateway |
The Dataplane answered, but returned no usable report, or one that was corrupt or oversized. |
503 Service Unavailable |
The request could not be delivered to the Dataplane. |
Deciding whether to retry
Only 200 returns a report. Do not decide whether to try again from the status code: a classified failure carries a fault_context object in the response body, and its retryable field is the authoritative signal.
Each failure is classified individually from what the engine reported, so the same status code can come back retryable on one call and not on the next. Engine failures such as capacity exhaustion, an unresponsive engine, or instability are classified as transient, which covers most diagnostics failures in practice, but read the flag rather than assuming it.
502 is the exception: the endpoint raises it directly, so it carries no fault_context. It means the engine answered but produced nothing usable, and a retry only helps once whatever blocked the render has cleared.
Info
For the UI equivalent and a full breakdown of the report's sections, see Dataplane Diagnostics.
Restart Dataplane
Send a graceful shutdown signal to the Dataplane. In a properly configured deployment, this triggers an immediate restart of the engine.
Endpoint: PUT /api/admin/restart
Permission: Admin user role
Note
This endpoint takes no request body. The restart is triggered by the request itself.
Example request
Request:
curl -X PUT "https://your-instance.qualytics.io/api/admin/restart" \
-H "Authorization: Bearer YOUR_TOKEN"
Response: 200 OK (empty body)
Warning
Restarting the Dataplane interrupts all in-flight operations. See Restart Dataplane for the full impact.
Info
The endpoint returns 200 OK once the shutdown signal is sent, without waiting for the restart to finish. There is no check for a restart already in progress, so repeated calls send repeated signals. Poll GET /api/status to see when the engine is back.
Error Responses
| Status Code | Description |
|---|---|
401 Unauthorized |
Missing or invalid API token. |
403 Forbidden |
The user does not have the required role. |
408 Request Timeout |
The Dataplane did not answer within the timeout. |
422 Unprocessable Entity |
The Dataplane answered, but reported that it could not complete the request. |
502 Bad Gateway |
The Dataplane returned no usable diagnostics report. |
503 Service Unavailable |
The request could not be delivered to the Dataplane. |
Errors classified by the platform carry a fault_context object alongside detail. Read its retryable field rather than inferring from the status code.
| Field | Type | Description |
|---|---|---|
code |
string |
The specific error, for example DATAPLANE_AT_CAPACITY. |
fault_domain |
string |
Which system is responsible: source_datastore, dataplane, controlplane, misconfiguration, or unknown. |
who |
string |
Who should act: customer, qualytics, config, or unknown. |
retryable |
boolean |
Whether retrying the same request is likely to succeed. |
title |
string |
Short user-facing summary of the failure. |
hint |
string |
Suggested next step, ready to show to a user. |
phase |
string or null |
Where a failed operation was in its lifecycle, such as source_load or analysis. null when it does not apply. |
Error response examples
403 Forbidden, unclassified, so detail only:
422 Unprocessable Entity, classified and retryable:
{
"detail": "Your Qualytics dataplane is currently at capacity and could not process this request in time. Please try again shortly; if this persists, contact your administrator about scaling.",
"fault_context": {
"code": "DATAPLANE_AT_CAPACITY",
"fault_domain": "dataplane",
"who": "qualytics",
"retryable": true,
"title": "Our dataplane is too busy to complete the request",
"hint": "Your Qualytics dataplane is at capacity. This may indicate temporary congestion or an undersized deployment. Retry shortly; if it persists, contact your administrator about scaling.",
"phase": null
}
}
Permission Summary
| Operation | Minimum Permission |
|---|---|
| Get platform status | Public, no token required |
| Get platform info | Member user role |
| Get Dataplane diagnostics | Admin user role |
| Restart Dataplane | Admin user role |
Note
The Status page in the UI requires the Manager role, which does not match the endpoints one-for-one. GET /api/status is public, and the diagnostics and restart endpoints are Admin-only. See the Permissions page for details.