Download OpenAPI specification:Download
Neutral, trustworthy infrastructure for verifiable delegated authority between humans and AI agents.
Lists onboarding access requests. Supports optional status filtering (PENDING, APPROVED, REJECTED) and cursor-based pagination. Requires Cognito JWT with mandaitor-admins group membership.
| status | string Enum: "PENDING" "APPROVED" "REJECTED" Filter by request status |
| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string Base64url-encoded pagination cursor |
{- "requests": [
- {
- "request_id": "string",
- "company_name": "string",
- "contact_name": "string",
- "contact_email": "user@example.com",
- "use_case": "string",
- "industry": "construction",
- "lead_source": "string",
- "beta_track": "string",
- "asset": "string",
- "status": "PENDING",
- "submitted_at": "2019-08-24T14:15:22Z",
- "reviewed_at": "2019-08-24T14:15:22Z",
- "reviewed_by": "string",
- "tenant_id": "string"
}
], - "next_cursor": "string"
}Processes an admin action on an onboarding request.
Supported values for {action}: approve, reject.
| requestId required | string |
| action required | string Enum: "approve" "reject" |
| notes | string |
{- "notes": "string"
}{- "tenant_id": "string",
- "company_name": "string",
- "plan": "string",
- "status": "ACTIVE",
- "created_at": "2019-08-24T14:15:22Z",
- "api_keys": [
- {
- "key_id": "string",
- "name": "string",
- "scopes": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z"
}
]
}Returns a single tenant's config, linked onboarding metadata, API key count, and mandate status counts (capped at the first 600 mandates).
Requires Cognito JWT with mandaitor-admins group membership.
| id required | string Example: tnt_ABC123 |
{- "tenant_id": "string",
- "display_name": "string",
- "contact_name": "string",
- "contact_email": "string",
- "status": "ACTIVE",
- "created_at": "2019-08-24T14:15:22Z",
- "usage_plan": {
- "rate_limit": 0,
- "quota_limit": 0,
- "quota_period": "string"
}, - "api_key_count": 0,
- "mandate_stats": {
- "total": 0,
- "active": 0,
- "suspended": 0,
- "revoked": 0,
- "expired": 0,
- "draft": 0
}, - "onboarding": {
- "request_id": "string",
- "use_case": "string",
- "website": "string",
- "submitted_at": "2019-08-24T14:15:22Z",
- "reviewed_at": "2019-08-24T14:15:22Z",
- "reviewed_by": "string"
}
}EMERGENCY OPERATION — Immediately revokes all ACTIVE and SUSPENDED mandates for a tenant. This is an irreversible bulk operation intended for security incidents, compliance breaches, or contract terminations.
Requires Cognito JWT with mandaitor-admins group membership.
A MANDATE_REVOKED audit event is emitted per mandate with
details.kill_switch_triggered = true.
| id required | string Example: tnt_ABC123 |
| reason required | string Mandatory reason for the emergency kill-switch |
{- "reason": "Security incident — unauthorized access detected"
}{- "tenant_id": "string",
- "revoked_count": 0,
- "skipped_count": 0,
- "execution_id": "string",
- "timestamp": "2019-08-24T14:15:22Z"
}Returns the current system mode (growth, sustain, maintenance, frozen)
and associated metadata. Requires Cognito JWT with mandaitor-admins
group membership.
{- "mode": "growth",
- "reason": "Default operational mode",
- "changed_at": "2019-08-24T14:15:22Z",
- "changed_by": "string",
- "estimated_duration_minutes": 0
}Changes the system operational mode. This immediately affects all API endpoints:
Mode changes propagate within ~10 seconds via in-memory cache TTL.
Requires Cognito JWT with mandaitor-admins group membership.
| mode required | string Enum: "growth" "sustain" "maintenance" "frozen" |
| reason | string |
| estimated_duration_minutes | integer |
{- "mode": "maintenance",
- "reason": "CDK stack update — estimated 30 minutes",
- "estimated_duration_minutes": 30
}{- "mode": "growth",
- "reason": "Default operational mode",
- "changed_at": "2019-08-24T14:15:22Z",
- "changed_by": "string",
- "estimated_duration_minutes": 0
}Proxies authentication requests to Cognito from the browser, bypassing
the ESC Cognito IDP endpoint DNS resolution issue. The {action}
path parameter determines the operation:
InitiateAuth with USER_PASSWORD_AUTHRespondToAuthChallenge (NEW_PASSWORD_REQUIRED, MFA)REFRESH_TOKEN_AUTHGlobalSignOutForgotPasswordConfirmForgotPassword| action required | string Enum: "login" "respond" "refresh" "sign-out" "forgot-password" "confirm-forgot-password" |
Request body varies by action:
{ email, password }{ challengeName, session, responses }{ refreshToken }{ accessToken }{ email }{ email, code, newPassword }{ }{ }Admin-only endpoint that scans all active tenants and creates Stripe
Customer records for those that do not yet have one. Optionally creates
a metered subscription if STRIPE_METERED_PRICE_ID is configured.
Also runs automatically on a daily schedule (02:00 UTC).
{- "synced": 0,
- "skipped": 0,
- "failed": 0,
- "errors": [
- "string"
]
}| agent_id required | string |
| display_name required | string |
| tagline required | string <= 120 characters |
| description required | string |
| logo_url | string <uri> |
| docs_url | string <uri> |
required | Array of objects (CapabilityDeclaration) non-empty |
required | object (PricingInfo) |
| tags | Array of strings |
| supported_regions | Array of strings |
| certifications | Array of strings |
{- "agent_id": "string",
- "display_name": "string",
- "tagline": "string",
- "description": "string",
- "capabilities": [
- {
- "capability_id": "string",
- "name": "string",
- "description": "string",
- "category": "DOCUMENT_PROCESSING",
- "required_scopes": [
- "string"
], - "input_schema": { },
- "output_schema": { },
- "avg_execution_ms": 0,
- "max_execution_ms": 0
}
], - "pricing": {
- "model": "FREE",
- "unit_price": 0,
- "currency": "string",
- "free_tier_limit": 0,
- "custom_description": "string"
}, - "tags": [
- "string"
], - "supported_regions": [
- "string"
], - "certifications": [
- "string"
]
}{- "listing_id": "string",
- "agent_id": "string",
- "owner_tenant_id": "string",
- "status": "DRAFT",
- "display_name": "string",
- "tagline": "string",
- "description": "string",
- "capabilities": [
- {
- "capability_id": "string",
- "name": "string",
- "description": "string",
- "category": "DOCUMENT_PROCESSING",
- "required_scopes": [
- "string"
], - "input_schema": { },
- "output_schema": { },
- "avg_execution_ms": 0,
- "max_execution_ms": 0
}
], - "pricing": {
- "model": "FREE",
- "unit_price": 0,
- "currency": "string",
- "free_tier_limit": 0,
- "custom_description": "string"
}, - "trust_metrics": {
- "trust_score": 1,
- "avg_rating": 1,
- "review_count": 0,
- "total_invocations": 0,
- "success_rate": 1,
- "avg_response_ms": 0,
- "drift_score": 1,
- "uptime": 1,
- "computed_at": "2019-08-24T14:15:22Z"
}, - "tags": [
- "string"
], - "supported_regions": [
- "string"
], - "certifications": [
- "string"
], - "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z"
}| cursor | string |
| limit | integer [ 1 .. 50 ] Default: 20 |
{- "items": [
- {
- "listing_id": "string",
- "agent_id": "string",
- "owner_tenant_id": "string",
- "status": "DRAFT",
- "display_name": "string",
- "tagline": "string",
- "description": "string",
- "capabilities": [
- {
- "capability_id": "string",
- "name": "string",
- "description": "string",
- "category": "DOCUMENT_PROCESSING",
- "required_scopes": [
- "string"
], - "input_schema": { },
- "output_schema": { },
- "avg_execution_ms": 0,
- "max_execution_ms": 0
}
], - "pricing": {
- "model": "FREE",
- "unit_price": 0,
- "currency": "string",
- "free_tier_limit": 0,
- "custom_description": "string"
}, - "trust_metrics": {
- "trust_score": 1,
- "avg_rating": 1,
- "review_count": 0,
- "total_invocations": 0,
- "success_rate": 1,
- "avg_response_ms": 0,
- "drift_score": 1,
- "uptime": 1,
- "computed_at": "2019-08-24T14:15:22Z"
}, - "tags": [
- "string"
], - "supported_regions": [
- "string"
], - "certifications": [
- "string"
], - "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z"
}
], - "next_cursor": "string",
- "total_count": 0
}{- "listing_id": "string",
- "agent_id": "string",
- "owner_tenant_id": "string",
- "status": "DRAFT",
- "display_name": "string",
- "tagline": "string",
- "description": "string",
- "capabilities": [
- {
- "capability_id": "string",
- "name": "string",
- "description": "string",
- "category": "DOCUMENT_PROCESSING",
- "required_scopes": [
- "string"
], - "input_schema": { },
- "output_schema": { },
- "avg_execution_ms": 0,
- "max_execution_ms": 0
}
], - "pricing": {
- "model": "FREE",
- "unit_price": 0,
- "currency": "string",
- "free_tier_limit": 0,
- "custom_description": "string"
}, - "trust_metrics": {
- "trust_score": 1,
- "avg_rating": 1,
- "review_count": 0,
- "total_invocations": 0,
- "success_rate": 1,
- "avg_response_ms": 0,
- "drift_score": 1,
- "uptime": 1,
- "computed_at": "2019-08-24T14:15:22Z"
}, - "tags": [
- "string"
], - "supported_regions": [
- "string"
], - "certifications": [
- "string"
], - "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z"
}| listingId required | string |
| display_name | string |
| tagline | string <= 120 characters |
| description | string |
| logo_url | string <uri> |
| docs_url | string <uri> |
Array of objects (CapabilityDeclaration) | |
object (PricingInfo) | |
| tags | Array of strings |
| supported_regions | Array of strings |
| certifications | Array of strings |
{- "display_name": "string",
- "tagline": "string",
- "description": "string",
- "capabilities": [
- {
- "capability_id": "string",
- "name": "string",
- "description": "string",
- "category": "DOCUMENT_PROCESSING",
- "required_scopes": [
- "string"
], - "input_schema": { },
- "output_schema": { },
- "avg_execution_ms": 0,
- "max_execution_ms": 0
}
], - "pricing": {
- "model": "FREE",
- "unit_price": 0,
- "currency": "string",
- "free_tier_limit": 0,
- "custom_description": "string"
}, - "tags": [
- "string"
], - "supported_regions": [
- "string"
], - "certifications": [
- "string"
]
}{- "listing_id": "string",
- "agent_id": "string",
- "owner_tenant_id": "string",
- "status": "DRAFT",
- "display_name": "string",
- "tagline": "string",
- "description": "string",
- "capabilities": [
- {
- "capability_id": "string",
- "name": "string",
- "description": "string",
- "category": "DOCUMENT_PROCESSING",
- "required_scopes": [
- "string"
], - "input_schema": { },
- "output_schema": { },
- "avg_execution_ms": 0,
- "max_execution_ms": 0
}
], - "pricing": {
- "model": "FREE",
- "unit_price": 0,
- "currency": "string",
- "free_tier_limit": 0,
- "custom_description": "string"
}, - "trust_metrics": {
- "trust_score": 1,
- "avg_rating": 1,
- "review_count": 0,
- "total_invocations": 0,
- "success_rate": 1,
- "avg_response_ms": 0,
- "drift_score": 1,
- "uptime": 1,
- "computed_at": "2019-08-24T14:15:22Z"
}, - "tags": [
- "string"
], - "supported_regions": [
- "string"
], - "certifications": [
- "string"
], - "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z"
}{- "listing_id": "string",
- "agent_id": "string",
- "owner_tenant_id": "string",
- "status": "DRAFT",
- "display_name": "string",
- "tagline": "string",
- "description": "string",
- "capabilities": [
- {
- "capability_id": "string",
- "name": "string",
- "description": "string",
- "category": "DOCUMENT_PROCESSING",
- "required_scopes": [
- "string"
], - "input_schema": { },
- "output_schema": { },
- "avg_execution_ms": 0,
- "max_execution_ms": 0
}
], - "pricing": {
- "model": "FREE",
- "unit_price": 0,
- "currency": "string",
- "free_tier_limit": 0,
- "custom_description": "string"
}, - "trust_metrics": {
- "trust_score": 1,
- "avg_rating": 1,
- "review_count": 0,
- "total_invocations": 0,
- "success_rate": 1,
- "avg_response_ms": 0,
- "drift_score": 1,
- "uptime": 1,
- "computed_at": "2019-08-24T14:15:22Z"
}, - "tags": [
- "string"
], - "supported_regions": [
- "string"
], - "certifications": [
- "string"
], - "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z"
}| listingId required | string |
{- "listing_id": "string",
- "agent_id": "string",
- "owner_tenant_id": "string",
- "status": "DRAFT",
- "display_name": "string",
- "tagline": "string",
- "description": "string",
- "capabilities": [
- {
- "capability_id": "string",
- "name": "string",
- "description": "string",
- "category": "DOCUMENT_PROCESSING",
- "required_scopes": [
- "string"
], - "input_schema": { },
- "output_schema": { },
- "avg_execution_ms": 0,
- "max_execution_ms": 0
}
], - "pricing": {
- "model": "FREE",
- "unit_price": 0,
- "currency": "string",
- "free_tier_limit": 0,
- "custom_description": "string"
}, - "trust_metrics": {
- "trust_score": 1,
- "avg_rating": 1,
- "review_count": 0,
- "total_invocations": 0,
- "success_rate": 1,
- "avg_response_ms": 0,
- "drift_score": 1,
- "uptime": 1,
- "computed_at": "2019-08-24T14:15:22Z"
}, - "tags": [
- "string"
], - "supported_regions": [
- "string"
], - "certifications": [
- "string"
], - "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z"
}| q | string Free-text search |
| category | string (CapabilityCategory) Enum: "DOCUMENT_PROCESSING" "DATA_ANALYSIS" "COMMUNICATION" "FINANCIAL" "LEGAL" "COMPLIANCE" "IDENTITY" "INTEGRATION" "AUTOMATION" "CUSTOM" |
| min_trust_score | number [ 0 .. 1 ] |
| min_rating | number [ 1 .. 5 ] |
| pricing_model | string (PricingModel) Enum: "FREE" "PER_CALL" "PER_MINUTE" "MONTHLY" "CUSTOM" |
| sort_by | string Enum: "trust_score" "rating" "invocations" "response_time" "created_at" |
| sort_order | string Enum: "asc" "desc" |
| cursor | string |
| limit | integer [ 1 .. 50 ] Default: 20 |
{- "listings": [
- {
- "listing_id": "string",
- "agent_id": "string",
- "owner_tenant_id": "string",
- "status": "DRAFT",
- "display_name": "string",
- "tagline": "string",
- "description": "string",
- "capabilities": [
- {
- "capability_id": "string",
- "name": "string",
- "description": "string",
- "category": "DOCUMENT_PROCESSING",
- "required_scopes": [
- "string"
], - "input_schema": { },
- "output_schema": { },
- "avg_execution_ms": 0,
- "max_execution_ms": 0
}
], - "pricing": {
- "model": "FREE",
- "unit_price": 0,
- "currency": "string",
- "free_tier_limit": 0,
- "custom_description": "string"
}, - "trust_metrics": {
- "trust_score": 1,
- "avg_rating": 1,
- "review_count": 0,
- "total_invocations": 0,
- "success_rate": 1,
- "avg_response_ms": 0,
- "drift_score": 1,
- "uptime": 1,
- "computed_at": "2019-08-24T14:15:22Z"
}, - "tags": [
- "string"
], - "supported_regions": [
- "string"
], - "certifications": [
- "string"
], - "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z"
}
], - "next_cursor": "string",
- "total_count": 0
}| task_description required | string Natural language description of the task |
| required_capabilities | Array of strings Specific capability IDs needed |
| max_results | integer [ 1 .. 20 ] Default: 5 |
{- "task_description": "string",
- "required_capabilities": [
- "string"
], - "max_results": 5
}{- "listings": [
- {
- "listing_id": "string",
- "agent_id": "string",
- "owner_tenant_id": "string",
- "status": "DRAFT",
- "display_name": "string",
- "tagline": "string",
- "description": "string",
- "capabilities": [
- {
- "capability_id": "string",
- "name": "string",
- "description": "string",
- "category": "DOCUMENT_PROCESSING",
- "required_scopes": [
- "string"
], - "input_schema": { },
- "output_schema": { },
- "avg_execution_ms": 0,
- "max_execution_ms": 0
}
], - "pricing": {
- "model": "FREE",
- "unit_price": 0,
- "currency": "string",
- "free_tier_limit": 0,
- "custom_description": "string"
}, - "trust_metrics": {
- "trust_score": 1,
- "avg_rating": 1,
- "review_count": 0,
- "total_invocations": 0,
- "success_rate": 1,
- "avg_response_ms": 0,
- "drift_score": 1,
- "uptime": 1,
- "computed_at": "2019-08-24T14:15:22Z"
}, - "tags": [
- "string"
], - "supported_regions": [
- "string"
], - "certifications": [
- "string"
], - "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "published_at": "2019-08-24T14:15:22Z"
}
], - "next_cursor": "string",
- "total_count": 0
}| listing_id required | string |
| rating required | integer [ 1 .. 5 ] |
| comment | string |
| capability_id | string |
| consent_request_id | string |
{- "listing_id": "string",
- "rating": 1,
- "comment": "string",
- "capability_id": "string",
- "consent_request_id": "string"
}{- "review_id": "string",
- "listing_id": "string",
- "agent_id": "string",
- "reviewer_tenant_id": "string",
- "rating": 1,
- "comment": "string",
- "capability_id": "string",
- "consent_request_id": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| listingId required | string |
| cursor | string |
| limit | integer [ 1 .. 50 ] Default: 20 |
{- "items": [
- {
- "review_id": "string",
- "listing_id": "string",
- "agent_id": "string",
- "reviewer_tenant_id": "string",
- "rating": 1,
- "comment": "string",
- "capability_id": "string",
- "consent_request_id": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "next_cursor": "string",
- "total_count": 0
}Creates a new agent identity with a DID, KMS-backed key pair, and initial ACTIVE status. The agent can then be bound to mandates.
| name required | string Human-readable agent name |
| description | string Agent description |
| algorithm | string Default: "ES256" Enum: "ES256" "ES384" "EdDSA" Key algorithm for the agent's verification method |
object Arbitrary metadata attached to the agent |
{- "name": "string",
- "description": "string",
- "algorithm": "ES256",
- "metadata": { }
}{- "agent_id": "string",
- "tenant_id": "string",
- "did": "string",
- "name": "string",
- "description": "string",
- "status": "ACTIVE",
- "verification_methods": [
- {
- "id": "string",
- "type": "string",
- "publicKeyJwk": { },
- "status": "ACTIVE"
}
], - "bound_mandates": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns a paginated list of agent identities for the authenticated tenant.
| status | string Enum: "ACTIVE" "SUSPENDED" "REVOKED" |
| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string Base64url-encoded pagination cursor |
{- "items": [
- {
- "agent_id": "string",
- "tenant_id": "string",
- "did": "string",
- "name": "string",
- "description": "string",
- "status": "ACTIVE",
- "verification_methods": [
- {
- "id": "string",
- "type": "string",
- "publicKeyJwk": { },
- "status": "ACTIVE"
}
], - "bound_mandates": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "cursor": "string"
}{- "agent_id": "string",
- "tenant_id": "string",
- "did": "string",
- "name": "string",
- "description": "string",
- "status": "ACTIVE",
- "verification_methods": [
- {
- "id": "string",
- "type": "string",
- "publicKeyJwk": { },
- "status": "ACTIVE"
}
], - "bound_mandates": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| id required | string |
| algorithm | string Default: "ES256" Enum: "ES256" "ES384" "EdDSA" |
{- "algorithm": "ES256"
}{- "agent_id": "string",
- "tenant_id": "string",
- "did": "string",
- "name": "string",
- "description": "string",
- "status": "ACTIVE",
- "verification_methods": [
- {
- "id": "string",
- "type": "string",
- "publicKeyJwk": { },
- "status": "ACTIVE"
}
], - "bound_mandates": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| id required | string |
| mandate_id required | string |
{- "mandate_id": "string"
}{- "agent_id": "string",
- "tenant_id": "string",
- "did": "string",
- "name": "string",
- "description": "string",
- "status": "ACTIVE",
- "verification_methods": [
- {
- "id": "string",
- "type": "string",
- "publicKeyJwk": { },
- "status": "ACTIVE"
}
], - "bound_mandates": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| id required | string |
| mandateId required | string |
{- "agent_id": "string",
- "tenant_id": "string",
- "did": "string",
- "name": "string",
- "description": "string",
- "status": "ACTIVE",
- "verification_methods": [
- {
- "id": "string",
- "type": "string",
- "publicKeyJwk": { },
- "status": "ACTIVE"
}
], - "bound_mandates": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "agent_id": "string",
- "tenant_id": "string",
- "did": "string",
- "name": "string",
- "description": "string",
- "status": "ACTIVE",
- "verification_methods": [
- {
- "id": "string",
- "type": "string",
- "publicKeyJwk": { },
- "status": "ACTIVE"
}
], - "bound_mandates": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| id required | string |
{- "agent_id": "string",
- "tenant_id": "string",
- "did": "string",
- "name": "string",
- "description": "string",
- "status": "ACTIVE",
- "verification_methods": [
- {
- "id": "string",
- "type": "string",
- "publicKeyJwk": { },
- "status": "ACTIVE"
}
], - "bound_mandates": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| id required | string |
{- "agent_id": "string",
- "tenant_id": "string",
- "did": "string",
- "name": "string",
- "description": "string",
- "status": "ACTIVE",
- "verification_methods": [
- {
- "id": "string",
- "type": "string",
- "publicKeyJwk": { },
- "status": "ACTIVE"
}
], - "bound_mandates": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns usage data for the authenticated tenant's current or specified billing period. Includes total units, per-endpoint breakdown, daily usage timeline, and per-API-key breakdown. The tenant path parameter must match the authenticated caller.
| id required | string |
| period | string^\d{4}-\d{2}$ Example: period=2026-04 Billing period in YYYY-MM format. Defaults to current month. |
| granularity | string Default: "daily" Enum: "daily" "hourly" |
{- "tenant_id": "string",
- "billing_period": "2026-04",
- "total_units": 0,
- "endpoint_breakdown": {
- "property1": 0,
- "property2": 0
}, - "daily_usage": [
- {
- "date": "2019-08-24",
- "units": 0
}
], - "api_key_breakdown": [
- {
- "api_key_id": "string",
- "total_units": 0
}
], - "granularity": "daily"
}Returns the billing status for the authenticated tenant, including Stripe subscription details, payment method status, recent invoices, current period usage, and a link to the Stripe Customer Portal for managing payment methods. The tenant path parameter must match the authenticated caller.
| id required | string |
{- "tenant_id": "string",
- "billing_status": "active",
- "stripe_connected": true,
- "subscription_status": "string",
- "subscription": {
- "id": "string",
- "status": "string",
- "current_period_start": "2019-08-24T14:15:22Z",
- "current_period_end": "2019-08-24T14:15:22Z",
- "cancel_at_period_end": true
}, - "invoices": [
- {
- "invoice_id": "string",
- "status": "string",
- "amount": 0,
- "currency": "string",
- "period_start": "2019-08-24T14:15:22Z",
- "period_end": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}
], - "current_period": {
- "billing_period": "string",
- "total_units": 0,
- "endpoint_breakdown": {
- "property1": 0,
- "property2": 0
}
},
}Creates a Stripe SetupIntent to securely collect a payment method (credit card) for the tenant. If the tenant does not yet have a Stripe Customer, one is created automatically. Returns a client secret for use with Stripe.js / Stripe Elements on the frontend.
| id required | string |
{- "client_secret": "string",
- "stripe_customer_id": "string"
}Creates or updates a Stripe Subscription for the tenant based on the selected pricing plan. For the free beta plan, no Stripe subscription is created and no payment method is required. For paid plans (starter, growth, enterprise), a Stripe subscription is created with metered billing. If the tenant has no payment method on file, a SetupIntent client_secret is returned so the frontend can collect card details.
| id required | string |
| plan required | string Enum: "beta" "starter" "growth" "enterprise" The pricing plan to subscribe to |
{- "plan": "beta"
}{- "plan": "beta",
- "plan_name": "string",
- "status": "active",
- "requires_payment": true,
- "subscription_id": "string",
- "stripe_customer_id": "string",
- "client_secret": "string",
- "message": "string"
}Receives and processes Stripe webhook events. Authentication is performed via Stripe signature verification (not API key or JWT). Handles invoice lifecycle events (payment succeeded/failed/finalized) and subscription changes (updated/deleted).
Raw Stripe webhook event payload
{ }{- "received": true
}Admin-only endpoint that scans all active tenants and creates Stripe
Customer records for those that do not yet have one. Optionally creates
a metered subscription if STRIPE_METERED_PRICE_ID is configured.
Also runs automatically on a daily schedule (02:00 UTC).
{- "synced": 0,
- "skipped": 0,
- "failed": 0,
- "errors": [
- "string"
]
}| mandate_id required | string ID of the mandate being acted upon |
| agent_id required | string ID of the agent requesting consent |
| requested_actions required | Array of strings Actions the agent wants to perform |
| requested_resources required | Array of strings Resources the agent wants to access |
| reason required | string Human-readable explanation of why consent is needed |
| context | object Additional context for the consent decision |
| expires_in_seconds | integer Custom TTL for this consent request (default 3600) |
{- "mandate_id": "string",
- "agent_id": "string",
- "requested_actions": [
- "string"
], - "requested_resources": [
- "string"
], - "reason": "string",
- "context": { },
- "expires_in_seconds": 0
}{- "consent_id": "string",
- "tenant_id": "string",
- "mandate_id": "string",
- "agent_id": "string",
- "approver_subject_id": "string",
- "status": "pending",
- "requested_actions": [
- "string"
], - "requested_resources": [
- "string"
], - "reason": "string",
- "context": { },
- "resolution": {
- "decision": "approved",
- "resolved_by": "string",
- "resolved_at": "2019-08-24T14:15:22Z",
- "reason": "string",
- "conditions": { }
}, - "auto_approved": true,
- "policy_id": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z"
}| limit | integer Default: 20 |
| cursor | string |
{- "items": [
- {
- "consent_id": "string",
- "tenant_id": "string",
- "mandate_id": "string",
- "agent_id": "string",
- "approver_subject_id": "string",
- "status": "pending",
- "requested_actions": [
- "string"
], - "requested_resources": [
- "string"
], - "reason": "string",
- "context": { },
- "resolution": {
- "decision": "approved",
- "resolved_by": "string",
- "resolved_at": "2019-08-24T14:15:22Z",
- "reason": "string",
- "conditions": { }
}, - "auto_approved": true,
- "policy_id": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z"
}
], - "next_cursor": "string",
- "total_count": 0
}| id required | string |
{- "consent_id": "string",
- "tenant_id": "string",
- "mandate_id": "string",
- "agent_id": "string",
- "approver_subject_id": "string",
- "status": "pending",
- "requested_actions": [
- "string"
], - "requested_resources": [
- "string"
], - "reason": "string",
- "context": { },
- "resolution": {
- "decision": "approved",
- "resolved_by": "string",
- "resolved_at": "2019-08-24T14:15:22Z",
- "reason": "string",
- "conditions": { }
}, - "auto_approved": true,
- "policy_id": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z"
}| id required | string |
| decision required | string Enum: "approved" "rejected" |
| reason | string Reason for the decision |
| conditions | object Optional conditions attached to the approval |
{- "decision": "approved",
- "reason": "string",
- "conditions": { }
}{- "consent_id": "string",
- "tenant_id": "string",
- "mandate_id": "string",
- "agent_id": "string",
- "approver_subject_id": "string",
- "status": "pending",
- "requested_actions": [
- "string"
], - "requested_resources": [
- "string"
], - "reason": "string",
- "context": { },
- "resolution": {
- "decision": "approved",
- "resolved_by": "string",
- "resolved_at": "2019-08-24T14:15:22Z",
- "reason": "string",
- "conditions": { }
}, - "auto_approved": true,
- "policy_id": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z"
}| id required | string |
| status | string Enum: "pending" "approved" "rejected" "expired" |
| limit | integer Default: 20 |
| cursor | string |
{- "items": [
- {
- "consent_id": "string",
- "tenant_id": "string",
- "mandate_id": "string",
- "agent_id": "string",
- "approver_subject_id": "string",
- "status": "pending",
- "requested_actions": [
- "string"
], - "requested_resources": [
- "string"
], - "reason": "string",
- "context": { },
- "resolution": {
- "decision": "approved",
- "resolved_by": "string",
- "resolved_at": "2019-08-24T14:15:22Z",
- "reason": "string",
- "conditions": { }
}, - "auto_approved": true,
- "policy_id": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z"
}
], - "next_cursor": "string",
- "total_count": 0
}| name required | string Human-readable policy name |
| description | string |
required | Array of objects (ConsentPolicyRule) |
| priority | integer Higher priority policies are evaluated first (default 0) |
| enabled | boolean Default: true |
{- "name": "string",
- "description": "string",
- "rules": [
- {
- "effect": "auto_approve",
- "agent_ids": [
- "string"
], - "actions": [
- "string"
], - "resources": [
- "string"
], - "max_amount": 0,
- "time_window": {
- "start": "string",
- "end": "string",
- "days": [
- "mon"
]
}
}
], - "priority": 0,
- "enabled": true
}{- "policy_id": "string",
- "tenant_id": "string",
- "name": "string",
- "description": "string",
- "rules": [
- {
- "effect": "auto_approve",
- "agent_ids": [
- "string"
], - "actions": [
- "string"
], - "resources": [
- "string"
], - "max_amount": 0,
- "time_window": {
- "start": "string",
- "end": "string",
- "days": [
- "mon"
]
}
}
], - "priority": 0,
- "enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| limit | integer Default: 20 |
| cursor | string |
{- "items": [
- {
- "policy_id": "string",
- "tenant_id": "string",
- "name": "string",
- "description": "string",
- "rules": [
- {
- "effect": "auto_approve",
- "agent_ids": [
- "string"
], - "actions": [
- "string"
], - "resources": [
- "string"
], - "max_amount": 0,
- "time_window": {
- "start": "string",
- "end": "string",
- "days": [
- "mon"
]
}
}
], - "priority": 0,
- "enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "next_cursor": "string",
- "total_count": 0
}| id required | string |
{- "policy_id": "string",
- "tenant_id": "string",
- "name": "string",
- "description": "string",
- "rules": [
- {
- "effect": "auto_approve",
- "agent_ids": [
- "string"
], - "actions": [
- "string"
], - "resources": [
- "string"
], - "max_amount": 0,
- "time_window": {
- "start": "string",
- "end": "string",
- "days": [
- "mon"
]
}
}
], - "priority": 0,
- "enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| id required | string |
| name | string |
| description | string |
Array of objects (ConsentPolicyRule) | |
| priority | integer |
| enabled | boolean |
{- "name": "string",
- "description": "string",
- "rules": [
- {
- "effect": "auto_approve",
- "agent_ids": [
- "string"
], - "actions": [
- "string"
], - "resources": [
- "string"
], - "max_amount": 0,
- "time_window": {
- "start": "string",
- "end": "string",
- "days": [
- "mon"
]
}
}
], - "priority": 0,
- "enabled": true
}{- "policy_id": "string",
- "tenant_id": "string",
- "name": "string",
- "description": "string",
- "rules": [
- {
- "effect": "auto_approve",
- "agent_ids": [
- "string"
], - "actions": [
- "string"
], - "resources": [
- "string"
], - "max_amount": 0,
- "time_window": {
- "start": "string",
- "end": "string",
- "days": [
- "mon"
]
}
}
], - "priority": 0,
- "enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}@experimental Aggregates drift session data across all mandates to produce per-agent summaries including average/max drift scores, session counts, and last activity timestamps.
[- {
- "delegate_subject_id": "string",
- "display_name": "string",
- "mandate_count": 0,
- "avg_drift_score": 0.1,
- "max_drift_score": 0.1,
- "sessions_with_drift": 0,
- "total_sessions": 0,
- "last_activity": "2019-08-24T14:15:22Z"
}
]@experimental Queries the events table for DRIFT_DETECTED and DRIFT_RESOLVED events, enriched with the drift score from the event details.
| limit | integer [ 1 .. 100 ] Default: 20 Maximum number of events to return. |
[- {
- "event_id": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "mandate_id": "string",
- "delegate_subject_id": "string",
- "action": "DRIFT_DETECTED",
- "drift_score": {
- "semantic_distance": 0.1,
- "sequence_deviation": 0.1,
- "frequency_anomaly": 0.1,
- "scope_expansion": 0.1,
- "aggregate": 0.1,
- "drift_detected": true
}
}
]@experimental Queries the drift sessions table to retrieve all recent session windows for a given delegate, enriched with computed drift scores and mandate context.
| delegateId required | string The delegate subject ID. |
| hours | integer [ 1 .. 168 ] Default: 24 Lookback window in hours. |
[- {
- "mandate_id": "string",
- "delegate_subject_id": "string",
- "window_start": "2019-08-24T14:15:22Z",
- "window_end": "2019-08-24T14:15:22Z",
- "action_count": 0,
- "drift_score": {
- "semantic_distance": 0.1,
- "sequence_deviation": 0.1,
- "frequency_anomaly": 0.1,
- "scope_expansion": 0.1,
- "aggregate": 0.1,
- "drift_detected": true
}, - "intent_purpose": "string"
}
]Creates a new OpenID4VP session for EUDI Wallet identity verification. Returns a QR code URI (cross-device) and deep link URI (same-device) that the user scans/opens with their EUDI Wallet.
| presentation_definition_id | string Default: "mandaitor-pid-standard" Enum: "mandaitor-pid-minimal" "mandaitor-pid-standard" "mandaitor-pid-delegation" ID of the presentation definition to use |
{- "presentation_definition_id": "mandaitor-pid-minimal"
}{- "session_id": "eudi_01HXYZ...",
- "status": "PENDING",
- "qr_code_uri": "string",
- "deep_link_uri": "string",
- "expires_at": "2019-08-24T14:15:22Z"
}Polls the status of an EUDI Wallet verification session. Returns the resolved identity when the session is completed.
| sessionId required | string |
{- "session_id": "string",
- "status": "PENDING",
- "created_at": "2019-08-24T14:15:22Z",
- "presentation_definition_id": "string",
- "resolved_identity": {
- "subject_id": "eudi:DE/1234567890abcdef",
- "subject_type": "NATURAL_PERSON",
- "provider": "EUDI_WALLET",
- "display_name": "string",
- "assurance_level": "HIGH",
- "eidas_attributes": {
- "unique_id": "string",
- "family_name": "string",
- "given_name": "string",
- "birth_date": "2019-08-24",
- "nationality": "string",
- "pid_issuer": "string",
- "issuing_country": "string",
- "assurance_level": "LOW"
}
}, - "verified_at": "2019-08-24T14:15:22Z",
- "errors": [
- "string"
]
}Receives the VP Token from the EUDI Wallet via direct_post response mode. This endpoint is called by the wallet after user consent. No authentication required as the wallet POSTs directly.
| sessionId required | string |
| vp_token required | string The VP Token (SD-JWT VC compact serialization) |
| presentation_submission | object DIF Presentation Submission mapping |
{- "vp_token": "string",
- "presentation_submission": { }
}{- "status": "COMPLETED",
- "session_id": "string"
}Serves the signed JWT Authorization Request Object that the EUDI Wallet fetches after scanning the QR code. Returns the JWT directly with content type application/oauth-authz-req+jwt.
| requestId required | string |
{- "error": "BAD_REQUEST",
- "message": "principal and delegate are required"
}Returns a paginated list of audit events for a specific mandate. Events form an immutable, hash-chained audit trail.
| id required | string Example: mdt_01HXYZ... |
| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string Base64url-encoded pagination cursor |
{- "items": [
- {
- "event_id": "string",
- "tenant_id": "string",
- "mandate_id": "string",
- "event_type": "MANDATE_CREATED",
- "timestamp": "2019-08-24T14:15:22Z",
- "actor": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "details": { },
- "previous_event_hash": "string",
- "event_hash": "string",
- "kms_signature": "string",
- "hash_algorithm": "SHA_256",
- "signing_algorithm": "RSASSA_PSS_SHA_256"
}
], - "next_cursor": "string"
}Queries all audit events for the authenticated tenant, filtered by mandate_id. Supports optional event_type filtering and cursor-based pagination.
| mandate_id required | string Mandate ID to filter events by |
| event_type | string Enum: "MANDATE_CREATED" "MANDATE_SUSPENDED" "MANDATE_REACTIVATED" "MANDATE_REVOKED" "VERIFICATION_ALLOWED" "VERIFICATION_DENIED" "ESCALATION_TRIGGERED" |
| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string Base64url-encoded pagination cursor |
{- "items": [
- {
- "event_id": "string",
- "tenant_id": "string",
- "mandate_id": "string",
- "event_type": "MANDATE_CREATED",
- "timestamp": "2019-08-24T14:15:22Z",
- "actor": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "details": { },
- "previous_event_hash": "string",
- "event_hash": "string",
- "kms_signature": "string",
- "hash_algorithm": "SHA_256",
- "signing_algorithm": "RSASSA_PSS_SHA_256"
}
], - "next_cursor": "string"
}Retrieves a single audit event by its ID. Requires the mandate_id query parameter to locate the event in the partition.
| id required | string Example: evt_01HXYZ... |
| mandate_id required | string Mandate ID the event belongs to |
{- "event_id": "string",
- "tenant_id": "string",
- "mandate_id": "string",
- "event_type": "MANDATE_CREATED",
- "timestamp": "2019-08-24T14:15:22Z",
- "actor": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "details": { },
- "previous_event_hash": "string",
- "event_hash": "string",
- "kms_signature": "string",
- "hash_algorithm": "SHA_256",
- "signing_algorithm": "RSASSA_PSS_SHA_256"
}Tenant-scoped audit feed used by the dashboard Overview / Recent
Activity. Returns events in descending timestamp order across all
of the tenant's mandates. For a per-mandate timeline use
GET /events?mandate_id=… instead. The tenant path parameter
must match the authenticated caller. Requires Cognito JWT.
| id required | string |
| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string Opaque base64url cursor from a previous response's |
| event_type | string Optional filter on event_type (applied after the tenant-scoped query). |
{- "items": [
- {
- "event_id": "string",
- "event_type": "string",
- "mandate_id": "string",
- "tenant_id": "string",
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "next_cursor": "string"
}Exports a tenant-scoped audit event slice in descending timestamp order
for SIEM, GRC, and offline audit tooling. The tenant path parameter must
match the authenticated caller unless the caller is a platform admin.
Requires the events:export permission, which is granted to tenant
administrators and tenant auditors.
| id required | string |
| limit | integer [ 1 .. 500 ] Default: 100 Maximum number of audit events to include in this export page. |
| cursor | string Opaque base64url cursor from a previous response's |
| event_type | string Optional filter on event_type for SIEM-specific routing or replay windows. |
| from_timestamp | string <date-time> Inclusive lower bound for the audit-event timestamp sort key. |
| to_timestamp | string <date-time> Inclusive upper bound for the audit-event timestamp sort key. |
{- "export_id": "audexp_dG50X2FjbWU6MjAyNi0wNS0xOVQxMjozMDowMFowMDBa",
- "tenant_id": "string",
- "generated_at": "2019-08-24T14:15:22Z",
- "event_count": 0,
- "items": [
- {
- "event_id": "string",
- "tenant_id": "string",
- "mandate_id": "string",
- "event_type": "MANDATE_CREATED",
- "timestamp": "2019-08-24T14:15:22Z",
- "actor": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "details": { },
- "previous_event_hash": "string",
- "event_hash": "string",
- "kms_signature": "string",
- "hash_algorithm": "SHA_256",
- "signing_algorithm": "RSASSA_PSS_SHA_256"
}
], - "next_cursor": "string"
}Exports a comprehensive, court-ready evidence pack for a mandate containing:
EVIDENCE_PACK_EXPORTED audit event recorded for the export operationThe case_log_hash is a deterministic SHA-256 digest computed over the
canonical JSON representation of the event chain, enabling tamper detection.
The export_manifest binds the mandate snapshot, event chain, proof tokens,
and export envelope to recomputable digests so offline reviewers can detect
tampering in the export artifact.
The schema_version field allows forward-compatible evolution of the pack format.
| id required | string Example: mdt_01HXYZ... |
| event_id | string Scope the evidence pack to a specific verification event |
{- "schema_version": "1.2.0",
- "export_timestamp": "2019-08-24T14:15:22Z",
- "tenant_id": "string",
- "mandate_id": "string",
- "mandate_snapshot": { },
- "event_chain": [
- {
- "event_id": "string",
- "tenant_id": "string",
- "mandate_id": "string",
- "event_type": "MANDATE_CREATED",
- "timestamp": "2019-08-24T14:15:22Z",
- "actor": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "details": { },
- "previous_event_hash": "string",
- "event_hash": "string",
- "kms_signature": "string",
- "hash_algorithm": "SHA_256",
- "signing_algorithm": "RSASSA_PSS_SHA_256"
}
], - "event_count": 0,
- "case_log_hash": "string",
- "chain_integrity": {
- "first_event_hash": "string",
- "last_event_hash": "string",
- "genesis_verified": true
}, - "issuer": {
- "did": "did:web:api.mandaitor.io",
}, - "proof_tokens": [
- "string"
], - "crypto_metadata": {
- "hash_algorithm": "SHA_256",
- "signing_algorithm": "RSASSA_PSS_SHA_256",
- "case_log_hash_algorithm": "SHA_256"
}, - "export_manifest": {
- "export_id": "mandate_m_123:2026-05-19T12:00:00.000Z",
- "generated_at": "2019-08-24T14:15:22Z",
- "generated_by": {
- "subject": "string",
- "tenant_id": "string",
- "auth_method": "string",
- "roles": [
- "string"
], - "permissions": [
- "string"
]
}, - "coverage": {
- "tenant_id": "string",
- "mandate_id": "string",
- "schema_version": "1.2.0",
- "event_count": 0,
- "event_id_filter": "string"
}, - "digests": {
- "mandate_snapshot_hash": "string",
- "event_chain_hash": "string",
- "proof_tokens_hash": "string",
- "manifest_hash": "string"
}, - "hash_algorithm": "SHA_256"
}, - "metadata": {
- "mandate_created_at": "2019-08-24T14:15:22Z",
- "mandate_status": "string",
- "export_requested_by": "string",
- "event_id_filter": "string"
}
}| id required | string |
{- "tenant_id": "string",
- "identity_providers": {
- "enabled_providers": [
- "API_KEY"
], - "auth0": {
- "domain": "your-tenant.auth0.com",
- "audience": "string",
- "client_id": "string"
}, - "entra": {
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "client_id": "5b3fa7ba-57d3-4017-a65b-d57dcd2db643"
}, - "eudi": {
- "rp_id": "string",
- "presentation_policies": [
- "string"
]
}, - "google": {
- "client_id": "xxxx.apps.googleusercontent.com",
- "hosted_domain": "company.com"
}, - "aws_iam_idc": {
- "audience": "string"
}, - "generic_oidc": {
- "name": "Keycloak",
- "audience": "mandaitor-client",
- "subject_prefix": "keycloak"
}
}
}| id required | string |
| enabled_providers required | Array of strings Items Enum: "API_KEY" "COGNITO" "EUDI_WALLET" "AUTH0" "OKTA" "ENTRA_ID" "GOOGLE" "AWS_IAM_IDC" "GENERIC_OIDC" |
object | |
object | |
object | |
object | |
object | |
object | |
object |
{- "enabled_providers": [
- "API_KEY"
], - "auth0": {
- "domain": "your-tenant.auth0.com",
- "audience": "string",
- "client_id": "string"
}, - "entra": {
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "client_id": "5b3fa7ba-57d3-4017-a65b-d57dcd2db643"
}, - "eudi": {
- "rp_id": "string",
- "presentation_policies": [
- "string"
]
}, - "google": {
- "client_id": "xxxx.apps.googleusercontent.com",
- "hosted_domain": "company.com"
}, - "aws_iam_idc": {
- "audience": "string"
}, - "generic_oidc": {
- "name": "Keycloak",
- "audience": "mandaitor-client",
- "subject_prefix": "keycloak"
}
}{- "tenant_id": "string",
- "identity_providers": {
- "enabled_providers": [
- "API_KEY"
], - "auth0": {
- "domain": "your-tenant.auth0.com",
- "audience": "string",
- "client_id": "string"
}, - "entra": {
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "client_id": "5b3fa7ba-57d3-4017-a65b-d57dcd2db643"
}, - "eudi": {
- "rp_id": "string",
- "presentation_policies": [
- "string"
]
}, - "google": {
- "client_id": "xxxx.apps.googleusercontent.com",
- "hosted_domain": "company.com"
}, - "aws_iam_idc": {
- "audience": "string"
}, - "generic_oidc": {
- "name": "Keycloak",
- "audience": "mandaitor-client",
- "subject_prefix": "keycloak"
}
}
}Exchange a user's access token for a scoped delegation token. Implements RFC 8693 Token Exchange for On-Behalf-Of (OBO) flows where AI agents act on behalf of authenticated users.
| subject_token required | string The original user's access token |
| subject_token_type | string Default: "urn:ietf:params:oauth:token-type:access_token" |
| mandate_id required | string Mandate ID that authorizes the delegation |
| scope | string |
| audience | string |
{- "subject_token": "string",
- "subject_token_type": "urn:ietf:params:oauth:token-type:access_token",
- "mandate_id": "string",
- "scope": "string",
- "audience": "string"
}{- "access_token": "string",
- "token_type": "Bearer",
- "expires_in": 3600,
- "scope": "string",
- "issued_token_type": "string",
- "delegation": {
- "mandate_id": "string",
- "principal": "string",
- "delegate": "string",
- "provider": "string"
}
}Returns the persisted role-assignment policy rows for a tenant. Each
assignment binds a canonical subject ID to tenant-scoped roles and
derived effective permissions. The tenant path parameter must match the
authenticated caller unless the caller is a platform administrator.
Requires tenant:read permission.
| id required | string |
{- "tenant_id": "string",
- "assignments": [
- {
- "tenant_id": "string",
- "subject_id": "eudi:DE/1234567890abcdef",
- "subject_type": "NATURAL_PERSON",
- "display_name": "Amina Bauer",
- "email": "amina.bauer@example.com",
- "roles": [
- "platform_admin"
], - "permissions": [
- "*"
], - "status": "ACTIVE",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "assigned_by": "eudi:DE/admin-subject",
- "revoked_at": "2019-08-24T14:15:22Z",
- "revoked_by": "string"
}
]
}Creates or replaces the tenant-scoped role assignment for the canonical
subject ID in the path. platform_admin and platform:* grants are
rejected because tenant policy can only delegate tenant-scoped access.
Role-derived permissions and any explicit tenant permissions are stored
as the assignment's effective permission set. Emits an immutable
TENANT_ROLE_ASSIGNED audit event. Requires tenant:write permission.
| id required | string |
| subjectId required | string [ 3 .. 256 ] characters ^[A-Za-z0-9._:@/-]{3,256}$ Example: eudi:DE/1234567890abcdef URL-encoded canonical subject ID resolved by the authorizer. |
| subject_type | string (TenantSubjectType) Enum: "NATURAL_PERSON" "LEGAL_ENTITY" "SERVICE" "AGENT" |
| display_name | string [ 1 .. 200 ] characters |
string <email> <= 320 characters | |
| roles required | Array of strings (RbacRole) [ 1 .. 5 ] items Items Enum: "platform_admin" "tenant_admin" "tenant_operator" "tenant_auditor" "tenant_viewer" "service" Tenant-assignable RBAC roles. |
| permissions | Array of strings (RbacPermission) <= 30 items Items Enum: "*" "platform:admin" "platform:onboarding:read" "platform:onboarding:write" "platform:tenants:read" "platform:tenants:write" "tenant:read" "tenant:write" "tenant:billing:read" "tenant:usage:read" "tenant:audit:read" "tenant:api-keys:read" "tenant:api-keys:write" "mandates:read" "mandates:write" "verify:execute" "events:read" "events:export" "evidence:read" "evidence:write" Optional explicit tenant-scoped permissions merged with role-derived grants. Platform permissions are rejected. |
{- "subject_type": "NATURAL_PERSON",
- "display_name": "Amina Bauer",
- "email": "amina.bauer@example.com",
- "roles": [
- "tenant_auditor",
- "tenant_viewer"
], - "permissions": [
- "events:read",
- "evidence:read"
]
}{- "tenant_id": "string",
- "assignment": {
- "tenant_id": "string",
- "subject_id": "eudi:DE/1234567890abcdef",
- "subject_type": "NATURAL_PERSON",
- "display_name": "Amina Bauer",
- "email": "amina.bauer@example.com",
- "roles": [
- "platform_admin"
], - "permissions": [
- "*"
], - "status": "ACTIVE",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "assigned_by": "eudi:DE/admin-subject",
- "revoked_at": "2019-08-24T14:15:22Z",
- "revoked_by": "string"
}
}Revokes the tenant-scoped role assignment for the canonical subject ID
by deleting the persisted policy row. The next authorizer evaluation no
longer enriches the subject with those tenant roles or permissions.
Emits an immutable TENANT_ROLE_REVOKED audit event. The operation is
idempotent. Requires tenant:write permission.
| id required | string |
| subjectId required | string [ 3 .. 256 ] characters ^[A-Za-z0-9._:@/-]{3,256}$ Example: oidc:okta:00u123456789 URL-encoded canonical subject ID resolved by the authorizer. |
{- "error": "BAD_REQUEST",
- "message": "principal and delegate are required"
}Creates a new delegation mandate between a principal and a delegate. The mandate defines the scope of delegated authority, optional constraints, and an expiration date. A KMS-signed audit event is emitted on success.
required | object (Subject) Represents an entity (human, AI agent, service, or organization) that participates in a mandate as either principal or delegate. |
required | object (Subject) Represents an entity (human, AI agent, service, or organization) that participates in a mandate as either principal or delegate. |
required | object (Scope) Defines the actions, resources, and effect (ALLOW/DENY) that a mandate authorizes, with optional conditions. |
object (Constraints) Optional restrictions on mandate usage including time windows, geographic fencing, MFA requirements, IP whitelisting, and escalation rules. | |
| metadata | object |
| expires_at | string <date-time> |
| taxonomy_id | string Taxonomy identifier to validate the mandate scope against (e.g., "construction", "realestate", "venture"). |
| taxonomy_version | string^[a-z][a-z0-9-]*(@\d+\.\d+\.\d+(-[a-z0-9.]+)?... Versioned taxonomy reference. Accepts either a plain ID (uses latest version)
or |
| require_approval | boolean Default: false When true, the mandate starts in PENDING_APPROVAL status and requires explicit approval before becoming ACTIVE. |
object (MandateIntent) @experimental Intent declaration for drift detection. Allows the principal to express the intended purpose and expected behavioral clusters for a mandate. Used by the drift detection engine to compute semantic distance scores. | |
object (VUIRequest) @experimental Verifiable User Instruction input. Captures the human's original instruction at mandate creation time. The instruction text will be encrypted at rest and its SHA-256 digest embedded into the Proof-of-Mandate Verifiable Credential. |
{- "principal": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "delegate": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "scope": {
- "actions": [
- "construction.validation.approve"
], - "resources": [
- "monco:project:*/zone:*/installation:*"
], - "effect": "ALLOW",
- "conditions": { }
}, - "constraints": {
- "max_uses": 0,
- "time_window": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "geo_fence": {
- "allowed_regions": [
- "string"
]
}, - "require_mfa": true,
- "ip_whitelist": [
- "string"
], - "escalation_rules": {
- "deviation_above_percent": 0,
- "escalate_to": "string",
- "escalation_method": "string"
}
}, - "metadata": { },
- "expires_at": "2019-08-24T14:15:22Z",
- "taxonomy_id": "construction",
- "taxonomy_version": "construction@2.0.0",
- "require_approval": false,
- "intent": {
- "purpose": "Automated structural validation of Zone EG installations",
- "expected_clusters": [
- "validation",
- "inspection"
], - "drift_threshold": 0.7
}, - "vui": {
- "instruction_text": "Bestelle Büromaterial bis 500€",
- "instruction_channel": "chat",
- "principal_confirmation": {
- "method": "explicit_approval",
- "timestamp": "2019-08-24T14:15:22Z",
- "evidence_ref": "string"
}, - "constraints_derived": {
- "max_amount": 0,
- "allowed_actions": [
- "string"
], - "time_bound": "2019-08-24T14:15:22Z"
}
}
}{- "mandate_id": "mdt_01HXYZ...",
- "tenant_id": "string",
- "version": 0,
- "status": "DRAFT",
- "principal": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "delegate": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "scope": {
- "actions": [
- "construction.validation.approve"
], - "resources": [
- "monco:project:*/zone:*/installation:*"
], - "effect": "ALLOW",
- "conditions": { }
}, - "constraints": {
- "max_uses": 0,
- "time_window": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "geo_fence": {
- "allowed_regions": [
- "string"
]
}, - "require_mfa": true,
- "ip_whitelist": [
- "string"
], - "escalation_rules": {
- "deviation_above_percent": 0,
- "escalate_to": "string",
- "escalation_method": "string"
}
}, - "proof": {
- "creation_method": "API_KEY",
- "issuer": "string",
- "created_by": "string",
- "mandate_hash": "string",
- "signature": "string",
- "eidas_loa": "string"
}, - "metadata": { },
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "vui": {
- "instruction_text": "string",
- "instruction_hash": "a1b2c3d4e5f6...",
- "instruction_timestamp": "2019-08-24T14:15:22Z",
- "instruction_channel": "chat",
- "principal_confirmation": {
- "method": "explicit_approval",
- "timestamp": "2019-08-24T14:15:22Z",
- "evidence_ref": "string"
}, - "constraints_derived": {
- "max_amount": 0,
- "allowed_actions": [
- "string"
], - "time_bound": "2019-08-24T14:15:22Z"
}
}
}Returns a paginated list of mandates for the authenticated tenant. Supports optional filtering by status and cursor-based pagination.
| status | string Enum: "DRAFT" "ACTIVE" "SUSPENDED" "REVOKED" "EXPIRED" |
| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string Base64url-encoded pagination cursor |
{- "items": [
- {
- "mandate_id": "mdt_01HXYZ...",
- "tenant_id": "string",
- "version": 0,
- "status": "DRAFT",
- "principal": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "delegate": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "scope": {
- "actions": [
- "construction.validation.approve"
], - "resources": [
- "monco:project:*/zone:*/installation:*"
], - "effect": "ALLOW",
- "conditions": { }
}, - "constraints": {
- "max_uses": 0,
- "time_window": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "geo_fence": {
- "allowed_regions": [
- "string"
]
}, - "require_mfa": true,
- "ip_whitelist": [
- "string"
], - "escalation_rules": {
- "deviation_above_percent": 0,
- "escalate_to": "string",
- "escalation_method": "string"
}
}, - "proof": {
- "creation_method": "API_KEY",
- "issuer": "string",
- "created_by": "string",
- "mandate_hash": "string",
- "signature": "string",
- "eidas_loa": "string"
}, - "metadata": { },
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "vui": {
- "instruction_text": "string",
- "instruction_hash": "a1b2c3d4e5f6...",
- "instruction_timestamp": "2019-08-24T14:15:22Z",
- "instruction_channel": "chat",
- "principal_confirmation": {
- "method": "explicit_approval",
- "timestamp": "2019-08-24T14:15:22Z",
- "evidence_ref": "string"
}, - "constraints_derived": {
- "max_amount": 0,
- "allowed_actions": [
- "string"
], - "time_bound": "2019-08-24T14:15:22Z"
}
}
}
], - "next_cursor": "string"
}Retrieves a single mandate by its ID. Returns the full mandate record including principal, delegate, scope, constraints, and proof metadata.
| id required | string Example: mdt_01HXYZ... |
{- "mandate_id": "mdt_01HXYZ...",
- "tenant_id": "string",
- "version": 0,
- "status": "DRAFT",
- "principal": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "delegate": {
- "type": "HUMAN",
- "subject_id": "monco:agent:validate-agent-v2",
- "display_name": "string",
- "identity_provider": "string",
- "identity_token_hash": "string"
}, - "scope": {
- "actions": [
- "construction.validation.approve"
], - "resources": [
- "monco:project:*/zone:*/installation:*"
], - "effect": "ALLOW",
- "conditions": { }
}, - "constraints": {
- "max_uses": 0,
- "time_window": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "geo_fence": {
- "allowed_regions": [
- "string"
]
}, - "require_mfa": true,
- "ip_whitelist": [
- "string"
], - "escalation_rules": {
- "deviation_above_percent": 0,
- "escalate_to": "string",
- "escalation_method": "string"
}
}, - "proof": {
- "creation_method": "API_KEY",
- "issuer": "string",
- "created_by": "string",
- "mandate_hash": "string",
- "signature": "string",
- "eidas_loa": "string"
}, - "metadata": { },
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "vui": {
- "instruction_text": "string",
- "instruction_hash": "a1b2c3d4e5f6...",
- "instruction_timestamp": "2019-08-24T14:15:22Z",
- "instruction_channel": "chat",
- "principal_confirmation": {
- "method": "explicit_approval",
- "timestamp": "2019-08-24T14:15:22Z",
- "evidence_ref": "string"
}, - "constraints_derived": {
- "max_amount": 0,
- "allowed_actions": [
- "string"
], - "time_bound": "2019-08-24T14:15:22Z"
}
}
}Permanently revokes a mandate. Only active or suspended mandates can be revoked. An optional reason can be provided. A KMS-signed audit event is emitted.
| id required | string Example: mdt_01HXYZ... |
| reason | string |
{- "reason": "Contract terminated"
}{- "mandate_id": "string",
- "status": "string",
- "updated_at": "2019-08-24T14:15:22Z"
}Temporarily suspends an active mandate. Suspended mandates can be reactivated later. An optional reason can be provided.
| id required | string Example: mdt_01HXYZ... |
| reason | string |
{- "reason": "Under review"
}{- "mandate_id": "string",
- "status": "string",
- "updated_at": "2019-08-24T14:15:22Z"
}Reactivates a previously suspended mandate, returning it to ACTIVE status. Only mandates in SUSPENDED state can be reactivated.
| id required | string Example: mdt_01HXYZ... |
{- "mandate_id": "string",
- "status": "string",
- "updated_at": "2019-08-24T14:15:22Z"
}Approves a mandate that is in PENDING_APPROVAL state, transitioning it
to ACTIVE. Only mandates created with require_approval: true enter
this state. An audit event (MANDATE_APPROVED) is emitted.
| id required | string Example: mdt_01HXYZ... |
| reason | string Optional reason/notes for the approval |
{- "reason": "string"
}{- "mandate_id": "string",
- "status": "string",
- "updated_at": "2019-08-24T14:15:22Z"
}Rejects a mandate that is in PENDING_APPROVAL state, transitioning it to REVOKED. An audit event (MANDATE_REJECTED) is emitted.
| id required | string Example: mdt_01HXYZ... |
| reason | string Reason for rejection |
{- "reason": "string"
}{- "mandate_id": "string",
- "status": "string",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns the decrypted original user instruction that was provided when the mandate was created. Requires authentication and tenant ownership. An INSTRUCTION_REVEALED audit event is emitted on each access.
Only available for mandates that were created with a Verifiable User Instruction (VUI). Returns 404 if no instruction exists.
| id required | string Example: mdt_01HXYZ... |
{- "instruction_text": "string",
- "instruction_hash": "string",
- "instruction_timestamp": "2019-08-24T14:15:22Z",
- "instruction_channel": "chat",
- "principal_confirmation": {
- "method": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "evidence_ref": "string"
}, - "mandate_id": "string"
}Returns the OAuth 2.0 Authorization Server Metadata for the MCP authorization endpoint. Used by MCP clients to discover token and authorization endpoints.
{- "issuer": "string",
- "token_endpoint": "string",
- "authorization_endpoint": "string",
- "grant_types_supported": [
- "string"
], - "token_endpoint_auth_methods_supported": [
- "string"
], - "scopes_supported": [
- "string"
], - "mcp_tool_namespaces": [
- "string"
], - "mandate_enforcement": "strict"
}OAuth 2.0 client_credentials grant for MCP agents. The agent presents a signed JWT assertion and receives a scoped access token bound to its mandates.
| grant_type required | string Value: "client_credentials" |
| client_id required | string Agent DID |
| client_assertion_type required | string Value: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer" |
| client_assertion required | string Signed JWT assertion |
| scope | string Space-separated mandate scopes |
{- "grant_type": "client_credentials",
- "client_id": "string",
- "client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
- "client_assertion": "string",
- "scope": "string"
}{- "access_token": "string",
- "token_type": "Bearer",
- "expires_in": 0,
- "scope": "string"
}Evaluates whether a tool call is authorized by the agent's bound mandates. Returns ALLOW, DENY, or ESCALATE with constraint details.
| tool_name required | string Fully qualified MCP tool name |
required | object Tool call arguments |
object Additional context for authorization |
{- "tool_name": "string",
- "arguments": { },
- "context": { }
}{- "decision": "ALLOW",
- "reason": "string",
- "pom_token": "string",
- "approval_request_id": "string",
- "applied_constraints": {
- "max_amount": 0,
- "currency": "string",
- "time_window": "string",
- "rate_limit_remaining": 0
}, - "drift_score": 0.1
}| id required | string |
{- "session_id": "string",
- "tenant_id": "string",
- "agent_id": "string",
- "agent_did": "string",
- "mandate_ids": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "last_active_at": "2019-08-24T14:15:22Z",
- "call_count": 0
}Submits a new tenant access request. No authentication required. The request enters PENDING state and must be approved by an admin.
| company_name required | string |
| contact_name | string |
| contact_email required | string <email> |
| use_case required | string |
| industry | string Enum: "construction" "real_estate" "venture_capital" "other" |
| website | string <uri> |
| lead_source | string Marketing or referral source associated with the beta request. |
| beta_track | string Closed-beta routing segment used for the request. |
| asset | string Specific public asset or CTA entry point that produced the request. |
{- "company_name": "monco GmbH",
- "contact_name": "Max Mustermann",
- "contact_email": "max@monco.ai",
- "use_case": "AI agent delegation for construction validation",
- "industry": "construction",
- "lead_source": "trust-site",
- "beta_track": "construction",
- "asset": "home-hero"
}{- "request_id": "string",
- "status": "PENDING",
- "message": "string"
}Returns metadata for every API key owned by the tenant. The raw key is
only available at creation time via POST /tenants/{id}/api-keys; this
endpoint never returns the raw key or its hash. The tenant is taken
from the authenticated caller — the path parameter must match, or the
request is rejected with 403. Requires Cognito JWT.
| id required | string |
{- "items": [
- {
- "key_id": "key_9c6d2e4f3a1b0d7e",
- "name": "production-key",
- "environment": "live",
- "created_at": "2019-08-24T14:15:22Z",
- "status": "ACTIVE",
- "last_four": "1dce",
- "scopes": [
- "mandates:read",
- "mandates:write",
- "verify"
]
}
]
}Generates a new API key for a tenant. The raw key is returned only once in the response and cannot be retrieved again. Requires Cognito JWT.
| id required | string |
| name | string |
| environment | string Default: "live" Enum: "live" "test" |
| scopes | Array of strings (ApiScope) Items Enum: "mandates:read" "mandates:write" "verify" Scope list the issued key will be allowed to exercise.
Omitted or null means "all canonical scopes" — equivalent
to passing |
{- "name": "production-key",
- "environment": "live",
- "scopes": [
- "mandates:read",
- "verify"
]
}{- "key_id": "string",
- "api_key": "string",
- "name": "string",
- "environment": "live",
- "scopes": [
- "mandates:read"
], - "created_at": "2019-08-24T14:15:22Z"
}Flips the per-key row to status: "REVOKED". The authorizer reads
per-key rows directly, so the key stops authenticating on the next
request — other ACTIVE keys for the same tenant keep working.
Idempotent for already-revoked keys. The tenant path parameter must
match the authenticated caller. Requires Cognito JWT.
| id required | string |
| keyId required | string |
{- "error": "BAD_REQUEST",
- "message": "principal and delegate are required"
}Returns service health status. No sensitive data is exposed. Suitable for monitoring, load balancers, and Trust Center embedding.
{- "status": "ok",
- "timestamp": "2019-08-24T14:15:22Z",
- "version": "1.2.3-beta.1",
- "stage": "prod"
}Returns the W3C DID Document for the Mandaitor issuer DID (did:web:api.mandaitor.io). Contains the public key used to verify Proof-of-Mandate SD-JWT VCs.
{- "@context": [
- "string"
], - "id": "did:web:api.mandaitor.io",
- "verificationMethod": [
- { }
], - "authentication": [
- "string"
], - "assertionMethod": [
- "string"
], - "service": [
- { }
]
}Returns machine-readable trust metadata including region, partition, issuer DID, data residency claims, and supported open standards. Unauthenticated and cache-friendly (5-minute client, 10-minute CDN).
{- "schema_version": "1.0.0",
- "region": "eusc-de-east-1",
- "partition": "aws-eusc",
- "issuer_did": "did:web:api.mandaitor.io",
- "data_residency": {
- "primary_region": "string",
- "partition": "string",
- "jurisdiction": "EU (European Sovereign Cloud)"
}, - "open_standards": [
- "string"
], - "build_version": "string",
- "stage": "string",
- "timestamp": "2019-08-24T14:15:22Z"
}Submits a new tenant access request. No authentication required. The request enters PENDING state and must be approved by an admin.
| company_name required | string |
| contact_name | string |
| contact_email required | string <email> |
| use_case required | string |
| industry | string Enum: "construction" "real_estate" "venture_capital" "other" |
| website | string <uri> |
| lead_source | string Marketing or referral source associated with the beta request. |
| beta_track | string Closed-beta routing segment used for the request. |
| asset | string Specific public asset or CTA entry point that produced the request. |
{- "company_name": "monco GmbH",
- "contact_name": "Max Mustermann",
- "contact_email": "max@monco.ai",
- "use_case": "AI agent delegation for construction validation",
- "industry": "construction",
- "lead_source": "trust-site",
- "beta_track": "construction",
- "asset": "home-hero"
}{- "request_id": "string",
- "status": "PENDING",
- "message": "string"
}Returns the public-safe widget configuration for embedding. No authentication required. Sensitive fields (secrets, internal IDs) are stripped from the response.
| widgetId required | string |
{- "widget_id": "string",
- "tenant_name": "string",
- "branding": { },
- "enabled_idps": [
- "string"
], - "taxonomy_libraries": [
- "string"
]
}| userId required | string |
{ }{- "error": "BAD_REQUEST",
- "message": "principal and delegate are required"
}| userId required | string |
{ }{- "error": "BAD_REQUEST",
- "message": "principal and delegate are required"
}Returns the current dashboard onboarding tour status for the authenticated tenant. Used by the guided tour overlay to determine whether to show the onboarding flow.
| id required | string |
{- "tenant_id": "string",
- "onboarding": {
- "completed": true,
- "skipped": true,
- "completed_steps": [
- "string"
], - "current_step": "string",
- "completed_at": "string",
- "skipped_at": "string",
- "started_at": "string"
}
}Updates the dashboard onboarding tour progress for the authenticated tenant. Supports marking steps as completed, advancing the current step, and completing or skipping the entire tour.
| id required | string |
| completed | boolean |
| skipped | boolean |
| completed_steps | Array of strings |
| current_step | string |
{- "completed": true,
- "skipped": true,
- "completed_steps": [
- "string"
], - "current_step": "string"
}{- "tenant_id": "string",
- "onboarding": {
- "completed": true,
- "skipped": true,
- "completed_steps": [
- "string"
], - "current_step": "string",
- "completed_at": "string",
- "skipped_at": "string",
- "started_at": "string"
}
}Performance-critical endpoint. Target: < 50ms p99 latency (without PoM), < 200ms p99 (with PoM). Returns ALLOW or DENY with optional escalation metadata and an optional Proof-of-Mandate Verifiable Credential.
| pom | string Value: "sd-jwt-vc" Request a Proof-of-Mandate Verifiable Credential in the response. The VC is an SD-JWT signed by the Mandaitor issuer DID. |
| drift | boolean Default: false @experimental Request drift detection signals in the response.
When |
| delegate_subject_id | string Canonical field. Subject ID of the delegate to verify. |
| agent_id | string Deprecated Deprecated legacy alias for |
| action required | string |
| resource required | string |
| context | object Additional context for constraint evaluation. When a mandate has
|
{- "delegate_subject_id": "monco:agent:validate-agent-v2",
- "agent_id": "monco:agent:validate-agent-v2",
- "action": "construction.validation.approve",
- "resource": "monco:project:proj_ABC123/zone:EG/installation:stk_42",
- "context": { }
}{- "decision": "ALLOW",
- "mandate_id": "string",
- "event_id": "string",
- "reason_codes": [
- "NO_MATCHING_MANDATE"
], - "constraints_remaining": { },
- "proof_of_mandate": {
- "compact": "eyJhbGciOiJQUzI1NiIsInR5cCI6InZjK3NkLWp3dCJ9.eyJ2Y3QiOiJQcm9vZk9mTWFuZGF0ZSJ9.sig~disc1~disc2~",
- "payload": {
- "vct": "ProofOfMandate",
- "decision": "ALLOW",
- "mandate_id": "string",
- "verification_event_id": "string",
- "verification_timestamp": "2019-08-24T14:15:22Z",
- "requested_action": "string",
- "requested_resource": "string",
- "delegate_subject_id": "string",
- "principal_subject_id": "string",
- "tenant_id": "string",
- "reason_codes": [
- "string"
], - "constraints_snapshot": { },
- "latency_ms": 0,
- "instruction_digest": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2",
- "iss": "did:web:api.mandaitor.io",
- "sub": "string",
- "iat": 0,
- "exp": 0,
- "_sd_alg": "sha-256"
}
}, - "proof_token": "string"
}Dashboard-only dry-run verify endpoint. Authenticated via Cognito JWT (dashboard session). The caller selects an API key by its key_id from a dropdown; the handler loads the key's metadata (scopes, status) and simulates the verify flow as if the request had come through that key. No raw API key is ever needed. Metering is intentionally skipped.
| id required | string |
| key_id required | string API key ID to simulate (from the dropdown) |
| action required | string The action being attempted |
| resource required | string The resource being accessed |
| delegate_subject_id | string The delegate attempting the action |
| agent_id | string Alternative to delegate_subject_id |
object Additional context for constraint evaluation | |
| request_pom | boolean Whether to include a Proof-of-Mandate VC |
{- "key_id": "string",
- "action": "string",
- "resource": "string",
- "delegate_subject_id": "string",
- "agent_id": "string",
- "context": { },
- "request_pom": true
}{- "decision": "ALLOW",
- "mandate_id": "string",
- "event_id": "string",
- "reason_codes": [
- "string"
], - "constraints_remaining": { },
- "proof_of_mandate": { },
- "proof_token": "string",
- "_playground": {
- "simulated_key": {
- "key_id": "string",
- "key_name": "string",
- "last_four": "string",
- "scopes": [
- "string"
], - "has_verify_scope": true
}, - "dry_run": true
}
}Generates a VI-spec compatible credential chain (L1 + L2) from an existing active mandate. The chain can be presented to external verifiers that implement the Verifiable Intent specification.
| id required | string Example: mdt_01HXYZ... |
| audience required | string Target verifier audience URI |
| nonce | string Optional nonce for replay protection |
| agent_public_key | object Agent's JWK public key for L2 credential |
| principal_public_key | object Principal's JWK public key for L1 credential |
| principal_key_id | string KMS key ID for principal signing |
{- "audience": "string",
- "nonce": "string",
- "agent_public_key": { },
- "principal_public_key": { },
- "principal_key_id": "string"
}{- "credential_chain": {
- "l1_credential": "string",
- "l2_credential": "string",
- "chain_id": "string",
- "spec_version": "1.0"
}, - "format": "vi-sd-jwt",
- "spec_version": "1.0"
}Retrieves the widget configuration for a tenant. Returns the latest version by default, or a specific version if the version query parameter is provided.
| id required | string |
{- "tenant_id": "string",
- "widget_id": "string",
- "identity_providers": [
- {
- "provider": "eidas_eudi",
- "enabled": true,
- "config": { }
}
], - "taxonomy_libraries": [
- "@mandaitor/taxonomy-construction"
], - "mandate_templates": [
- { }
], - "branding": {
- "primary_color": "string",
- "logo_url": "string",
- "company_name": "string"
}, - "approval_workflow": {
- "require_principal_approval": true,
- "require_admin_approval": true,
- "auto_approve_trusted_idps": true
}, - "updated_at": "2019-08-24T14:15:22Z"
}Updates the widget configuration for a tenant. Creates a new versioned record. IdP credentials are stored in AWS Secrets Manager.
| id required | string |
| identity_providers | Array of objects |
| taxonomy_libraries | Array of strings |
| mandate_templates | Array of objects |
| branding | object |
| approval_workflow | object |
| webhook_url | string <uri> |
{- "identity_providers": [
- { }
], - "taxonomy_libraries": [
- "string"
], - "mandate_templates": [
- { }
], - "branding": { },
- "approval_workflow": { },
}{- "tenant_id": "string",
- "widget_id": "string",
- "identity_providers": [
- {
- "provider": "eidas_eudi",
- "enabled": true,
- "config": { }
}
], - "taxonomy_libraries": [
- "@mandaitor/taxonomy-construction"
], - "mandate_templates": [
- { }
], - "branding": {
- "primary_color": "string",
- "logo_url": "string",
- "company_name": "string"
}, - "approval_workflow": {
- "require_principal_approval": true,
- "require_admin_approval": true,
- "auto_approve_trusted_idps": true
}, - "updated_at": "2019-08-24T14:15:22Z"
}Validates an Identity Provider configuration by attempting a client credentials flow against the specified provider (Entra ID, Auth0, Okta, or eIDAS).
Alias support: Accepts both provider (canonical) and idpType (legacy).
If both are present, provider takes precedence.
| id required | string |
| provider | string Enum: "eidas_eudi" "entra_id" "auth0" "okta" Canonical field. The IdP type to validate. |
| idpType | string Deprecated Deprecated legacy alias for |
| config required | object |
{- "provider": "eidas_eudi",
- "idpType": "string",
- "config": { }
}{- "results": {
- "property1": {
- "valid": true,
- "message": "string"
}, - "property2": {
- "valid": true,
- "message": "string"
}
}
}Returns a paginated list of all configuration versions for the tenant, sorted by version number descending (newest first). Each entry contains version metadata (not the full configuration body).
| id required | string |
| limit | integer <= 100 Default: 20 |
| cursor | string |
{- "versions": [
- {
- "configVersion": 0,
- "updatedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "status": "string",
- "widgetId": "string",
- "rollbackFrom": 0
}
], - "next_cursor": "string"
}Rolls back the widget configuration to a previous version by creating a new version that is a copy of the target version. This preserves the full version history for audit purposes — no versions are deleted.
The new version includes a rollbackFrom field indicating which version
it was copied from.
| id required | string |
| version required | integer >= 1 The version number to roll back to |
{- "version": 1
}{- "message": "string",
- "version": 0,
- "rollbackFrom": 0,
- "widgetId": "string"
}