Skip to main content

Gateway API

The core gateway endpoints for evaluating and executing agent actions.

Execute Action

Evaluate and execute an action in one call. The gateway evaluates the request against policies and, if allowed, executes the action.

POST /api/v1/gateway/execute

Request

curl -X POST http://localhost:8000/api/v1/gateway/execute \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"uapk_id": "customer-support-bot",
"agent_id": "customer-support-bot",
"action": {
"type": "email",
"tool": "send",
"params": {
"to": "customer@example.com",
"subject": "Re: Your inquiry",
"body": "Thank you for contacting us..."
}
}
}'

Parameters

FieldTypeRequiredDescription
uapk_idstringYesAgent manifest identifier
agent_idstringYesAgent instance identifier
capability_tokenstringNoEd25519-signed capability JWT
action.typestringYesAction category (e.g., email, crm)
action.toolstringYesSpecific tool (e.g., send, update)
action.paramsobjectYesTool-specific parameters
idempotency_keystringNoUnique key for idempotent execution

Response: ALLOW

{
"interaction_id": "int-abc123",
"decision": "ALLOW",
"reasons": [],
"executed": true,
"result": {
"success": true,
"data": {
"message_id": "msg-xyz789",
"sent_at": "2024-12-14T10:30:00Z"
}
},
"policy_trace": {
"checks": [
{"check": "manifest_validation", "result": "pass"},
{"check": "capability_token", "result": "pass"},
{"check": "action_type", "result": "pass"},
{"check": "tool_authorization", "result": "pass"},
{"check": "budget_check", "result": "pass"}
]
},
"risk_snapshot": {
"budget_current": 45,
"budget_limit": 100,
"budget_percent": 45.0
},
"timestamp": "2024-12-14T10:30:00Z"
}

Response: DENY

{
"interaction_id": "int-def456",
"decision": "DENY",
"reasons": [
{
"code": "BUDGET_EXCEEDED",
"message": "Hourly action limit exceeded (100/100)"
}
],
"executed": false,
"policy_trace": {
"checks": [
{"check": "manifest_validation", "result": "pass"},
{"check": "capability_token", "result": "pass"},
{"check": "budget_check", "result": "fail", "details": {"current": 100, "limit": 100}}
]
},
"timestamp": "2024-12-14T10:31:00Z"
}

Response: ESCALATE

{
"interaction_id": "int-ghi789",
"decision": "ESCALATE",
"reasons": [
{
"code": "REQUIRES_APPROVAL",
"message": "Action 'crm:delete' requires human approval"
}
],
"approval_id": "appr-xyz789",
"executed": false,
"timestamp": "2024-12-14T10:32:00Z"
}

Evaluate Action (Dry Run)

Evaluate an action without executing it. Useful for pre-flight checks.

POST /api/v1/gateway/evaluate

Request

curl -X POST http://localhost:8000/api/v1/gateway/evaluate \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"uapk_id": "customer-support-bot",
"agent_id": "customer-support-bot",
"action": {
"type": "email",
"tool": "send",
"params": {
"to": "customer@example.com",
"subject": "Test"
}
}
}'

Response

{
"would_allow": true,
"decision": "ALLOW",
"reasons": [],
"policy_trace": {
"checks": [
{"check": "manifest_validation", "result": "pass"},
{"check": "capability_token", "result": "pass"},
{"check": "action_type", "result": "pass"},
{"check": "tool_authorization", "result": "pass"},
{"check": "budget_check", "result": "pass"}
]
},
"risk_snapshot": {
"budget_current": 45,
"budget_limit": 100,
"budget_percent": 45.0
}
}

Execute with Capability Token

Include a capability token for fine-grained authorization.

Request

curl -X POST http://localhost:8000/api/v1/gateway/execute \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"uapk_id": "customer-support-bot",
"agent_id": "customer-support-bot",
"capability_token": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJpc3N1ZXItYWJjMTIzIiwic3ViIjoiY3VzdG9tZXItc3VwcG9ydC1ib3QiLCJhdWQiOiJ1YXBrLWdhdGV3YXkiLCJleHAiOjE3MDI2NDY0MDAsImNhcCI6WyJlbWFpbDpzZW5kIl19.signature",
"action": {
"type": "email",
"tool": "send",
"params": {
"to": "customer@example.com",
"subject": "Hello"
}
}
}'

Batch Execute

Execute multiple actions in a single request.

POST /api/v1/gateway/batch

Request

