Start here
Machine-readable entry points
Everything below is served from the Qualitum production domain, unauthenticated, with permissive CORS.
| Resource | URL | What it is |
|---|---|---|
| OpenAPI 3.1 spec | /openapi.json | Full public API surface. Also at /api/openapi.json, /openapi.yaml and /.well-known/openapi.json. |
| Site summary | /llms.txt | Capabilities, standards, commercial model and a when-to-use section. |
| Agent instructions | /agent-instructions.md | When to reach for Qualitum, when not to, and how to call it. |
| Sitemap | /sitemap.xml | Every indexable URL. |
| Markdown variants | Accept: text/markdown | Any page URL returns markdown when negotiated. Vary: Accept, Accept-Encoding. |
Reference
Public endpoints
Base URL: https://qualitum.ai/api/v1. No authentication. Requests are rate limited per IP. Every response, success or failure, is JSON.
getPublicApiHealth
Liveness and version of the public API. Returns status, service, version, time.
curl -s https://qualitum.ai/api/v1/health
classifyGampCategory
Proposes a GAMP 5 software category (3, 4 or 5) for a plain-language description of a computerised system, with a confidence level and reasoning. Deterministic heuristic, indicative only, nothing stored. This is the same first-pass step the platform runs before a reviewer confirms a classification.
curl -sX POST https://qualitum.ai/api/v1/gamp-category-check \
-H 'Content-Type: application/json' \
-d '{"description":"A LIMS configured with our sample workflows, user roles and business rules. No custom code."}'
{
"category": 4,
"categoryLabel": "Configured product",
"confidence": "high",
"ambiguous": false,
"reasoning": "Signals of configuration - workflows, business rules, roles, parameters - place this in Category 4. ...",
"matchedSignals": { "category3": 1, "category4": 4, "category5": 1 },
"standard": "GAMP 5 (2nd Edition)",
"disclaimer": "Indicative only - the production agent classifies against your full URS and SOP library, ..."
}
Request schema
| Field | Type | Rules |
|---|---|---|
description | string | Required. 12–8000 characters. What the system is and whether it is used as supplied, configured, or custom-developed. |
Contract
JSON errors
Errors never return HTML. Every non-2xx response uses one envelope, with a stable machine-readable code, a human-readable message, an optional offending field, and a resolution telling the caller what to do next.
{
"error": {
"code": "invalid_request",
"message": "Field 'description' is required and must be a string of at least 12 characters.",
"field": "description",
"resolution": "Describe the system: vendor product or in-house build, used as supplied, configured, or custom-developed.",
"documentation": "https://qualitum.ai/docs/api"
}
}
| Status | code | Cause |
|---|---|---|
| 400 | invalid_request | Body is not JSON, not an object, or fails field validation. |
| 404 | not_found | No such endpoint under /api/. Response lists the available operations. |
| 405 | method_not_allowed | Wrong HTTP method for the endpoint. |
| 413 | payload_too_large | description longer than 8000 characters. |
| 415 | unsupported_media_type | Content-Type is not application/json. |
| 502 | internal_error | Upstream failure. Safe to retry with backoff. |
LLM tool use
Function calling
Each operation carries a unique operationId, a description written for a caller with no prior context, and typed request and response schemas with additionalProperties: false. That maps directly onto OpenAI, Anthropic and MCP tool definitions without hand editing.
{
"name": "classifyGampCategory",
"description": "Propose a GAMP 5 software category (3, 4 or 5) for a computerised system used in a GxP process, with confidence and reasoning.",
"input_schema": {
"type": "object",
"properties": {
"description": { "type": "string", "minLength": 12, "maxLength": 8000 }
},
"required": ["description"]
}
}
Markdown content negotiation
Qualitum follows the acceptmarkdown.com convention. Send Accept: text/markdown to any page URL and the response body is markdown with Content-Type: text/markdown; charset=utf-8 and Vary: Accept, Accept-Encoding, so a CDN can never hand an agent the HTML variant by accident.
curl -sH 'Accept: text/markdown' https://qualitum.ai/platform/overview
404 behaviour
Nonexistent paths return a real HTTP 404 - never a 200 with an app shell - and the body carries a short markdown recovery block pointing at the sitemap, llms.txt and this page.
curl -s -o /dev/null -w "%{http_code}\n" https://qualitum.ai/no-such-path # 404
Tenant APIs
Inside a deployment
The validation lifecycle APIs - requirements, protocols, executions, electronic signatures, deviations and the audit trail - run inside each customer's private single-tenant deployment, behind the customer's own perimeter and identity provider. They are not on the public internet by design: no customer GxP data leaves the tenant.
- Tenant OpenAPI specification and auth model: request from support@qualitum.ai.
- Integration surface and boundaries: integrations and technology.
- Platform validation evidence: documentation index.
- Security disclosure: security@qualitum.ai.