spaps
Version:
Sweet Potato Authentication & Payment Service CLI - Docker Compose orchestrator for local Python/FastAPI SPAPS server with built-in admin middleware
9,036 lines • 211 kB
JSON
{
"name": "spaps",
"version": "0.9.0",
"description": "Auth + payments via SPAPS. Resolve local auth requirements from /health/local-mode.",
"base_url": "http://localhost:65535",
"auth": {
"local_mode": false,
"mode_source": "/health/local-mode",
"api_key_required": true,
"header": "X-API-Key",
"env": "SPAPS_API_KEY",
"status": "server_unreachable"
},
"tools": [
{
"name": "login",
"description": "Authenticate a user with email/password for a provisioned application. Send X-API-Key when local mode is disabled.",
"method": "POST",
"path": "/api/auth/login",
"parameters": {
"$ref": "#/components/schemas/LoginRequest"
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "TIGHT",
"publishable_scope": [
"auth"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/LoginResponse"
},
{
"$ref": "#/components/schemas/MfaRequiredResponse"
}
],
"title": "Response Login Api Auth Login Post"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "register",
"description": "Register a new user with email/password for a provisioned application.",
"method": "POST",
"path": "/api/auth/register",
"parameters": {
"$ref": "#/components/schemas/RegisterRequest"
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "MODERATE",
"publishable_scope": [
"auth"
],
"entitlement_key": null,
"responses": {
"201": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/RegisterResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"409": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "auth_methods",
"description": "Discover the public auth methods configured for this application before rendering sign-in UI.",
"method": "GET",
"path": "/api/auth/methods",
"parameters": {
"type": "object",
"properties": {}
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "RELAXED",
"publishable_scope": [
"auth"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/AuthMethodsResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "get_current_user",
"description": "Get the currently authenticated user. Uses the bearer token from a previous login.",
"method": "GET",
"path": "/api/auth/user",
"parameters": {
"type": "object",
"properties": {
"authorization": {
"type": "string",
"description": "Bearer <access_token>"
}
}
},
"auth": {
"auth_type": "user",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey",
"BearerJWT"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": true,
"optional": false
},
"roles": [
"user"
]
},
"rate_tier": "RELAXED",
"publishable_scope": [
"auth"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/GetUserResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "create_checkout_session",
"description": "Create a Stripe Checkout session against the configured SPAPS server.",
"method": "POST",
"path": "/api/stripe/checkout-sessions",
"parameters": {
"$ref": "#/components/schemas/CreateCheckoutSessionRequest"
},
"auth": {
"auth_type": "user",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey",
"BearerJWT"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": true,
"optional": false
},
"roles": [
"user"
]
},
"rate_tier": "TIGHT",
"publishable_scope": [
"stripe_consumer"
],
"entitlement_key": null,
"responses": {
"201": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/CheckoutSessionOut"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "list_products",
"description": "List products exposed by the SPAPS server.",
"method": "GET",
"path": "/api/stripe/products",
"parameters": {
"type": "object",
"properties": {
"active": {
"type": "boolean"
},
"limit": {
"type": "number"
}
}
},
"auth": {
"auth_type": "user",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey",
"BearerJWT"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": true,
"optional": false
},
"roles": [
"user"
]
},
"rate_tier": "RELAXED",
"publishable_scope": [
"stripe_consumer"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/ListProductsResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "request_magic_link",
"description": "Send a magic link for passwordless login.",
"method": "POST",
"path": "/api/auth/magic-link",
"parameters": {
"$ref": "#/components/schemas/MagicLinkRequest"
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "STRICT",
"publishable_scope": [
"auth"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/MagicLinkResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "get_wallet_nonce",
"description": "Get a nonce to sign for wallet authentication.",
"method": "POST",
"path": "/api/auth/nonce",
"parameters": {
"$ref": "#/components/schemas/NonceRequest"
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "TIGHT",
"publishable_scope": [
"auth"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/NonceResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "wallet_sign_in",
"description": "Exchange a signed wallet nonce for SPAPS tokens or an mfa_required challenge.",
"method": "POST",
"path": "/api/auth/wallet-sign-in",
"parameters": {
"$ref": "#/components/schemas/WalletSignInRequest"
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "TIGHT",
"publishable_scope": [
"auth"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/spaps_server_quickstart__domains__auth__schemas__WalletSignInResponse"
},
{
"$ref": "#/components/schemas/MfaRequiredResponse"
}
],
"title": "Response Wallet Sign In Api Auth Wallet Sign In Post"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "verify_magic_link",
"description": "Exchange a magic-link token for SPAPS tokens or an mfa_required challenge.",
"method": "POST",
"path": "/api/auth/verify-magic-link",
"parameters": {
"$ref": "#/components/schemas/VerifyMagicLinkRequest"
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "TIGHT",
"publishable_scope": [
"auth"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/VerifyMagicLinkResponse"
},
{
"$ref": "#/components/schemas/MfaRequiredResponse"
}
],
"title": "Response Verify Magic Link Api Auth Verify Magic Link Post"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "oidc_nonce",
"description": "Create a nonce challenge before exchanging an OIDC provider ID token.",
"method": "POST",
"path": "/api/auth/oidc/nonce",
"parameters": {
"type": "object",
"properties": {}
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "TIGHT",
"publishable_scope": null,
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/OidcNonceResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "oidc_sign_in",
"description": "Exchange an OIDC ID token and challenge_id for SPAPS tokens or an mfa_required challenge.",
"method": "POST",
"path": "/api/auth/oidc/sign-in",
"parameters": {
"$ref": "#/components/schemas/OidcSignInRequest"
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "TIGHT",
"publishable_scope": null,
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/OidcSignInResponse"
},
{
"$ref": "#/components/schemas/MfaRequiredResponse"
}
],
"title": "Response Oidc Sign In Api Auth Oidc Sign In Post"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "sms_request",
"description": "Request an enumeration-safe SMS OTP challenge.",
"method": "POST",
"path": "/api/auth/sms/request",
"parameters": {
"$ref": "#/components/schemas/SmsOtpRequest"
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "STRICT",
"publishable_scope": null,
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/SmsOtpRequestResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "sms_verify",
"description": "Verify an SMS OTP challenge for SPAPS tokens or an mfa_required challenge.",
"method": "POST",
"path": "/api/auth/sms/verify",
"parameters": {
"$ref": "#/components/schemas/SmsOtpVerifyRequest"
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "TIGHT",
"publishable_scope": null,
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/SmsSignInResponse"
},
{
"$ref": "#/components/schemas/MfaRequiredResponse"
}
],
"title": "Response Verify Sms Otp Api Auth Sms Verify Post"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "webauthn_assertion_options",
"description": "Advanced raw endpoint. Prefer client.auth.passkeys.signIn() or createConditionalSignIn(), which performs safe browser JSON conversion.",
"preferred_client_api": "client.auth.passkeys.signIn",
"warning": "Advanced agents only: do not hand-cast WebAuthn JSON or log ceremony data.",
"method": "POST",
"path": "/api/auth/webauthn/assertion/options",
"parameters": {
"anyOf": [
{
"$ref": "#/components/schemas/WebAuthnAssertionOptionsRequest"
},
{
"type": "null"
}
],
"title": "Body"
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "TIGHT",
"publishable_scope": [
"webauthn_ceremonies"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/WebAuthnAssertionOptionsResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "webauthn_assertion_verify",
"description": "Advanced raw endpoint. Prefer client.auth.passkeys.signIn(), which verifies the assertion and preserves the mfa_required branch.",
"preferred_client_api": "client.auth.passkeys.signIn",
"warning": "Advanced agents only: never persist or log credential bodies, and do not invent a public generic step-up consume endpoint.",
"method": "POST",
"path": "/api/auth/webauthn/assertion/verify",
"parameters": {
"$ref": "#/components/schemas/WebAuthnAssertionVerifyRequest"
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "TIGHT",
"publishable_scope": [
"webauthn_ceremonies"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/WebAuthnAssertionVerifyResponse"
},
{
"$ref": "#/components/schemas/MfaRequiredResponse"
}
],
"title": "Response Webauthn Assertion Verify Api Auth Webauthn Assertion Verify Post"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "webauthn_register_options",
"description": "Advanced raw endpoint. Prefer client.auth.passkeys.register(), which uses native PublicKeyCredential JSON parsing.",
"preferred_client_api": "client.auth.passkeys.register",
"warning": "Advanced agents only: do not hand-cast browser ceremony options.",
"method": "POST",
"path": "/api/auth/webauthn/register/options",
"parameters": {
"type": "object",
"properties": {}
},
"auth": {
"auth_type": "user",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey",
"BearerJWT"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": true,
"optional": false
},
"roles": [
"user"
]
},
"rate_tier": "TIGHT",
"publishable_scope": [
"webauthn_ceremonies"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/WebAuthnRegistrationOptionsResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "webauthn_register_verify",
"description": "Advanced raw endpoint. Prefer client.auth.passkeys.register(), which serializes and verifies the browser credential safely.",
"preferred_client_api": "client.auth.passkeys.register",
"warning": "Advanced agents only: never persist or log credential bodies.",
"method": "POST",
"path": "/api/auth/webauthn/register/verify",
"parameters": {
"$ref": "#/components/schemas/WebAuthnRegisterVerifyRequest"
},
"auth": {
"auth_type": "user",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey",
"BearerJWT"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": true,
"optional": false
},
"roles": [
"user"
]
},
"rate_tier": "TIGHT",
"publishable_scope": [
"webauthn_ceremonies"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/WebAuthnRegisterVerifyResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "mfa_verify",
"description": "Complete an mfa_required challenge with a TOTP code or recovery code.",
"method": "POST",
"path": "/api/auth/mfa/verify",
"parameters": {
"$ref": "#/components/schemas/MfaVerifyRequest"
},
"auth": {
"auth_type": "application",
"required": true,
"schemes": [
"SpapsPublishableKey",
"SpapsSecretKey"
],
"api_key": {
"required": true,
"accepted": [
"publishable",
"secret"
]
},
"jwt": {
"required": false,
"optional": false
},
"roles": []
},
"rate_tier": "TIGHT",
"publishable_scope": [
"auth"
],
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/MfaVerifyResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "mfa_totp_enroll",
"description": "Enroll TOTP MFA for an authenticated user.",
"method": "POST",
"path": "/api/auth/mfa/totp/enroll",
"parameters": {
"type": "object",
"properties": {}
},
"auth": {
"auth_type": "user",
"required": true,
"schemes": [
"SpapsSecretKey",
"BearerJWT"
],
"api_key": {
"required": true,
"accepted": [
"secret"
]
},
"jwt": {
"required": true,
"optional": false
},
"roles": [
"user"
]
},
"rate_tier": "MODERATE",
"publishable_scope": null,
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/MfaTotpEnrollResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "mfa_totp_activate",
"description": "Activate pending TOTP MFA enrollment with a current code.",
"method": "POST",
"path": "/api/auth/mfa/totp/activate",
"parameters": {
"$ref": "#/components/schemas/MfaTotpActivateRequest"
},
"auth": {
"auth_type": "user",
"required": true,
"schemes": [
"SpapsSecretKey",
"BearerJWT"
],
"api_key": {
"required": true,
"accepted": [
"secret"
]
},
"jwt": {
"required": true,
"optional": false
},
"roles": [
"user"
]
},
"rate_tier": "MODERATE",
"publishable_scope": null,
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/MfaTotpActivateResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "mfa_totp_disable",
"description": "Disable TOTP MFA for an authenticated user with a current code.",
"method": "POST",
"path": "/api/auth/mfa/totp/disable",
"parameters": {
"$ref": "#/components/schemas/MfaTotpDisableRequest"
},
"auth": {
"auth_type": "user",
"required": true,
"schemes": [
"SpapsSecretKey",
"BearerJWT"
],
"api_key": {
"required": true,
"accepted": [
"secret"
]
},
"jwt": {
"required": true,
"optional": false
},
"roles": [
"user"
]
},
"rate_tier": "MODERATE",
"publishable_scope": null,
"entitlement_key": null,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/MfaTotpDisableResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "spaps_auth_methods",
"description": "Run `spaps auth methods` to print the configured auth method matrix for an application.",
"command": "spaps auth methods",
"cli": true,
"parameters": {
"type": "object",
"properties": {
"server_url": {
"type": "string",
"description": "SPAPS server URL; maps to --server-url"
},
"origin": {
"type": "string",
"description": "Browser origin to send with publishable-key checks; maps to --origin"
},
"json": {
"type": "boolean",
"default": true
}
}
},
"responses": {
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "spaps_auth_mfa_test",
"description": "Run `spaps auth mfa-test` against a local SPAPS stack to exercise TOTP enrollment, activation, MFA challenge verification, and cleanup.",
"command": "spaps auth mfa-test",
"cli": true,
"local_only_by_default": true,
"parameters": {
"type": "object",
"required": [
"email",
"password"
],
"properties": {
"email": {
"type": "string",
"description": "Local test user email; maps to --email"
},
"password": {
"type": "string",
"description": "Local test user password; maps to --password"
},
"server_url": {
"type": "string",
"description": "SPAPS server URL; maps to --server-url"
},
"origin": {
"type": "string",
"description": "Browser origin to send with publishable-key checks; maps to --origin"
},
"allow_remote": {
"type": "boolean",
"default": false,
"description": "Maps to --allow-remote"
},
"json": {
"type": "boolean",
"default": true
}
}
},
"responses": {
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "spaps_auth_sms_test",
"description": "Run `spaps auth sms-test` against local console SMS to request a challenge, then verify it with a code read from local server logs.",
"command": "spaps auth sms-test",
"cli": true,
"local_only_by_default": true,
"parameters": {
"type": "object",
"required": [
"phone_number"
],
"properties": {
"phone_number": {
"type": "string",
"description": "E.164 phone number; maps to --phone-number"
},
"challenge_id": {
"type": "string",
"description": "Existing SMS challenge id; maps to --challenge-id"
},
"code": {
"type": "string",
"description": "SMS code from local server logs; maps to --code"
},
"server_url": {
"type": "string",
"description": "SPAPS server URL; maps to --server-url"
},
"origin": {
"type": "string",
"description": "Browser origin to send with publishable-key checks; maps to --origin"
},
"allow_remote": {
"type": "boolean",
"default": false,
"description": "Maps to --allow-remote"
},
"json": {
"type": "boolean",
"default": true
}
}
},
"responses": {
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "spaps_auth_passkeys_doctor",
"description": "Diagnose passkey readiness without starting a ceremony or mutating credentials.",
"command": "spaps auth passkeys doctor",
"cli": true,
"idempotent": true,
"agent_guidance": {
"discovery": "Use spaps auth passkeys show for the canonical profile, then spaps auth passkeys doctor --json with the exact RP, origin, scope, CORS, SDK, and environment evidence.",
"when_to_use": "Before generating browser passkey code, launching a ceremony test, or diagnosing an RP/origin failure.",
"do": [
"Use a publishable browser key with webauthn_ceremonies scope.",
"Treat every failed check and next_action as blocking evidence."
],
"dont": [
"Do not put spaps_sec_ keys in browser configuration.",
"Do not infer support from a successful deterministic model alone."
],
"common_mistakes": [
"Preview origin checked against a production profile.",
"CORS host is similar but not an exact origin match."
],
"next_actions": [
"Resolve failed checks, then run spaps auth passkeys test without --launch to inspect the safe packet."
]
},
"parameters": {
"type": "object",
"properties": {
"application_id": {
"type": "string",
"description": "Application UUID; maps to --application-id"
},
"rp_id": {
"type": "string",
"description": "Exact expected RP hostname; maps to --rp-id"
},
"origin": {
"type": "string",
"description": "Exact expected browser origin; maps to --origin"
},
"environment": {
"type": "string",
"enum": [
"local",
"preview",
"production"
]
},
"publishable_scopes": {
"type": "array",
"items": {
"type": "string"
}
},
"cors_origins": {
"type": "array",
"items": {
"type": "string"
}
},
"sdk_version": {
"type": "string"
},
"json": {
"type": "boolean",
"default": true
}
}
},
"responses": {
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "spaps_auth_passkeys_test",
"description": "Emit or launch the isolated local Chromium virtual-authenticator harness; browser credential bodies are never terminal output.",
"command": "spaps auth passkeys test",
"cli": true,
"local_only_by_default": true,
"preferred_client_api": "client.auth.passkeys",
"idempotent": false,
"agent_guidance": {
"discovery": "Run spaps auth passkeys doctor --json first. Use the returned exact RP/origin and next_actions.",
"when_to_use": "After doctor is ready and you need safe browser/virtual-authenticator evidence.",
"do": [
"Use client.auth.passkeys.register/signIn/createConditionalSignIn in browser code.",
"Prefer PublicKeyCredential parseCreationOptionsFromJSON/parseRequestOptionsFromJSON through spaps-sdk."
],
"dont": [
"Do not emulate CTAP or WebAuthn in the terminal.",
"Do not persist or log credential bodies.",
"Do not request remote mutation without explicit operator intent."
],
"common_mistakes": [
"Using raw DOM casts instead of the SDK JSON conversion path.",
"Treating mfa_required as a generic public step-up consume endpoint."
],
"next_actions": [
"Inspect the packet, launch locally, then handle authenticated or mfa_required results explicitly."
]
},
"parameters": {
"type": "object",
"properties": {
"server_url": {
"type": "string",
"description": "Target SPAPS URL; maps to --server-url"
},
"rp_id": {
"type": "string",
"description": "Exact RP hostname; maps to --rp-id"
},
"origin": {
"type": "string",
"description": "Exact browser origin; maps to --origin"
},
"launch": {
"type": "boolean",
"default": false
},
"allow_remote": {
"type": "boolean",
"default": false
},
"json": {
"type": "boolean",
"default": true
}
}
},
"responses": {
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_availability",
"description": "List bookable slots within the configured horizon with dynamic pricing.",
"method": "GET",
"path": "/api/dayrate/availability",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "dayrate",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/AvailabilityResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_book",
"description": "Book a single slot. Returns FreeBookResponse when an entitled user has remaining allotment, otherwise a Stripe Checkout URL.",
"method": "POST",
"path": "/api/dayrate/book",
"parameters": {
"$ref": "#/components/schemas/BookRequest"
},
"domain": "dayrate",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_book_multi",
"description": "Book multiple slots in one Stripe session with running fill-rate pricing.",
"method": "POST",
"path": "/api/dayrate/book-multi",
"parameters": {
"$ref": "#/components/schemas/BookMultiRequest"
},
"domain": "dayrate",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/BookMultiResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_checkout_status",
"description": "Poll a Stripe session to learn the resulting booking status.",
"method": "GET",
"path": "/api/dayrate/checkout-status",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "dayrate",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/CheckoutStatusResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_cancel",
"description": "Cancel an existing booking. Owner verified by user_id then email.",
"method": "POST",
"path": "/api/dayrate/cancel",
"parameters": {
"$ref": "#/components/schemas/CancelRequest"
},
"domain": "dayrate",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/CancelResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_allotment",
"description": "Inspect free allotment status for a policy in the rolling window.",
"method": "GET",
"path": "/api/dayrate/allotment",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "dayrate",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/AllotmentResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_admin_get_config",
"description": "Fetch dayrate pricing/availability config.",
"method": "GET",
"path": "/api/dayrate/admin/config",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "dayrate",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/GetConfigResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_admin_update_config",
"description": "Upsert dayrate config (rates, tiers, horizon, timezone, slot definitions).",
"method": "PUT",
"path": "/api/dayrate/admin/config",
"parameters": {
"$ref": "#/components/schemas/UpdateConfigRequest"
},
"domain": "dayrate",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/UpdateConfigResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_admin_list_bookings",
"description": "Admin view of bookings with status/date/email/enrollment/user/is_free filters.",
"method": "GET",
"path": "/api/dayrate/admin/bookings",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "dayrate",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/ListBookingsResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_admin_list_policies",
"description": "List active booking policies.",
"method": "GET",
"path": "/api/dayrate/admin/policies",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "dayrate",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__dayrate__schemas__ListPoliciesResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_admin_create_policy",
"description": "Create a booking policy (entitlement key, free allotment, overage rate, reschedule rules).",
"method": "POST",
"path": "/api/dayrate/admin/policies",
"parameters": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__dayrate__schemas__CreatePolicyRequest"
},
"domain": "dayrate",
"admin_required": true,
"agent_callable": true,
"responses": {
"201": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__dayrate__schemas__PolicyResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_admin_update_policy",
"description": "Partial update of a booking policy.",
"method": "PUT",
"path": "/api/dayrate/admin/policies/{policy_id}",
"parameters": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__dayrate__schemas__UpdatePolicyRequest"
},
"domain": "dayrate",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__dayrate__schemas__PolicyResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "dayrate_admin_delete_policy",
"description": "Delete a booking policy.",
"method": "DELETE",
"path": "/api/dayrate/admin/policies/{policy_id}",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "dayrate",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"$ref": "#/components/schemas/DeletePolicyResponse"
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "email_send",
"description": "Send a transactional email by template key. In local mode Mailgun calls are short-circuited.",
"method": "POST",
"path": "/api/email/send",
"parameters": {
"$ref": "#/components/schemas/SendEmailRequest"
},
"domain": "email",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/SendEmailResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "email_get_template",
"description": "Fetch a template definition by key.",
"method": "GET",
"path": "/api/email/templates/{template_key}",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "email",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "email_preview_template",
"description": "Render a template with its sample context.",
"method": "GET",
"path": "/api/email/templates/{template_key}/preview",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "email",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "email_preview_template_with_context",
"description": "Render a template with caller-provided context.",
"method": "POST",
"path": "/api/email/templates/{template_key}/preview",
"parameters": {
"$ref": "#/components/schemas/PreviewTemplateRequest"
},
"domain": "email",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "email_list_logs",
"description": "List email sends. Non-admin users are scoped to their own logs; admins can filter by user_id or owner_id.",
"method": "GET",
"path": "/api/email/logs",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "email",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/ListLogsResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "email_admin_list_templates",
"description": "List all templates for the application.",
"method": "GET",
"path": "/api/email/templates",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "email",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/ListTemplatesResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "email_admin_create_template",
"description": "Create a template (subject, html, text, variables, sample context).",
"method": "POST",
"path": "/api/email/templates",
"parameters": {
"$ref": "#/components/schemas/CreateTemplateRequest"
},
"domain": "email",
"admin_required": true,
"agent_callable": true,
"responses": {
"201": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/CreateTemplateResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "email_admin_update_template",
"description": "Update an existing template.",
"method": "PUT",
"path": "/api/email/templates/{template_key}",
"parameters": {
"$ref": "#/components/schemas/UpdateTemplateRequest"
},
"domain": "email",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/UpdateTemplateResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "email_admin_get_override",
"description": "Get subject/body override for a template.",
"method": "GET",
"path": "/api/email/templates/{template_key}/override",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "email",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/TemplateOverrideResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "email_admin_set_override",
"description": "Set subject/body override for a template.",
"method": "PUT",
"path": "/api/email/templates/{template_key}/override",
"parameters": {
"$ref": "#/components/schemas/TemplateOverrideRequest"
},
"domain": "email",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/TemplateOverrideResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "email_admin_clear_override",
"description": "Clear subject/body override for a template.",
"method": "DELETE",
"path": "/api/email/templates/{template_key}/override",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "email",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/DeleteTemplateOverrideResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "webhook_list",
"description": "List registered outbound webhooks.",
"method": "GET",
"path": "/api/webhooks",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "webhooks",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/ListWebhooksResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "webhook_register",
"description": "Register an outbound webhook. The create response returns a one-time signing_secret.",
"method": "POST",
"path": "/api/webhooks",
"parameters": {
"$ref": "#/components/schemas/CreateWebhookRequest"
},
"domain": "webhooks",
"admin_required": false,
"agent_callable": true,
"responses": {
"201": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/CreateWebhookResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "webhook_update",
"description": "Update url, events, is_active, or headers on an existing webhook.",
"method": "PUT",
"path": "/api/webhooks/{webhook_id}",
"parameters": {
"$ref": "#/components/schemas/UpdateWebhookRequest"
},
"domain": "webhooks",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/UpdateWebhookResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "webhook_delete",
"description": "Remove a registered webhook.",
"method": "DELETE",
"path": "/api/webhooks/{webhook_id}",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "webhooks",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/DeleteWebhookResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "webhook_deliveries",
"description": "List delivery attempts for a webhook.",
"method": "GET",
"path": "/api/webhooks/{webhook_id}/deliveries",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "webhooks",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/ListDeliveriesResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "webhook_events",
"description": "List supported outbound event types.",
"method": "GET",
"path": "/api/webhooks/events",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "webhooks",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/ListEventTypesResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "policy_authorize",
"description": "Evaluate a named policy against a user/context. Returns allow/deny with reasons.",
"method": "POST",
"path": "/api/policies/authorize",
"parameters": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__policies__schemas__AuthorizeRequest"
},
"domain": "policies",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__policies__schemas__AuthorizeResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "policy_admin_list",
"description": "List policies (is_active filter).",
"method": "GET",
"path": "/api/policies",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "policies",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__policies__schemas__ListPoliciesResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "policy_admin_create",
"description": "Create a policy (name, effect, conditions, priority, metadata).",
"method": "POST",
"path": "/api/policies",
"parameters": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__policies__schemas__CreatePolicyRequest"
},
"domain": "policies",
"admin_required": true,
"agent_callable": true,
"responses": {
"201": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__policies__schemas__PolicyResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "policy_admin_get",
"description": "Fetch a single policy.",
"method": "GET",
"path": "/api/policies/{policy_id}",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "policies",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__policies__schemas__PolicyResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "policy_admin_update",
"description": "Partial update of a policy.",
"method": "PUT",
"path": "/api/policies/{policy_id}",
"parameters": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__policies__schemas__UpdatePolicyRequest"
},
"domain": "policies",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/spaps_server_quickstart__domains__policies__schemas__PolicyResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "policy_admin_delete",
"description": "Delete a policy.",
"method": "DELETE",
"path": "/api/policies/{policy_id}",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "policies",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"type": "object",
"additionalProperties": true,
"title": "Response Delete Policy Api Policies Policy Id Delete"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "policy_admin_evaluations",
"description": "List policy evaluation audit logs.",
"method": "GET",
"path": "/api/policies/evaluations",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "policies",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/EvaluationLogsResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "billing_status",
"description": "Show current application billing-account resolution and redacted Stripe diagnostics.",
"method": "GET",
"path": "/api/admin/billing/status",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "billing",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/BillingStatusResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "billing_verify",
"description": "Verify that the current application has usable Stripe secret and webhook configuration.",
"method": "GET",
"path": "/api/admin/billing/verify",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "billing",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/BillingVerifyResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
},
"required": [
"error"
]
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "billing_attach",
"description": "Bind the current application to an existing active Stripe billing account.",
"method": "POST",
"path": "/api/admin/billing/attach",
"parameters": {
"$ref": "#/components/schemas/BillingAttachRequest"
},
"domain": "billing",
"admin_required": true,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/BillingAttachResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "issue_report_create",
"description": "Create an issue report. Requires the issue_reporting capability.",
"method": "POST",
"path": "/api/v1/issue-reports",
"parameters": {
"$ref": "#/components/schemas/CreateIssueReportRequest"
},
"domain": "issue_reporting",
"admin_required": false,
"agent_callable": true,
"responses": {
"201": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/IssueReportOut"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "issue_report_list_mine",
"description": "List the caller’s issue reports.",
"method": "GET",
"path": "/api/v1/issue-reports",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "issue_reporting",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/ListIssueReportsResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "issue_report_status",
"description": "Aggregate status for the caller’s issues.",
"method": "GET",
"path": "/api/v1/issue-reports/status",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "issue_reporting",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/IssueReportStatusResponse"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "issue_report_get",
"description": "Fetch a single issue report.",
"method": "GET",
"path": "/api/v1/issue-reports/{issue_report_id}",
"parameters": {
"type": "object",
"properties": {}
},
"domain": "issue_reporting",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/IssueReportOut"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "issue_report_update_note",
"description": "Update the note on an existing report.",
"method": "PATCH",
"path": "/api/v1/issue-reports/{issue_report_id}",
"parameters": {
"$ref": "#/components/schemas/UpdateIssueReportRequest"
},
"domain": "issue_reporting",
"admin_required": false,
"agent_callable": true,
"responses": {
"200": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/IssueReportOut"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
},
{
"name": "issue_report_reply",
"description": "Reply to an issue; creates a child report and reopens the linked support case.",
"method": "POST",
"path": "/api/v1/issue-reports/{issue_report_id}/replies",
"parameters": {
"$ref": "#/components/schemas/ReplyIssueReportRequest"
},
"domain": "issue_reporting",
"admin_required": false,
"agent_callable": true,
"responses": {
"201": {
"type": "object",
"required": [
"success",
"data",
"request_id",
"timestamp"
],
"properties": {
"success": {
"type": "boolean",
"const": true
},
"data": {
"$ref": "#/components/schemas/IssueReportOut"
},
"request_id": {
"type": "string",
"format": "uuid"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
},
"400": {
"$ref": "#/components/schemas/SpapsErrorEnvelope"
},
"401": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"unauthorized"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"403": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"forbidden"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"429": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"rate_limited"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
},
"500": {
"type": "object",
"properties": {
"error": {
"type": "string",
"enum": [
"server_error"
]
},
"message": {
"type": "string"
}
},
"required": [
"error"
]
}
}
}
]
}