Loading documentation

Access required

Your account doesn't have access to the documentation. Contact your administrator.

Sign out
Skip to main content

Available Operations

Status: stable Category: catalog Added: 2026-04-20 Last reviewed: 2026-10-14

Summary​

Returns every (category, resource, operation, http_method, path, version) tuple the API advertises, in a flat array. This is the smallest catalog endpoint: no descriptions, no aliases, no nesting — just enough to build or check a routing table.

Unlike the other catalog endpoints, this one does not accept ?audience=. Operation paths and versions are language-invariant; there are no audience-specific labels at the operation level that would need translating.

Endpoint​

FieldValue
MethodGET
Path/api/catalog/operations
Full URLhttps://engine.tripod-health.com/api/catalog/operations
AuthenticationAPI key (required)
Request bodynone
Response bodyapplication/json
IdempotentYes
Rate-limitedYes

Purpose​

  • Minimal client codegen. When a codegen tool only needs the routing table (method + path + version), this response contains exactly that and nothing more.
  • Contract verification in CI. A pipeline can snapshot this list and diff it between deploys to detect when paths are added, moved, or removed.
  • Smoke tests. Iterate the list, call each GET path, and assert non-5xx — a cheap liveness sweep across the whole API.

Authentication​

Send a valid API key in the apikey header. See authentication.md.

Request​

Headers​

HeaderRequiredDescription
apikeyYesConsumer API key.

Path parameters​

None.

Query parameters​

None.

