/v1/mcp and /v1/tool-call
Called by agent runtimes on every tool invocation. Requests traverse capability, intent, policy, and budget checks before they are forwarded or rejected with a typed JSON-RPC error.
Every endpoint exposed by the IntentGate gateway. Generated from the OpenAPI 3.1 specification and organized for runtime, administration, policy, audit, approvals, tenancy, integrations, and Pro console APIs.
The gateway separates the hot-path authorization surface from operator administration while preserving one stable v1 contract.
/v1/mcp and /v1/tool-callCalled by agent runtimes on every tool invocation. Requests traverse capability, intent, policy, and budget checks before they are forwarded or rejected with a typed JSON-RPC error.
/v1/admin/*Used by operators and the console to mint capabilities, manage policy, verify audit evidence, review approvals, switch tenants, and inspect integrations.
Runtime: capability tokens signed by the gateway master key and issued through POST /v1/admin/mint.
Administration: superadmin or tenant-scoped administrator tokens. Comparisons are constant-time.
https://gateway.example.com
Customer deployment.
http://localhost:8080
Default local Docker endpoint.
Agent-facing tool-call endpoints. Traverses the four-check pipeline.
/v1/mcp Model Context Protocol passthrough
{
"jsonrpc": "2.0",
"id": "string",
"method": "tools/call",
"params": {}
}{
"jsonrpc": "2.0",
"id": "string",
"result": null,
"error": {
"code": -32010,
"message": "string",
"data": {}
}
}/v1/tool-call Direct JSON-RPC tool invocation
{
"jsonrpc": "2.0",
"id": "string",
"method": "tools/call",
"params": {}
}{
"jsonrpc": "2.0",
"id": "string",
"result": null,
"error": {
"code": -32010,
"message": "string",
"data": {}
}
}Mint, revoke, and inspect capability tokens.
/v1/admin/mint Issue a fresh capability token
{
"subject": "agent-finance-bot-7",
"issuer": "intentgate",
"tenant": "acme-corp",
"ttl_seconds": 3600,
"tools": [
"read_invoice",
"list_vendors"
],
"max_calls": 100,
"step_up": false,
"with_memory_signing_key": false
}{
"token": "string",
"jti": "01HXYZ...",
"expires_at": "2026-06-14T13:42:00Z"
}{
"error": "string"
}{
"error": "string"
}{
"error": "string"
}/v1/admin/revoke Revoke a capability token by JTI
{
"jti": "01HXYZ...",
"reason": "rotation"
}{
"error": "string"
}{
"error": "string"
}/v1/admin/revocations List revoked JTIs
| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant | query | string | no | Superadmin-only: scope the operation to a tenant. Per-tenant admin tokens force scope and ignore this. |
limit | query | integer | no | Maximum items to return (1-1000). |
cursor | query | string | no | Opaque cursor returned in the prior response's `next_cursor`. |
{
"items": [
{
"jti": "string",
"tenant": "string",
"revoked_at": "2026-06-14T13:42:00Z",
"reason": "string"
}
],
"next_cursor": "string"
}{
"error": "string"
}Two-stage lifecycle: drafts, active, dry-run, rollback.
/v1/admin/policies/drafts List draft policies
| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant | query | string | no | Superadmin-only: scope the operation to a tenant. Per-tenant admin tokens force scope and ignore this. |
[
{
"id": "string",
"name": "string",
"description": "string",
"tenant": "string",
"created_by": "string",
"created_at": "2026-06-14T13:42:00Z",
"rego_sha256": "string"
}
]{
"error": "string"
}/v1/admin/policies/drafts Create a draft
{
"name": "baseline-2026-06",
"description": "Add value-threshold rule for transfer_funds",
"rego_source": "package intentgate.policy\n...",
"tenant": "acme-corp",
"created_by": "joe@acme-corp.example"
}{
"id": "string",
"name": "string",
"description": "string",
"tenant": "string",
"created_by": "string",
"created_at": "2026-06-14T13:42:00Z",
"rego_sha256": "string",
"rego_source": "string"
}{
"error": "string"
}{
"error": "string"
}/v1/admin/policies/drafts/{id} Fetch a draft (including Rego source)
{
"id": "string",
"name": "string",
"description": "string",
"tenant": "string",
"created_by": "string",
"created_at": "2026-06-14T13:42:00Z",
"rego_sha256": "string",
"rego_source": "string"
}{
"error": "string"
}{
"error": "string"
}/v1/admin/policies/drafts/{id} Update a draft
{
"name": "string",
"description": "string",
"rego_source": "string"
}{
"id": "string",
"name": "string",
"description": "string",
"tenant": "string",
"created_by": "string",
"created_at": "2026-06-14T13:42:00Z",
"rego_sha256": "string",
"rego_source": "string"
}{
"error": "string"
}{
"error": "string"
}{
"error": "string"
}/v1/admin/policies/drafts/{id} Delete a draft
{
"error": "string"
}{
"error": "string"
}/v1/admin/policies/active Read the active-policy pointer
| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant | query | string | no | Superadmin-only: scope the operation to a tenant. Per-tenant admin tokens force scope and ignore this. |
{
"draft_id": "string",
"name": "string",
"promoted_by": "string",
"promoted_at": "2026-06-14T13:42:00Z",
"rego_sha256": "string",
"tenant": "string"
}{
"error": "string"
}/v1/admin/policies/active Promote a draft to active
{
"draft_id": "01HXYZ...",
"tenant": "string",
"promoted_by": "joe@acme-corp.example"
}{
"draft_id": "string",
"name": "string",
"promoted_by": "string",
"promoted_at": "2026-06-14T13:42:00Z",
"rego_sha256": "string",
"tenant": "string"
}{
"error": "string"
}{
"error": "string"
}{
"error": "string"
}/v1/admin/policies/active Clear the active pointer
| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant | query | string | no | Superadmin-only: scope the operation to a tenant. Per-tenant admin tokens force scope and ignore this. |
{
"error": "string"
}/v1/admin/policies/rollback Roll back to the previous active policy
| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant | query | string | no | Superadmin-only: scope the operation to a tenant. Per-tenant admin tokens force scope and ignore this. |
{
"draft_id": "string",
"name": "string",
"promoted_by": "string",
"promoted_at": "2026-06-14T13:42:00Z",
"rego_sha256": "string",
"tenant": "string"
}{
"error": "string"
}/v1/admin/policies/dry-run Evaluate a candidate Rego against synthetic or historical input
{
"rego_source": "string",
"tenant": "string",
"input": {},
"sample": "string"
}{
"decisions": [
{
"input": {},
"candidate_decision": "allow",
"actual_decision": "allow",
"rule": "string"
}
]
}{
"error": "string"
}{
"error": "string"
}Tamper-evident audit chain: query, verify, export.
/v1/admin/audit Query the per-tenant audit chain
| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant | query | string | no | Superadmin-only: scope the operation to a tenant. Per-tenant admin tokens force scope and ignore this. |
since | query | string | no | |
until | query | string | no | |
decision | query | string | no | |
tool | query | string | no | |
subject | query | string | no | |
limit | query | integer | no | Maximum items to return (1-1000). |
cursor | query | string | no | Opaque cursor returned in the prior response's `next_cursor`. |
{
"items": [
{
"ts": "2026-06-14T13:42:00Z",
"event": "intentgate.tool_call",
"schema_version": "v4",
"decision": "allow",
"check": "",
"reason": "string",
"tenant": "string",
"agent_id": "string",
"session_id": "string",
"tool": "string",
"arg_keys": [
"string"
],
"arg_values": {},
"capability_token_id": "string",
"root_capability_token_id": "string",
"caveat_count": 0,
"pending_id": "string",
"decided_by": "string",
"intent_summary": "string",
"latency_ms": 0,
"remote_ip": "string",
"upstream_status": 0,
"requires_step_up": false,
"elevation_id": "string"
}
],
"next_cursor": "string"
}{
"error": "string"
}/v1/admin/audit/verify Verify the tamper-evident chain
| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant | query | string | no | Superadmin-only: scope the operation to a tenant. Per-tenant admin tokens force scope and ignore this. |
{
"tenant": "string",
"verified": false,
"events_checked": 184523,
"chain_head_id": "string",
"chain_head_at": "2026-06-14T13:42:00Z",
"duration_ms": 412,
"first_broken_event_id": "string"
}{
"error": "string"
}/v1/admin/audit/export Stream audit events for offline review
| Name | In | Type | Required | Description |
|---|---|---|---|---|
format | query | string | yes | |
tenant | query | string | no | Superadmin-only: scope the operation to a tenant. Per-tenant admin tokens force scope and ignore this. |
since | query | string | no | |
until | query | string | no |
"string"{
"error": "string"
}Human-review queue for policy-escalated calls.
/v1/admin/approvals List pending approvals
| Name | In | Type | Required | Description |
|---|---|---|---|---|
tenant | query | string | no | Superadmin-only: scope the operation to a tenant. Per-tenant admin tokens force scope and ignore this. |
limit | query | integer | no | Maximum items to return (1-1000). |
cursor | query | string | no | Opaque cursor returned in the prior response's `next_cursor`. |
{
"items": [
{
"id": "string",
"tenant": "string",
"agent_id": "string",
"capability_token_id": "string",
"tool": "string",
"arguments": {},
"escalating_rule": "string",
"created_at": "2026-06-14T13:42:00Z"
}
],
"next_cursor": "string"
}{
"error": "string"
}/v1/admin/approvals/{id}/decide Approve or reject a parked call
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | yes |
{
"decision": "approve",
"reason": "string",
"decided_by": "joe@acme-corp.example"
}{
"error": "string"
}{
"error": "string"
}{
"error": "string"
}Tenant inventory for the console switcher.
/v1/admin/tenants List configured tenants
[
{
"name": "acme-corp",
"active_policy_sha": "string",
"pending_approvals": 0,
"recent_event_count": 0
}
]{
"error": "string"
}SIEM and webhook destination health.
/v1/admin/integrations Status of every configured SIEM and webhook destination
[
{
"name": "splunk",
"configured": false,
"endpoint": "string",
"last_flush_ts": "2026-06-14T13:42:00Z",
"total_events": 0,
"dropped_count": 0,
"last_error": "string"
}
]{
"error": "string"
}Console endpoints that feed the agent inventory. Bearer-token authenticated, server-to-server, and not part of the open-core gateway spec above.
/api/discovery/ingest Push discovered agents from a source.
{ "records": [ … ] } or a bare array. Returns
{ ok, discovered, imported, source }.
/api/discovery/sync Run the automatic-pull scheduler.
INTENTGATE_DISCOVERY_SYNC_TOKEN and call from a cron /
CronJob every few minutes; it only touches sources actually due.
Returns { ok, polled, imported, results }.
Read-only reporting over the agent inventory, ownership, attestation, and the gateway audit log.
/api/reports/{type} Fetch a governance report as JSON or CSV.
type is one of posture,
access, attestation, or
activity. Authenticate with
INTENTGATE_REPORTS_API_TOKEN. Add
?format=csv for a flat-file download (default JSON)
and ?tenant= to scope. Posture is coverage roll-ups;
access is the agent register (agent → touches → policy → owner);
attestation is campaign completion + evidence; activity aggregates
the gateway audit log: allow / deny counts and top-blocked agents
and tools.