Regulatory framework discovery and compliance document generation, over HTTPS with JSON.
The API exposes two capabilities of the Veritas 360 compliance engine:
Send a plain-language query — "hospitals in Dubai", "financial services firms in Singapore" — and receive ranked candidate regulatory frameworks with regulator, jurisdiction, sector, source URL, confidence and reasoning.
Request a policy or framework-reference document asynchronously: submit a job, poll its status, then download the finished document as json, md, pdf or docx.
Base URL: https://api.veritas360.com.au/api/public/v1
A machine-readable OpenAPI 3 document is available for client generation and testing tools.
Every request (except the service card and the OpenAPI document) requires an API key issued by Kurateq. Keys look like v360_sk_… and are shown to you exactly once when issued — store them securely; only a hash is kept on our side.
Send the key in either header:
Authorization: Bearer v360_sk_...
# or
X-API-Key: v360_sk_...
A missing or invalid key returns 401 with a JSON error envelope. Repeated bad-key attempts from one address are temporarily blocked.
Contact your Kurateq account contact immediately. Keys can be rotated (new key issued, old one stops instantly) or disabled outright.
Every client starts in sandbox mode: all endpoints work end-to-end, but discovery and generation return clearly watermarked sample output and incur no processing cost. This lets you build and test your full integration safely.
When you're ready, Kurateq flips your key to live mode — same endpoints, same shapes, real results. Check your current mode any time with GET /ping.
| Endpoint | Description |
|---|---|
GET/ | Service card and endpoint list (no auth) |
GET/openapi.json | OpenAPI 3 document (no auth) |
GET/ping | Auth check — returns your client name and current mode |
GET/capabilities | Available document types, output formats, and your key's limits |
POST/frameworks/suggest | Framework discovery. Body: {"query": "..."} |
POST/documents/generate | Start a generation job. Returns 202 with a jobId |
GET/jobs/{jobId} | Job status: queued → running → completed / failed |
GET/documents/{jobId}?format=… | Download the finished document (json, md, pdf, docx) |
GET/usage | Your request and generation counters against your limits |
| Field | Required | Notes |
|---|---|---|
framework | Yes | Framework or standard name (aliases: standard, name) |
documentType | No | Defaults to framework_reference; see /capabilities for the full list |
jurisdiction | No | e.g. "United Arab Emirates" |
organisation | No | Object: {name, sector, country} — personalises the document |
BASE=https://api.veritas360.com.au/api/public/v1
KEY=v360_sk_... # issued by Kurateq
# 1. Am I alive, and what mode am I in?
curl -s -H "Authorization: Bearer $KEY" $BASE/ping
# 2. What can I do?
curl -s -H "Authorization: Bearer $KEY" $BASE/capabilities
# 3. Discover frameworks for a market
curl -s -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"query": "hospitals in Dubai"}' $BASE/frameworks/suggest
# 4. Generate a document (async)
curl -s -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"documentType":"privacy","framework":"Dubai ISR",
"jurisdiction":"United Arab Emirates",
"organisation":{"name":"Acme Clinics DMCC","sector":"healthcare"}}' \
$BASE/documents/generate
# → {"jobId":"...","status":"queued","poll":"/api/public/v1/jobs/...", ...}
# 5. Poll until completed
curl -s -H "Authorization: Bearer $KEY" $BASE/jobs/<jobId>
# 6. Download in any format
curl -s -H "Authorization: Bearer $KEY" "$BASE/documents/<jobId>?format=pdf" -o policy.pdf
curl -s -H "Authorization: Bearer $KEY" "$BASE/documents/<jobId>?format=docx" -o policy.docx
# 7. Check my meter
curl -s -H "Authorization: Bearer $KEY" $BASE/usage
| Control | Behaviour |
|---|---|
| Request rate | Per-key requests-per-minute limit. Current allowance is returned in X-RateLimit-Limit / X-RateLimit-Remaining headers; exceeding it returns 429 with a retry hint. |
| Generation quotas | Per-day and per-30-day caps on document generation, per key. Sandbox keys get generous multiples since sandbox costs nothing. |
| Concurrency | One generation job in flight per key. A second POST /documents/generate while one is running returns 409 job_already_running — poll the first job to completion. |
Your exact numbers are always visible via GET /capabilities (limits) and GET /usage (consumption). Limit increases are arranged through your Kurateq account contact.
Every error — including malformed JSON bodies and unknown paths — returns a JSON envelope, never HTML:
{
"error": {
"code": "rate_limited",
"message": "Too many requests.",
"hint": "Retry after 12s",
"requestId": "req_..."
}
}
Include the requestId in any support query — it lets us trace the exact request.
| Status | Meaning |
|---|---|
400 | Malformed JSON or invalid parameters (e.g. unsupported_format) |
401 | Missing or invalid API key |
404 | Unknown path or job (job_not_found) |
409 | A generation job is already running for this key |
429 | Rate limit exceeded — honour the retry hint |
5xx | Our side — retry with backoff; contact support with the requestId if it persists |