This endpoint intentionally does not accept ?audience=. Every other /api/catalog/* endpoint does, because they return entities that carry a translatable display_name. Operations have no such field in this response — they are just paths. A client sending ?audience= here will find it silently ignored; the response is identical regardless.

Body​

None.

Response​

Success — 200 OK​

Top-level array. Abbreviated for readability: three of the 73 entries (an instrument operation, a lookup operation, and a top-level resource's operation), each complete:

[
{
"category": "pain",
"resource": "orebro",
"operation": "score",
"http_method": "POST",
"path": "/api/pain/orebro/score",
"version": "1.1.0"
},
{
"category": "lookup",
"resource": "naics",
"operation": "search",
"http_method": "GET",
"path": "/api/lookup/naics/search",
"version": "1.0.0"
},
{
"category": null,
"resource": "version",
"operation": "get",
"http_method": "GET",
"path": "/api/version/get",
"version": "0.1.0"
}
]

Response fields​

The top-level value is a JSON array. Each element:

FieldTypeAlways presentDescription
categorystring | nullYesCategory the operation belongs to. null for top-level resources (for example cdri, recordability, health, version, catalog). Lookup operations carry "lookup".
resourcestringYesResource name.
operationstringYesOperation name.
http_method"GET" | "POST"YesHTTP method for this operation.
pathstringYesFully-qualified URL path, including the /api/ prefix. Concatenate with https://engine.tripod-health.com to form the complete URL.
versionstring (SemVer)YesOperation-level version. Independent of resource, category, and catalog versions.

Status codes​

CodeMeaningWhen
200OKArray returned.
401UnauthenticatedMissing or invalid API key.
429RateLimitedPer-consumer rate limit exceeded.

Unlike the other catalog endpoints, this one cannot return 400 ValidationError — it reads no query parameters.

Examples​

The language-specific invocations below assume the call() helper (or its equivalent) from quickstart.md.

1. Canonical request and response​

Send:

GET /api/catalog/operations HTTP/1.1
Host: engine.tripod-health.com
apikey: $ENGINE_API_KEY

Receive (200 OK): a flat JSON array of (category, resource, operation, http_method, path, version) tuples. The live response today carries 73 operations. First three entries, verbatim:

[
{
"category": "pain",
"resource": "orebro",
"operation": "score",
"http_method": "POST",
"path": "/api/pain/orebro/score",
"version": "1.1.0"
},
{
"category": "pain",
"resource": "pain_scale",
"operation": "score",
"http_method": "POST",
"path": "/api/pain/pain_scale/score",
"version": "1.1.0"
},
{
"category": "function",
"resource": "oswestry",
"operation": "score",
"http_method": "POST",
"path": "/api/function/oswestry/score",
"version": "1.1.0"
}
]

2. Calling the endpoint in your language​

curl​

# Flat operation list
curl -sS "https://engine.tripod-health.com/api/catalog/operations" \
-H "apikey: $ENGINE_API_KEY"

# Filter to POST operations via jq
curl -sS "https://engine.tripod-health.com/api/catalog/operations" \
-H "apikey: $ENGINE_API_KEY" \
| jq '[ .[] | select(.http_method == "POST") ]'

Python (requests) — build a routing table​

# Uses the call() helper from quickstart.md.
operations = call("GET", "/api/catalog/operations")
routes = {(op["http_method"], op["path"]): op for op in operations}
for (method, path), op in sorted(routes.items()):
print(f"{method:4} {path} v{op['version']}")

Python (requests) — CI contract snapshot​

# Uses the call() helper from quickstart.md.
def contract_snapshot() -> list[tuple[str, str, str]]:
return sorted(
(op["http_method"], op["path"], op["version"])
for op in call("GET", "/api/catalog/operations")
)

# Store in CI. Diff against the last green build.
snapshot = contract_snapshot()

Node.js (native fetch) — routing map​

// Uses the call() helper from quickstart.md.
const operations = await call("GET", "/api/catalog/operations");
const byResource = {};
for (const op of operations) {
const key = op.category ? `${op.category}/${op.resource}` : op.resource;
(byResource[key] ??= []).push(op);
}
console.log(byResource);

TypeScript​

// Uses the typed call<T>() helper from quickstart.md.
interface OperationEntry {
category: string | null;
resource: string;
operation: string;
http_method: "GET" | "POST";
path: string;
version: string;
}

const operations = await call<OperationEntry[]>("GET", "/api/catalog/operations");

Go​

// Uses the scaffold from quickstart.md; response is an array.
req, _ := http.NewRequest("GET", baseURL+"/api/catalog/operations", nil)
req.Header.Set("apikey", os.Getenv("ENGINE_API_KEY"))
resp, _ := (&http.Client{Timeout: 30 * time.Second}).Do(req)
defer resp.Body.Close()
var ops []map[string]any
json.NewDecoder(resp.Body).Decode(&ops)
for _, op := range ops {
fmt.Printf("%-4v %v v%v\n", op["http_method"], op["path"], op["version"])
}

Java​

// Uses the call() helper from quickstart.md.
String operations = call("GET", "/api/catalog/operations", null, 3);
System.out.println(operations);

C# (.NET HttpClient)​

// Uses the Call() helper from quickstart.md.
var operations = await Call(HttpMethod.Get, "/api/catalog/operations");
foreach (var op in operations.EnumerateArray())
{
var verb = op.GetProperty("http_method").GetString();
var path = op.GetProperty("path").GetString();
var version = op.GetProperty("version").GetString();
Console.WriteLine($"{verb,-4} {path} v{version}");
}

PowerShell​

# Uses the Invoke-Engine helper from quickstart.md.
$operations = Invoke-Engine -Method Get -Path "/api/catalog/operations"
foreach ($op in $operations) {
"{0,-4} {1} v{2}" -f $op.http_method, $op.path, $op.version
}

3. Error scenarios​

This endpoint has no input to validate, so it has no endpoint-specific 400s. Failure modes are limited to 401 (auth), 429 (rate limit), and 5xx (unexpected). See authentication.md and rate-limits.md.

Intended use​

  • Minimal codegen. All a client needs to issue a correctly-shaped HTTP call is method + path. Skip the heavier /api/catalog/resources response when you only need the routing table.
  • Diff-based contract checks in CI. Sort the array, serialize, compare against the last known-good snapshot. New paths appear as additions; removed paths appear as deletions; version bumps appear as modifications.
  • Health sweeps. Iterate GET operations, call each one, assert non-5xx. A small extension (supply stub bodies) covers POST operations too.

Mistaken use​

  • Do not send ?audience= here and expect a different response. This endpoint does not return a translatable display_name. Other catalog endpoints do.
  • Do not assume array order has semantic meaning. Operations appear in catalog declaration order: category-scoped operations first (ordered by category, then resource, then operation), then top-level operations. Stable for a given deploy but not sorted; sort client-side if you need a specific order.
  • Do not treat this as a human browsing surface. There are no descriptions, display names, or aliases here. Use /api/catalog/get or /api/catalog/resources when you need readable metadata.
  • Do not hardcode paths into your client instead of using this. If the catalog's paths change between deploys, a client that reads them from here survives; one that baked them in at build time breaks.

Debugging​

  1. Capture the request ID. On an error, quote the envelope's request_id. A successful response carries none in its body, so capture the X-Request-ID response header (the gateway's trace ID for the call, which support can also look up).
  2. Unexpected extra operations in the response. The catalog has moved. Check /api/version/get to confirm you are hitting the deploy you expect.
  3. A path that used to work is no longer in the list. That operation has been removed or renamed. There is no deprecation warning in the tuple itself; the absence is the signal.
  4. No error, but the response is the same as before a known deploy. Your client or a proxy may be serving a cached copy. This endpoint is tiny and the response changes rarely — caching is usually fine, just re-fetch when /api/version/get reports a new catalog_version.

Rate limits​

See rate-limits.md.

Change history​

DateChange
2026-04-20Initial publication.
2026-10-14Examples recaptured against catalog 0.42.0; counts and resource lists updated. naics now sits in the lookup category with regulations, icd10cm, cpt, and fee_schedule.
2026-10-14The X-Request-ID response header is the gateway's trace ID for the request and does not match request_id; quote request_id to support.