Programmatic status
curl --request GET \
--url https://api.truthlocks.com/health/status \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.truthlocks.com/health/status"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.truthlocks.com/health/status', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.truthlocks.com/health/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.truthlocks.com/health/status"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.truthlocks.com/health/status")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.truthlocks.com/health/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "operational",
"timestamp": "<string>",
"services": [
{
"id": "<string>",
"name": "<string>",
"status": "<string>",
"responseTime": 123
}
]
}System
Programmatic status
Query real-time service health for all Truthlocks services. No authentication required.
GET
/
health
/
status
Programmatic status
curl --request GET \
--url https://api.truthlocks.com/health/status \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.truthlocks.com/health/status"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.truthlocks.com/health/status', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.truthlocks.com/health/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.truthlocks.com/health/status"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.truthlocks.com/health/status")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.truthlocks.com/health/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "operational",
"timestamp": "<string>",
"services": [
{
"id": "<string>",
"name": "<string>",
"status": "<string>",
"responseTime": 123
}
]
}Returns the current health status of every Truthlocks service. Use this endpoint to integrate service availability into your own dashboards, alerting pipelines, or circuit breakers.
This endpoint is served from
status.truthlocks.com, not the main API. No authentication is required.
GET https://status.truthlocks.com/api/health
Response
Response fields
| Field | Type | Description |
|---|---|---|
status | string | Overall system health: operational, degraded, or outage. |
timestamp | string | ISO 8601 timestamp of the check. |
services | array | Per-service health results. |
services[].id | string | Machine-readable service identifier (e.g., api-gateway, signing-service). |
services[].name | string | Human-readable service name. |
services[].status | string | Service health: operational, degraded, or outage. |
services[].responseTime | number or null | Response time in milliseconds, or null if unreachable. |
services[].error | string | Present only when the service is not operational. Describes the failure reason. |
Status logic
operational— all services are healthy and responding normally.degraded— at least one service is slow or returning errors, but none are fully down.outage— at least one service is completely unreachable.
Monitored services
| Service ID | Name | Description |
|---|---|---|
api-gateway | API Gateway | Main API endpoint for all public requests |
trust-registry | Trust Registry | Issuer management and governance |
billing-service | Billing | Subscription and payment processing |
signing-service | Signing | Cryptographic signing operations |
attestation-service | Attestations | Attestation minting and management |
audit-service | Audit Logs | Activity logging and compliance |
transparency-log | Transparency Log | Cryptographic append-only log |
verification-service | Verification | Proof bundle verification |
Example: poll status from your application
async function checkTruthlockStatus() {
const res = await fetch("https://status.truthlocks.com/api/health");
const data = await res.json();
if (data.status !== "operational") {
console.warn(`Truthlocks is ${data.status}`);
const issues = data.services.filter((s) => s.status !== "operational");
issues.forEach((s) =>
console.warn(` ${s.name}: ${s.status} — ${s.error}`)
);
}
return data;
}
Example: pre-flight check before minting
async function mintWithStatusCheck(attestation) {
const status = await fetch("https://status.truthlocks.com/api/health");
const health = await status.json();
const signingService = health.services.find(
(s) => s.id === "signing-service"
);
const attestationService = health.services.find(
(s) => s.id === "attestation-service"
);
if (
signingService?.status !== "operational" ||
attestationService?.status !== "operational"
) {
throw new Error("Required services are not operational — retry later");
}
return client.attestations.mint(attestation);
}
This endpoint is rate-limited to prevent abuse. For continuous monitoring, poll
no more frequently than once every 30 seconds.

