For developers
The core request/response shapes for integrating against the Inzinx API. This covers the flow most integrations need — submit a rule, activate it, then evaluate or rate. New to this? Start with Getting started.
Authentication
Every request (other than admin-only ones you won't need as a subscriber) carries an x-api-key header — the per-tenant key you got when your workspace was created, sent only over TLS to a rate-limited, per-tenant isolated endpoint (see our security page for the details). Two things determine what a key can do, independently of each other:
- Key type —
adminkeys can submit drafts and activate them, in addition to evaluating and rating;consumerkeys can only evaluate, rate, and list — a write to a/tenant/...route with a consumer key returns403. - Key management — a separate flag,
can_manage_keys, controls whether a key can mint or revoke further keys for your tenant. Handing out a regular admin key to a teammate doesn't also give them the ability to create or revoke credentials.
Core endpoints
/tenant/rulesAuth: Tenant key (admin)
Submits (or replaces) a draft eligibility rule. Re-submitting the same id is how you edit a draft — it's an upsert, not an append.
{
"id": "adult-eligibility",
"conditions": [
{ "field": "age", "op": ">=", "value": 18 },
{ "field": "email", "op": "matches", "value": "^[a-zA-Z0-9._%+-]+@company\\.com$" },
{ "field": "ip_address", "op": "cidr_match", "value": "192.168.1.0/24" }
],
"output": { "eligible": true }
}conditions supports 10 native leaf operators:
- Equality & numeric:
==,!=,>=,>,<=,<, andin(list membership). - Rich String:
starts_with,ends_with,contains,not_contains. - Regex pattern:
matches(compiled Rust linear-time regex). - Null & empty safety:
is_null,is_not_null,is_empty,is_not_empty. - Network & CIDR:
cidr_match(IPv4 & IPv6 subnet check). - Nested Array Quantifiers:
array_any,array_all,array_none,array_count(with"$item"for primitive arrays). - Groups & references:
all,any,not, andref.
/tenant/rules/activateAuth: Tenant key (admin)
Validates and promotes drafts to active. An empty or omitted body activates every current draft (rules, rating rules, tables, and decision graphs together); pass an optional body to activate only specific ones:
{
"rule_ids": ["adult-eligibility"],
"rating_rule_ids": [],
"table_names": [],
"graph_ids": ["checkout-flow"]
}Activation validates the entire resulting active set as one atomic operation — it either fully succeeds, or nothing is changed. A named id with no matching draft is rejected and commits nothing.
/eligibility/{rule_id}/evaluateAuth: Tenant key (any)
Evaluates an active eligibility rule against arbitrary JSON input in microseconds (≤ 1ms). Optional query params: as_of (YYYY-MM-DD, defaults to today) and region.
curl -X POST https://api.inzinx.com/eligibility/adult-eligibility/evaluate \
-H "x-api-key: <your_key>" -H "Content-Type: application/json" \
-d '{"age": 25, "email": "user@company.com", "ip_address": "192.168.1.42"}'Response:
{
"passed": true,
"output": { "eligible": true },
"trace": [
{ "type": "leaf", "field": "age", "op": ">=", "value": 18, "actual": 25, "passed": true }
]
}trace explains exactly how the result was reached, step by step — including nested all/any/not groups, array_* element traces, and ref nodes (whose own referenced-rule trace appears as children, not flattened away).
/rating/{rule_id}/rateAuth: Tenant key (any)
Rates a single item against an active rating rule — runs a base rate through an ordered list of factors (table lookups with DMN hit policies, tiers, deductible curves, conditions, flat adjustments) and returns the computed amount plus a step-by-step trace of how it got there. Same as_of/region query params as evaluate.
curl -X POST https://api.inzinx.com/rating/simple-rating/rate \
-H "x-api-key: <your_key>" -H "Content-Type: application/json" \
-d '{"tier": "silver", "risk_score": 72}'Response:
{
"amount": 525.00,
"trace": [
{ "step": "base_rate", "amount": 500 },
{ "step": "service_fee", "op": "add", "delta": 25, "amount": 525 }
]
}/tenant/graphs/{graph_id}/runAuth: Tenant key (any)
Executes an active Decision Graph (DAG). Topologically evaluates connected nodes (Input → Eligibility → Table → Rating → Transform → Output), mutates context across edges, and branches via on_pass / on_fail conditions.
curl -X POST https://api.inzinx.com/tenant/graphs/order-approval/run \
-H "x-api-key: <your_key>" -H "Content-Type: application/json" \
-d '{"cart_total": 450, "loyalty_years": 3, "country": "US"}'Response:
{
"graph_id": "order-approval",
"as_of": "2026-09-20",
"output": { "approved": true, "final_discount_rate": 0.15 },
"trace": [
{ "node_type": "input", "node_id": "in_1" },
{ "node_type": "eligibility", "node_id": "chk_1", "rule_id": "order-valid", "passed": true, "trace": [...] },
{ "node_type": "rating", "node_id": "rate_1", "rule_id": "calc-discount", "amount": "0.15", "trace": [...] },
{ "node_type": "output", "node_id": "out_1", "fields": { "approved": true, "final_discount_rate": 0.15 } }
]
}Skipped nodes on untaken conditional branches are explicitly tracked with { "node_type": "skipped", "node_id": "..." }.
/tenant/graphs/{graph_id}/testAuth: Tenant key (any)
Same execution semantics as /run, but against a draft graph — for trying out a decision pipeline against real input before it's ever live. Never touches production traffic.
curl -X POST https://api.inzinx.com/tenant/graphs/order-approval/test \
-H "x-api-key: <your_key>" -H "Content-Type: application/json" \
-d '{"cart_total": 450, "loyalty_years": 3, "country": "US"}'/tenant/graphsAuth: Tenant key (any)
Lists this tenant's decision graphs by status.
curl -X GET "https://api.inzinx.com/tenant/graphs?status=active" \
-H "x-api-key: <your_key>"/tenant/graphs/{graph_id}/versionsAuth: Tenant key (any)
Every version ever written for a graph id — draft, active, and archived — newest first. Nothing is ever deleted; archiving just marks a version archived rather than removing the row.
/tenant/graphs/{graph_id}/deactivateAuth: Tenant key (admin)
Archives an active graph directly. One-way — reactivating means submitting a fresh draft and activating it again.
/tenant/analytics/overviewAuth: Tenant key (any)
Retrieves operational decision telemetry and hit-rate distributions over a trailing window (default 7 days). Useful for streaming Inzinx metrics into your internal Datadog, Grafana, or cloud dashboards.
curl -X GET "https://api.inzinx.com/tenant/analytics/overview?days=7" \
-H "x-api-key: <your_key>"Response:
{
"days": 7,
"total_evaluations": 142500,
"passed_count": 131100,
"failed_count": 11400,
"pass_rate_pct": 92.0,
"latency": {
"min_us": 18,
"p50_us": 42,
"p95_us": 110,
"p99_us": 195,
"max_us": 680
},
"top_rules": [
{ "rule_id": "checkout-fraud-check", "record_type": "eligibility", "count": 85000, "avg_latency_us": 38 }
],
"dead_rules": []
}/tenant/analytics/funnel/{rule_id}Auth: Tenant key (any)
Breaks down an eligibility rule's pass rate by its individual top-level conditions, so you can see which specific condition is disqualifying the most calls — not just the rule's overall pass/fail rate.
curl -X GET "https://api.inzinx.com/tenant/analytics/funnel/checkout-fraud-check?days=7" \
-H "x-api-key: <your_key>"Response:
{
"rule_id": "checkout-fraud-check",
"total_evaluations": 85000,
"steps": [
{ "index": 0, "label": "age >= 18", "total": 85000, "passed_count": 84200 },
{ "index": 1, "label": "country in [US, CA, UK]", "total": 84200, "passed_count": 79600 }
]
}Beyond this page
Inzinx provides a clean, synchronous REST API engineered for sub-millisecond (≤ 1ms) execution in Rust. The same API includes endpoints for DMN decision tables with hit policies (First, Unique, CollectSum, CollectCount, CollectMin/Max), key management (/tenant/keys...), multi-item bundles, rating-rule composition (rating_ref), persistent accumulators, and excess-of-loss reinsurance layers — all accessible directly over HTTPS with your tenant x-api-key. See your dashboard's "Rules & rating guide" or contact support for specialized schemas.