curl -X POST http://localhost:8000/api/v1/gateway/batch \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"uapk_id": "customer-support-bot",
"agent_id": "customer-support-bot",
"actions": [
{
"action_id": "a1",
"type": "email",
"tool": "send",
"params": {"to": "user1@example.com", "subject": "Hello"}
},
{
"action_id": "a2",
"type": "crm",
"tool": "update",
"params": {"record_id": "rec-123", "status": "contacted"}
}
],
"stop_on_deny": false
}'

Parameters

FieldTypeRequiredDescription
actionsarrayYesList of actions to execute
actions[].action_idstringYesClient-provided ID for correlation
stop_on_denybooleanNoStop batch on first deny (default: false)

Response

{
"batch_id": "batch-abc123",
"results": [
{
"action_id": "a1",
"interaction_id": "int-001",
"decision": "ALLOW",
"executed": true,
"result": {"message_id": "msg-001"}
},
{
"action_id": "a2",
"interaction_id": "int-002",
"decision": "DENY",
"executed": false,
"reasons": [{"code": "CAPABILITY_MISSING", "message": "crm:update not in token"}]
}
],
"summary": {
"total": 2,
"allowed": 1,
"denied": 1,
"escalated": 0
}
}

Idempotent Execution

Prevent duplicate executions using idempotency keys.

Request

curl -X POST http://localhost:8000/api/v1/gateway/execute \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"uapk_id": "customer-support-bot",
"agent_id": "customer-support-bot",
"idempotency_key": "order-confirmation-12345",
"action": {
"type": "email",
"tool": "send",
"params": {
"to": "customer@example.com",
"subject": "Order Confirmation #12345"
}
}
}'

Duplicate Request Response

If the same idempotency key is reused within 24 hours:

{
"interaction_id": "int-abc123",
"decision": "ALLOW",
"executed": true,
"result": {
"message_id": "msg-xyz789"
},
"idempotent": true,
"original_timestamp": "2024-12-14T10:30:00Z"
}

Issue Capability Token

Issue a capability token for an agent.

POST /api/v1/orgs/{org_id}/capability-tokens

Request

curl -X POST http://localhost:8000/api/v1/orgs/$ORG_ID/capability-tokens \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"issuer_id": "issuer-abc123",
"agent_id": "customer-support-bot",
"manifest_id": "880e8400-e29b-41d4-a716-446655440003",
"capabilities": ["email:send", "crm:read"],
"expires_in_hours": 24,
"constraints": {
"max_actions": 100,
"allowed_recipients": ["*@acme.com"]
}
}'

Response

{
"token_id": "tok-xyz789",
"token": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9...",
"expires_at": "2024-12-15T10:00:00Z",
"capabilities": ["email:send", "crm:read"],
"constraints": {
"max_actions": 100,
"allowed_recipients": ["*@acme.com"]
}
}

Revoke Capability Token

Revoke a capability token before expiry.

POST /api/v1/orgs/{org_id}/capability-tokens/{token_id}/revoke

Request

curl -X POST http://localhost:8000/api/v1/orgs/$ORG_ID/capability-tokens/tok-xyz789/revoke \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"reason": "Suspected token compromise"
}'

Decision Codes

ALLOW Reasons

The request passes all policy checks.

DENY Reasons

CodeDescription
MANIFEST_NOT_FOUNDNo manifest registered for agent
MANIFEST_INACTIVEManifest is suspended or revoked
INVALID_TOKENCapability token is invalid
TOKEN_EXPIREDCapability token has expired
TOKEN_REVOKEDCapability token was revoked
ACTION_NOT_ALLOWEDAction type not permitted
TOOL_NOT_AUTHORIZEDTool not in manifest
CAPABILITY_MISSINGRequired capability not in token
BUDGET_EXCEEDEDRate limit exceeded
JURISDICTION_BLOCKEDCounterparty in blocked region
COUNTERPARTY_BLOCKEDCounterparty on blocklist

ESCALATE Reasons

CodeDescription
REQUIRES_APPROVALAction requires human approval
AMOUNT_THRESHOLDValue exceeds auto-approve threshold
NEW_COUNTERPARTYFirst interaction with counterparty
HIGH_RISK_ACTIONAction flagged as high risk

Health Check

Check gateway health status.

GET /api/v1/gateway/health

Request

curl http://localhost:8000/api/v1/gateway/health

Response

{
"status": "healthy",
"version": "0.1.0",
"database": "connected",
"timestamp": "2024-12-14T10:00:00Z"
}