{"openapi": "3.1.0", "info": {"title": "Officely public API", "version": "v1", "description": "Chatbots, AI flows, customers, conversations, messages and webhooks of your Officely account. Errors are problem+json; personal data is masked unless the key has conversations:read_pii and the request says redact=false. Scopes: account:read, account:write, ai_flows:publish, ai_flows:read, ai_flows:write, builders:publish, builders:read, builders:test, builders:write, conversations:read, conversations:read_pii, conversations:write, customers:read, customers:write, messages:send, schedules:read, schedules:write, webhooks:manage."}, "servers": [{"url": "https://api.officely.ai/v1/public"}, {"url": "https://api-dev.officely.ai/v1/public"}], "security": [{"ApiKey": []}], "paths": {"/agents": {"get": {"operationId": "list_agents", "summary": "List agents", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["agents"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_builders_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/ai-credits": {"get": {"operationId": "ai_credits", "summary": "Ai credits", "description": "Scopes: account:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["ai-credits"], "security": [{"ApiKey": []}], "x-required-scopes": ["account:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/ai-credits/usage": {"get": {"operationId": "ai_credits_usage", "summary": "Ai credits usage", "description": "Scopes: account:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["ai-credits"], "security": [{"ApiKey": []}], "x-required-scopes": ["account:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/ai-flows": {"get": {"operationId": "list_flows", "summary": "List flows", "description": "Scopes: ai_flows:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_ai_flows_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}, "post": {"operationId": "create_flow", "summary": "Create flow", "description": "Scopes: ai_flows:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_ai_flows_bp", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "ai_flow.create", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/ai-flows/{agent_id}": {"get": {"operationId": "get_flow", "summary": "Get flow", "description": "Scopes: ai_flows:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}, "delete": {"operationId": "delete_flow", "summary": "Delete flow", "description": "Scopes: ai_flows:publish. Rate limit: 10 requests per 600 s per key (publish). Write: send an Idempotency-Key; audited.", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:publish"], "x-rate-limit-bucket": "publish", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "ai_flow.delete"}}, "/ai-flows/{agent_id}/build": {"post": {"operationId": "build", "summary": "Build", "description": "Scopes: ai_flows:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "ai_flow.build", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/ai-flows/{agent_id}/nodes": {"post": {"operationId": "add_node", "summary": "Add node", "description": "Scopes: ai_flows:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "ai_flow.node.create", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/ai-flows/{agent_id}/nodes/{node_id}": {"patch": {"operationId": "update_node", "summary": "Update node", "description": "Scopes: ai_flows:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "node_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "ai_flow.node.update", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}, "delete": {"operationId": "delete_node", "summary": "Delete node", "description": "Scopes: ai_flows:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "node_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "ai_flow.node.delete"}}, "/ai-flows/{agent_id}/nodes/{node_id}/output-schema": {"put": {"operationId": "output_schema", "summary": "Output schema", "description": "Scopes: ai_flows:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "node_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "ai_flow.node.schema", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/ai-flows/{agent_id}/publish": {"post": {"operationId": "publish", "summary": "Publish", "description": "Scopes: ai_flows:publish. Rate limit: 10 requests per 600 s per key (publish). Write: send an Idempotency-Key; audited.", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:publish"], "x-rate-limit-bucket": "publish", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "ai_flow.publish", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/ai-flows/{agent_id}/retrieval-preview": {"post": {"operationId": "retrieval_preview", "summary": "Retrieval preview", "description": "Scopes: ai_flows:read, builders:test. Rate limit: 30 requests per 600 s per key (test). Write: send an Idempotency-Key; audited.", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:read", "builders:test"], "x-rate-limit-bucket": "test", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "ai_flow.retrieval_preview", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/ai-flows/{agent_id}/rollback": {"post": {"operationId": "rollback", "summary": "Rollback", "description": "Scopes: ai_flows:publish. Rate limit: 10 requests per 600 s per key (publish). Write: send an Idempotency-Key; audited.", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:publish"], "x-rate-limit-bucket": "publish", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "ai_flow.rollback", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/ai-flows/{agent_id}/settings": {"patch": {"operationId": "settings", "summary": "Settings", "description": "Scopes: ai_flows:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "ai_flow.settings", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/ai-flows/{agent_id}/test": {"post": {"operationId": "run_test", "summary": "Run test", "description": "Scopes: ai_flows:read, builders:test. Rate limit: 30 requests per 600 s per key (test). Write: send an Idempotency-Key; audited.", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:read", "builders:test"], "x-rate-limit-bucket": "test", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "ai_flow.test", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/ai-flows/{agent_id}/validation": {"get": {"operationId": "get_validation", "summary": "Get validation", "description": "Scopes: ai_flows:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/ai-flows/{agent_id}/versions": {"get": {"operationId": "get_versions", "summary": "Get versions", "description": "Scopes: ai_flows:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "agent_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/ai-flows/node-types": {"get": {"operationId": "node_types", "summary": "Node types", "description": "Scopes: ai_flows:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["ai-flows"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_ai_flows_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/ai-models": {"get": {"operationId": "ai_models", "summary": "Ai models", "description": "Scopes: ai_flows:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["ai-models"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_ai_flows_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/api-keys": {"get": {"operationId": "api_keys", "summary": "Api keys", "description": "Scopes: account:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["api-keys"], "security": [{"ApiKey": []}], "x-required-scopes": ["account:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_extras_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/bot-messages/account": {"get": {"operationId": "get_account_messages", "summary": "Get account messages", "description": "Scopes: account:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["bot-messages"], "security": [{"ApiKey": []}], "x-required-scopes": ["account:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}, "put": {"operationId": "put_account_messages", "summary": "Put account messages", "description": "Scopes: account:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["bot-messages"], "security": [{"ApiKey": []}], "x-required-scopes": ["account:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_account_bp", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "bot_messages.account.update", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/bot-messages/catalog": {"get": {"operationId": "bot_messages_catalog", "summary": "Bot messages catalog", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["bot-messages"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_chatbots_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/builder-templates": {"get": {"operationId": "list_templates", "summary": "List templates", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builder-templates"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.bot_templates_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/builder-templates/{template_id}": {"get": {"operationId": "get_template", "summary": "Get template", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builder-templates"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.bot_templates_bp", "parameters": [{"name": "template_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/builder-templates/{template_id}/create": {"post": {"operationId": "create_from_template", "summary": "Create from template", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builder-templates"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.bot_templates_bp", "parameters": [{"name": "template_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder_template.create", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builder-templates/{template_id}/preview": {"post": {"operationId": "preview_template", "summary": "Preview template", "description": "Scopes: builders:test. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builder-templates"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:test"], "x-rate-limit-bucket": "read", "x-source": "routes.bot_templates_bp", "parameters": [{"name": "template_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders": {"get": {"operationId": "list_builders", "summary": "List builders", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_builders_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}, "post": {"operationId": "create_builder", "summary": "Create builder", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_builders_bp", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.create", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}": {"get": {"operationId": "get_builder", "summary": "Get builder", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}, "patch": {"operationId": "rename", "summary": "Rename", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.rename", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}, "delete": {"operationId": "delete_bot", "summary": "Delete bot", "description": "Scopes: builders:write. Rate limit: 10 requests per 600 s per key (publish). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "publish", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.delete"}}, "/builders/{builder_id}/bot-messages": {"get": {"operationId": "get_bot_messages", "summary": "Get bot messages", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}, "put": {"operationId": "set_bot_messages", "summary": "Set bot messages", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.bot_messages", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/bricks": {"post": {"operationId": "create_brick", "summary": "Create brick", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.brick.create", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/bricks/{brick_id}": {"patch": {"operationId": "update_brick", "summary": "Update brick", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "brick_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.brick.update", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}, "delete": {"operationId": "delete_brick", "summary": "Delete brick", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "brick_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.brick.delete"}}, "/builders/{builder_id}/build": {"post": {"operationId": "build_post", "summary": "Build", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.build", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/doctor": {"get": {"operationId": "doctor_report", "summary": "Doctor report", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/builders/{builder_id}/doctor/copy": {"post": {"operationId": "doctor_copy", "summary": "Doctor copy", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.doctor.copy", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/duplicate": {"post": {"operationId": "duplicate_bot", "summary": "Duplicate bot", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.duplicate", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/edges": {"post": {"operationId": "add_edge", "summary": "Add edge", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.edge.create", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/edges/{edge_id}": {"delete": {"operationId": "delete_edge", "summary": "Delete edge", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "edge_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.edge.delete"}}, "/builders/{builder_id}/flow": {"get": {"operationId": "get_flow_get", "summary": "Get flow", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/builders/{builder_id}/layout": {"post": {"operationId": "auto_layout", "summary": "Auto layout", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.layout", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/nodes": {"post": {"operationId": "add_node_post", "summary": "Add node", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.node.create", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/nodes/{node_id}": {"patch": {"operationId": "update_node_patch", "summary": "Update node", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "node_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.node.update", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}, "delete": {"operationId": "delete_node_delete", "summary": "Delete node", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "node_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.node.delete"}}, "/builders/{builder_id}/nodes/{node_id}/duplicate": {"post": {"operationId": "duplicate_node", "summary": "Duplicate node", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "node_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.node.duplicate", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/nodes/{node_id}/test-http": {"post": {"operationId": "test_http_step", "summary": "Test http step", "description": "Scopes: builders:test. Rate limit: 30 requests per 600 s per key (test). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:test"], "x-rate-limit-bucket": "test", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "node_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.http_test", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/nodes/delete": {"post": {"operationId": "delete_nodes", "summary": "Delete nodes", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.nodes.delete", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/publish": {"post": {"operationId": "publish_post", "summary": "Publish", "description": "Scopes: builders:publish. Rate limit: 10 requests per 600 s per key (publish). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:publish"], "x-rate-limit-bucket": "publish", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.publish", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/publish-plan": {"get": {"operationId": "publish_plan", "summary": "Publish plan", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/builders/{builder_id}/settings": {"get": {"operationId": "get_settings", "summary": "Get settings", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}, "patch": {"operationId": "update_settings", "summary": "Update settings", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.settings", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/test": {"post": {"operationId": "run_test_post", "summary": "Run test", "description": "Scopes: builders:test. Rate limit: 30 requests per 600 s per key (test). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:test"], "x-rate-limit-bucket": "test", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.test", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/texts": {"post": {"operationId": "rewrite_texts", "summary": "Rewrite texts", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.texts", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/unpublish": {"post": {"operationId": "unpublish", "summary": "Unpublish", "description": "Scopes: builders:publish. Rate limit: 10 requests per 600 s per key (publish). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:publish"], "x-rate-limit-bucket": "publish", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.unpublish", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/validation": {"get": {"operationId": "get_validation_get", "summary": "Get validation", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/builders/{builder_id}/variables": {"get": {"operationId": "variables", "summary": "Variables", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_chatbots_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/builders/{builder_id}/versions": {"get": {"operationId": "list_versions", "summary": "List versions", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/builders/{builder_id}/versions/{version}": {"get": {"operationId": "get_version", "summary": "Get version", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "version", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/builders/{builder_id}/versions/{version}/rollback": {"post": {"operationId": "rollback_version", "summary": "Rollback version", "description": "Scopes: builders:publish. Rate limit: 10 requests per 600 s per key (publish). Write: send an Idempotency-Key; audited.", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:publish"], "x-rate-limit-bucket": "publish", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "version", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "builder.version.rollback", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/builders/{builder_id}/versions/diff": {"get": {"operationId": "diff_versions", "summary": "Diff versions", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["builders"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_builders_bp", "parameters": [{"name": "builder_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/catch-hook-events": {"get": {"operationId": "list_catch_hook_events", "summary": "List catch hook events", "description": "Scopes: conversations:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["catch-hook-events"], "security": [{"ApiKey": []}], "x-required-scopes": ["conversations:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/catch-hook-events/{hook_key}/{event_id}": {"get": {"operationId": "get_catch_hook_event", "summary": "Get catch hook event", "description": "Scopes: conversations:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["catch-hook-events"], "security": [{"ApiKey": []}], "x-required-scopes": ["conversations:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_bp", "parameters": [{"name": "event_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "hook_key", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/channels": {"get": {"operationId": "channels", "summary": "Channels", "description": "Scopes: account:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["channels"], "security": [{"ApiKey": []}], "x-required-scopes": ["account:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/chats": {"get": {"operationId": "list_chats", "summary": "List chats", "description": "Scopes: conversations:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["chats"], "security": [{"ApiKey": []}], "x-required-scopes": ["conversations:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_customers_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/chats/{chat_id}": {"get": {"operationId": "get_chat", "summary": "Get chat", "description": "Scopes: conversations:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["chats"], "security": [{"ApiKey": []}], "x-required-scopes": ["conversations:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_customers_bp", "parameters": [{"name": "chat_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/chats/{chat_id}/pause": {"post": {"operationId": "pause_chat", "summary": "Pause chat", "description": "Scopes: conversations:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["chats"], "security": [{"ApiKey": []}], "x-required-scopes": ["conversations:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_messaging_bp", "parameters": [{"name": "chat_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "conversation.pause", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/chats/{chat_id}/resume": {"post": {"operationId": "resume_chat", "summary": "Resume chat", "description": "Scopes: conversations:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["chats"], "security": [{"ApiKey": []}], "x-required-scopes": ["conversations:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_messaging_bp", "parameters": [{"name": "chat_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "conversation.resume", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/conversations": {"get": {"operationId": "list_conversations", "summary": "List conversations", "description": "Scopes: conversations:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["conversations"], "security": [{"ApiKey": []}], "x-required-scopes": ["conversations:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/conversations/{conversation_id}": {"get": {"operationId": "get_conversation", "summary": "Get conversation", "description": "Scopes: conversations:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["conversations"], "security": [{"ApiKey": []}], "x-required-scopes": ["conversations:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_bp", "parameters": [{"name": "conversation_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/customers": {"get": {"operationId": "list_customers", "summary": "List customers", "description": "Scopes: customers:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["customers"], "security": [{"ApiKey": []}], "x-required-scopes": ["customers:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_customers_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/customers/{phone}": {"get": {"operationId": "get_customer", "summary": "Get customer", "description": "Scopes: customers:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["customers"], "security": [{"ApiKey": []}], "x-required-scopes": ["customers:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_customers_bp", "parameters": [{"name": "phone", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}, "patch": {"operationId": "update_customer", "summary": "Update customer", "description": "Scopes: customers:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["customers"], "security": [{"ApiKey": []}], "x-required-scopes": ["customers:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_messaging_bp", "parameters": [{"name": "phone", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "customer.update", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/expressions/test": {"post": {"operationId": "test_expression", "summary": "Test expression", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["expressions"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_chatbots_bp", "parameters": [], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/features": {"get": {"operationId": "features", "summary": "Features", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["features"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_chatbots_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/google/connections": {"get": {"operationId": "google_connections", "summary": "Google connections", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["google"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_google_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/http-steps/secrets": {"get": {"operationId": "list_http_secrets", "summary": "List http secrets", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["http-steps"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_extras_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/http-steps/secrets/{name}": {"put": {"operationId": "save_http_secret", "summary": "Save http secret", "description": "Scopes: builders:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["http-steps"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_account_extras_bp", "parameters": [{"name": "name", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "http_secret.save", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}, "delete": {"operationId": "delete_http_secret", "summary": "Delete http secret", "description": "Scopes: builders:publish. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["http-steps"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:publish"], "x-rate-limit-bucket": "write", "x-source": "routes.public_account_extras_bp", "parameters": [{"name": "name", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "http_secret.delete"}}, "/make/hooks": {"get": {"operationId": "make_hooks", "summary": "Make hooks", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["make"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_make_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/make/scenarios": {"get": {"operationId": "make_scenarios", "summary": "Make scenarios", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["make"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_make_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/me": {"get": {"operationId": "me", "summary": "Me", "description": "Scopes: any valid key. Rate limit: 300 requests per 60 s per key (read).", "tags": ["me"], "security": [{"ApiKey": []}], "x-required-scopes": [], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/messages": {"post": {"operationId": "send_message", "summary": "Send message", "description": "Scopes: messages:send. Rate limit: 60 requests per 60 s per key (send). Write: send an Idempotency-Key; audited.", "tags": ["messages"], "security": [{"ApiKey": []}], "x-required-scopes": ["messages:send"], "x-rate-limit-bucket": "send", "x-source": "routes.public_messaging_bp", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "message.send", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/node-types": {"get": {"operationId": "node_types_get", "summary": "Node types", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["node-types"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_builders_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/onboarding/builds": {"post": {"operationId": "start_build", "summary": "Start build", "description": "Scopes: builders:write, builders:test. Rate limit: 30 requests per 600 s per key (test). Write: send an Idempotency-Key; audited.", "tags": ["onboarding"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:write", "builders:test"], "x-rate-limit-bucket": "test", "x-source": "routes.public_ai_flows_bp", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "onboarding.build", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/onboarding/jobs/{job_id}": {"get": {"operationId": "job_status", "summary": "Job status", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["onboarding"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_ai_flows_bp", "parameters": [{"name": "job_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/plan": {"get": {"operationId": "plan", "summary": "Plan", "description": "Scopes: account:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["plan"], "security": [{"ApiKey": []}], "x-required-scopes": ["account:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/python-steps": {"get": {"operationId": "guide", "summary": "Guide", "description": "Scopes: ai_flows:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["python-steps"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_python_steps_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/python-steps/keys": {"get": {"operationId": "list_keys", "summary": "List keys", "description": "Scopes: ai_flows:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["python-steps"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_python_steps_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/python-steps/keys/{name}": {"put": {"operationId": "save_key", "summary": "Save key", "description": "Scopes: ai_flows:write. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["python-steps"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:write"], "x-rate-limit-bucket": "write", "x-source": "routes.public_python_steps_bp", "parameters": [{"name": "name", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "python_key.save", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}, "delete": {"operationId": "delete_key", "summary": "Delete key", "description": "Scopes: ai_flows:publish. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["python-steps"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:publish"], "x-rate-limit-bucket": "write", "x-source": "routes.public_python_steps_bp", "parameters": [{"name": "name", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "python_key.delete"}}, "/python-steps/test": {"post": {"operationId": "test_run", "summary": "Test run", "description": "Scopes: ai_flows:read, builders:test. Rate limit: 30 requests per 600 s per key (test). Write: send an Idempotency-Key; audited.", "tags": ["python-steps"], "security": [{"ApiKey": []}], "x-required-scopes": ["ai_flows:read", "builders:test"], "x-rate-limit-bucket": "test", "x-source": "routes.public_python_steps_bp", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "python_step.test", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/step-types": {"get": {"operationId": "step_types", "summary": "Step types", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["step-types"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_chatbots_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/team": {"get": {"operationId": "team", "summary": "Team", "description": "Scopes: account:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["team"], "security": [{"ApiKey": []}], "x-required-scopes": ["account:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_extras_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/webhooks": {"get": {"operationId": "list_webhooks", "summary": "List webhooks", "description": "Scopes: webhooks:manage. Rate limit: 300 requests per 60 s per key (read).", "tags": ["webhooks"], "security": [{"ApiKey": []}], "x-required-scopes": ["webhooks:manage"], "x-rate-limit-bucket": "read", "x-source": "routes.public_messaging_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}, "post": {"operationId": "create_webhook", "summary": "Create webhook", "description": "Scopes: webhooks:manage. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["webhooks"], "security": [{"ApiKey": []}], "x-required-scopes": ["webhooks:manage"], "x-rate-limit-bucket": "write", "x-source": "routes.public_messaging_bp", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "webhook.create", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/webhooks/{webhook_id}": {"get": {"operationId": "get_webhook", "summary": "Get webhook", "description": "Scopes: webhooks:manage. Rate limit: 300 requests per 60 s per key (read).", "tags": ["webhooks"], "security": [{"ApiKey": []}], "x-required-scopes": ["webhooks:manage"], "x-rate-limit-bucket": "read", "x-source": "routes.public_messaging_bp", "parameters": [{"name": "webhook_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}, "patch": {"operationId": "update_webhook", "summary": "Update webhook", "description": "Scopes: webhooks:manage. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["webhooks"], "security": [{"ApiKey": []}], "x-required-scopes": ["webhooks:manage"], "x-rate-limit-bucket": "write", "x-source": "routes.public_messaging_bp", "parameters": [{"name": "webhook_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "webhook.update", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}, "delete": {"operationId": "delete_webhook", "summary": "Delete webhook", "description": "Scopes: webhooks:manage. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["webhooks"], "security": [{"ApiKey": []}], "x-required-scopes": ["webhooks:manage"], "x-rate-limit-bucket": "write", "x-source": "routes.public_messaging_bp", "parameters": [{"name": "webhook_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "webhook.delete"}}, "/webhooks/{webhook_id}/deliveries": {"get": {"operationId": "list_webhook_deliveries", "summary": "List webhook deliveries", "description": "Scopes: webhooks:manage. Rate limit: 300 requests per 60 s per key (read).", "tags": ["webhooks"], "security": [{"ApiKey": []}], "x-required-scopes": ["webhooks:manage"], "x-rate-limit-bucket": "read", "x-source": "routes.public_messaging_bp", "parameters": [{"name": "webhook_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/webhooks/{webhook_id}/deliveries/{delivery_id}/redeliver": {"post": {"operationId": "redeliver_webhook", "summary": "Redeliver webhook", "description": "Scopes: webhooks:manage. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["webhooks"], "security": [{"ApiKey": []}], "x-required-scopes": ["webhooks:manage"], "x-rate-limit-bucket": "write", "x-source": "routes.public_messaging_bp", "parameters": [{"name": "delivery_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "webhook_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "webhook.redeliver", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/webhooks/{webhook_id}/rotate-secret": {"post": {"operationId": "rotate_webhook_secret", "summary": "Rotate webhook secret", "description": "Scopes: webhooks:manage. Rate limit: 120 requests per 60 s per key (write). Write: send an Idempotency-Key; audited.", "tags": ["webhooks"], "security": [{"ApiKey": []}], "x-required-scopes": ["webhooks:manage"], "x-rate-limit-bucket": "write", "x-source": "routes.public_messaging_bp", "parameters": [{"name": "webhook_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "webhook.rotate_secret", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/webhooks/{webhook_id}/test": {"post": {"operationId": "send_webhook_test", "summary": "Send webhook test", "description": "Scopes: webhooks:manage. Rate limit: 30 requests per 600 s per key (test). Write: send an Idempotency-Key; audited.", "tags": ["webhooks"], "security": [{"ApiKey": []}], "x-required-scopes": ["webhooks:manage"], "x-rate-limit-bucket": "test", "x-source": "routes.public_messaging_bp", "parameters": [{"name": "webhook_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"$ref": "#/components/parameters/IdempotencyKey"}], "responses": {"2XX": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}, "x-audit-action": "webhook.test", "requestBody": {"required": false, "content": {"application/json": {"schema": {"type": "object"}}}}}}, "/webhooks/event-types": {"get": {"operationId": "webhook_event_types", "summary": "Webhook event types", "description": "Scopes: webhooks:manage. Rate limit: 300 requests per 60 s per key (read).", "tags": ["webhooks"], "security": [{"ApiKey": []}], "x-required-scopes": ["webhooks:manage"], "x-rate-limit-bucket": "read", "x-source": "routes.public_messaging_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/whatsapp-templates": {"get": {"operationId": "whatsapp_templates", "summary": "Whatsapp templates", "description": "Scopes: builders:read. Rate limit: 300 requests per 60 s per key (read).", "tags": ["whatsapp-templates"], "security": [{"ApiKey": []}], "x-required-scopes": ["builders:read"], "x-rate-limit-bucket": "read", "x-source": "routes.public_account_extras_bp", "parameters": [], "responses": {"200": {"description": "Success (JSON). Lists: {data, next_cursor}; pass next_cursor as `cursor`.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}}, "content": {"application/json": {"schema": {"type": "object"}}}}, "400": {"$ref": "#/components/responses/Problem"}, "401": {"$ref": "#/components/responses/Problem"}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}, "409": {"$ref": "#/components/responses/Problem"}, "429": {"description": "Too many requests: wait Retry-After seconds.", "headers": {"RateLimit-Limit": {"$ref": "#/components/headers/RateLimit-Limit"}, "RateLimit-Remaining": {"$ref": "#/components/headers/RateLimit-Remaining"}, "RateLimit-Reset": {"$ref": "#/components/headers/RateLimit-Reset"}, "X-Request-ID": {"$ref": "#/components/headers/X-Request-ID"}, "Retry-After": {"schema": {"type": "integer"}}}, "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}}, "components": {"securitySchemes": {"ApiKey": {"type": "apiKey", "in": "header", "name": "x-officely-token", "description": "An account API key (ofl_live_...) with the scopes listed on each operation. Create keys in Developers > API keys."}}, "parameters": {"IdempotencyKey": {"name": "Idempotency-Key", "in": "header", "required": true, "description": "8-128 characters (letters, digits, - _ . :). A retry with the same key and body gets the first answer (Idempotent-Replayed: true) and changes nothing; keys live 24 hours.", "schema": {"type": "string", "pattern": "^[A-Za-z0-9_\\-.:]{8,128}$"}}}, "headers": {"RateLimit-Limit": {"schema": {"type": "integer"}, "description": "Requests allowed in the window."}, "RateLimit-Remaining": {"schema": {"type": "integer"}, "description": "Requests left in the window."}, "RateLimit-Reset": {"schema": {"type": "integer"}, "description": "Seconds until a request frees up."}, "X-Request-ID": {"schema": {"type": "string"}, "description": "Quote it when you contact support."}}, "schemas": {"Problem": {"type": "object", "required": ["type", "title", "status", "detail", "code"], "properties": {"type": {"type": "string", "format": "uri"}, "title": {"type": "string"}, "status": {"type": "integer"}, "detail": {"type": "string", "description": "What happened and what to do."}, "code": {"type": "string"}, "instance": {"type": "string"}, "request_id": {"type": "string"}}, "additionalProperties": true}}, "responses": {"Problem": {"description": "Error (problem+json). `code` is stable; `detail` says what to do.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}}}