{
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "description": "Either a SMELT API key beginning `smelt_`, minted in Studio under Settings, API keys, or a Firebase session token from the Studio app.",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "The HTTP API behind SMELT Studio. Generated from the routes the service serves, so it cannot drift from them.\n\n**Build on the routes tagged `v1`, under `/v1`.** They are the contract: read what you built in Studio, run it, watch it, answer its approval gates, and keep its knowledge base fed. Every `/v1` response names the contract that served it in the `SMELT-API-Version` header. A route published under `/v1` is never removed or renamed without a recorded sunset date, and a build gate enforces that.\n\nEverything else is listed because the service serves it, not because we promise it. Routes tagged `api-key` accept a SMELT API key as a bearer token, which is not the same as a promise: they exist for the Studio browser client and change whenever it does. Routes tagged `studio-only` accept a signed-in browser session only, and answer a key with 403: they move money, replace the workspace's provider credential, or erase the account. Routes tagged `public` need no token and authenticate some other way, by webhook signature or by a secret in the path. Those are not versioned on purpose: Stripe, GitHub and Nango hold those URLs already.\n\nThe specification describes paths, methods, who may call each one, and the responses the router itself decides. It does not describe request or response bodies: nothing on this side can derive them from the router, and a hand-written body schema is the drift this file exists to prevent.",
    "title": "SMELT Wire API",
    "version": "0.1.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/": {
      "get": {
        "operationId": "root",
        "responses": {
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [],
        "summary": "Root",
        "tags": [
          "public"
        ]
      }
    },
    "/a2a/discover": {
      "post": {
        "operationId": "discover_skills",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Discover skills",
        "tags": [
          "api-key"
        ]
      }
    },
    "/account/analytics": {
      "get": {
        "operationId": "account_analytics",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Account analytics",
        "tags": [
          "api-key"
        ]
      }
    },
    "/account/approvals": {
      "get": {
        "operationId": "account_approvals",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Account approvals",
        "tags": [
          "api-key"
        ]
      }
    },
    "/account/deletion": {
      "delete": {
        "operationId": "cancel_account_deletion",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "403": {
            "description": "An API key was presented. This route is for a signed-in person only."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Cancel account deletion",
        "tags": [
          "studio-only"
        ]
      },
      "get": {
        "operationId": "get_account_deletion",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get account deletion",
        "tags": [
          "api-key"
        ]
      },
      "post": {
        "operationId": "request_account_deletion",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "403": {
            "description": "An API key was presented. This route is for a signed-in person only."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Request account deletion",
        "tags": [
          "studio-only"
        ]
      }
    },
    "/account/notifications": {
      "get": {
        "operationId": "get_notification_prefs",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get notification prefs",
        "tags": [
          "api-key"
        ]
      },
      "patch": {
        "operationId": "update_notification_prefs",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update notification prefs",
        "tags": [
          "api-key"
        ]
      }
    },
    "/account/runs": {
      "get": {
        "operationId": "account_runs",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Account runs",
        "tags": [
          "api-key"
        ]
      }
    },
    "/account/stats": {
      "get": {
        "operationId": "account_stats",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Account stats",
        "tags": [
          "api-key"
        ]
      }
    },
    "/account/workflows": {
      "get": {
        "operationId": "account_workflows",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Account workflows",
        "tags": [
          "api-key"
        ]
      }
    },
    "/agents": {
      "get": {
        "operationId": "list_agents",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List agents",
        "tags": [
          "api-key"
        ]
      },
      "post": {
        "operationId": "create_agent",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create agent",
        "tags": [
          "api-key"
        ]
      }
    },
    "/agents/{id}": {
      "delete": {
        "operationId": "delete_agent",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete agent",
        "tags": [
          "api-key"
        ]
      },
      "get": {
        "operationId": "get_agent",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get agent",
        "tags": [
          "api-key"
        ]
      },
      "patch": {
        "operationId": "update_agent",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update agent",
        "tags": [
          "api-key"
        ]
      }
    },
    "/agents/{id}/memories": {
      "delete": {
        "operationId": "clear_agent_memories",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Clear agent memories",
        "tags": [
          "api-key"
        ]
      },
      "get": {
        "operationId": "list_agent_memories",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List agent memories",
        "tags": [
          "api-key"
        ]
      }
    },
    "/agents/{id}/memories/{memory_id}": {
      "delete": {
        "operationId": "delete_agent_memory",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "memory_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete agent memory",
        "tags": [
          "api-key"
        ]
      }
    },
    "/agents/{id}/publish": {
      "post": {
        "operationId": "publish_agent",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Publish agent",
        "tags": [
          "api-key"
        ]
      }
    },
    "/agents/{id}/usage": {
      "get": {
        "operationId": "agent_usage",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Agent usage",
        "tags": [
          "api-key"
        ]
      }
    },
    "/api-keys": {
      "get": {
        "operationId": "list_api_keys",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "403": {
            "description": "An API key was presented. This route is for a signed-in person only."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List api keys",
        "tags": [
          "studio-only"
        ]
      },
      "post": {
        "operationId": "create_api_key",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "403": {
            "description": "An API key was presented. This route is for a signed-in person only."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create api key",
        "tags": [
          "studio-only"
        ]
      }
    },
    "/api-keys/{id}": {
      "delete": {
        "operationId": "revoke_api_key",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "403": {
            "description": "An API key was presented. This route is for a signed-in person only."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Revoke api key",
        "tags": [
          "studio-only"
        ]
      }
    },
    "/billing/checkout": {
      "post": {
        "operationId": "create_checkout",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "403": {
            "description": "An API key was presented. This route is for a signed-in person only."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create checkout",
        "tags": [
          "studio-only"
        ]
      }
    },
    "/billing/portal": {
      "post": {
        "operationId": "create_portal",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "403": {
            "description": "An API key was presented. This route is for a signed-in person only."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create portal",
        "tags": [
          "studio-only"
        ]
      }
    },
    "/billing/top-up": {
      "post": {
        "operationId": "create_top_up",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "403": {
            "description": "An API key was presented. This route is for a signed-in person only."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create top up",
        "tags": [
          "studio-only"
        ]
      }
    },
    "/billing/usage": {
      "get": {
        "operationId": "get_usage",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get usage",
        "tags": [
          "api-key"
        ]
      }
    },
    "/byok/key": {
      "delete": {
        "operationId": "delete_byok_key",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "403": {
            "description": "An API key was presented. This route is for a signed-in person only."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete byok key",
        "tags": [
          "studio-only"
        ]
      },
      "get": {
        "operationId": "get_byok_status",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get byok status",
        "tags": [
          "api-key"
        ]
      },
      "post": {
        "operationId": "save_byok_key",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "403": {
            "description": "An API key was presented. This route is for a signed-in person only."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Save byok key",
        "tags": [
          "studio-only"
        ]
      }
    },
    "/chat/{workflow_id}": {
      "post": {
        "operationId": "send_message",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Send message",
        "tags": [
          "api-key"
        ]
      }
    },
    "/connections": {
      "get": {
        "operationId": "list_connections",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List connections",
        "tags": [
          "api-key"
        ]
      },
      "post": {
        "operationId": "create_connection",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create connection",
        "tags": [
          "api-key"
        ]
      }
    },
    "/connections/api-key": {
      "post": {
        "operationId": "create_api_key_connection",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create api key connection",
        "tags": [
          "api-key"
        ]
      }
    },
    "/connections/custom-a2a": {
      "post": {
        "operationId": "create_custom_a2a_connection",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create custom a2a connection",
        "tags": [
          "api-key"
        ]
      }
    },
    "/connections/custom-mcp": {
      "post": {
        "operationId": "create_custom_mcp_connection",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create custom mcp connection",
        "tags": [
          "api-key"
        ]
      }
    },
    "/connections/{id}": {
      "delete": {
        "operationId": "delete_connection",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete connection",
        "tags": [
          "api-key"
        ]
      }
    },
    "/dashboard/approvals": {
      "get": {
        "operationId": "list_approvals",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List approvals",
        "tags": [
          "api-key"
        ]
      }
    },
    "/forms/{token}": {
      "get": {
        "operationId": "get_form",
        "parameters": [
          {
            "in": "path",
            "name": "token",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [],
        "summary": "Get form",
        "tags": [
          "public"
        ]
      },
      "post": {
        "operationId": "submit_form",
        "parameters": [
          {
            "in": "path",
            "name": "token",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [],
        "summary": "Submit form",
        "tags": [
          "public"
        ]
      }
    },
    "/health": {
      "get": {
        "operationId": "health",
        "responses": {
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [],
        "summary": "Health",
        "tags": [
          "public"
        ]
      }
    },
    "/health/live": {
      "get": {
        "operationId": "liveness",
        "responses": {
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [],
        "summary": "Liveness",
        "tags": [
          "public"
        ]
      }
    },
    "/integrations/github/repositories": {
      "get": {
        "operationId": "list_repositories",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List repositories",
        "tags": [
          "api-key"
        ]
      }
    },
    "/internal/knowledge/documents/{id}/status": {
      "patch": {
        "operationId": "update_document_status",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [],
        "summary": "Update document status",
        "tags": [
          "public"
        ]
      }
    },
    "/invites/{token}/accept": {
      "post": {
        "operationId": "accept_invite",
        "parameters": [
          {
            "in": "path",
            "name": "token",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Accept invite",
        "tags": [
          "api-key"
        ]
      }
    },
    "/knowledge/collections": {
      "get": {
        "operationId": "list_collections",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List collections",
        "tags": [
          "api-key"
        ]
      },
      "post": {
        "operationId": "create_collection",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create collection",
        "tags": [
          "api-key"
        ]
      }
    },
    "/knowledge/collections/{id}": {
      "delete": {
        "operationId": "delete_collection",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete collection",
        "tags": [
          "api-key"
        ]
      },
      "get": {
        "operationId": "get_collection",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get collection",
        "tags": [
          "api-key"
        ]
      },
      "patch": {
        "operationId": "update_collection",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update collection",
        "tags": [
          "api-key"
        ]
      }
    },
    "/knowledge/collections/{id}/documents": {
      "get": {
        "operationId": "list_documents",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List documents",
        "tags": [
          "api-key"
        ]
      },
      "post": {
        "operationId": "create_document",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create document",
        "tags": [
          "api-key"
        ]
      }
    },
    "/knowledge/documents/{id}": {
      "delete": {
        "operationId": "delete_document",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete document",
        "tags": [
          "api-key"
        ]
      }
    },
    "/knowledge/documents/{id}/content": {
      "get": {
        "operationId": "get_document_content",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get document content",
        "tags": [
          "api-key"
        ]
      }
    },
    "/knowledge/documents/{id}/download-url": {
      "get": {
        "operationId": "download_document_url",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Download document url",
        "tags": [
          "api-key"
        ]
      }
    },
    "/mcp/discover": {
      "post": {
        "operationId": "discover_tools",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Discover tools",
        "tags": [
          "api-key"
        ]
      }
    },
    "/models": {
      "get": {
        "operationId": "list_models",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List models",
        "tags": [
          "api-key"
        ]
      }
    },
    "/projects": {
      "get": {
        "operationId": "list_projects",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List projects",
        "tags": [
          "api-key"
        ]
      },
      "post": {
        "operationId": "create_project",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create project",
        "tags": [
          "api-key"
        ]
      }
    },
    "/projects/{id}": {
      "delete": {
        "operationId": "delete_project",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete project",
        "tags": [
          "api-key"
        ]
      },
      "get": {
        "operationId": "get_project",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get project",
        "tags": [
          "api-key"
        ]
      },
      "patch": {
        "operationId": "update_project",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update project",
        "tags": [
          "api-key"
        ]
      }
    },
    "/projects/{id}/analytics": {
      "get": {
        "operationId": "project_analytics",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Project analytics",
        "tags": [
          "api-key"
        ]
      }
    },
    "/projects/{id}/stats": {
      "get": {
        "operationId": "project_stats",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Project stats",
        "tags": [
          "api-key"
        ]
      }
    },
    "/projects/{project_id}/workflows": {
      "get": {
        "operationId": "list_workflows",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List workflows",
        "tags": [
          "api-key"
        ]
      },
      "post": {
        "operationId": "create_workflow",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create workflow",
        "tags": [
          "api-key"
        ]
      }
    },
    "/reports/{run_id}/{block_id}": {
      "get": {
        "operationId": "download_report",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "block_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Download report",
        "tags": [
          "api-key"
        ]
      }
    },
    "/runs/{id}": {
      "get": {
        "operationId": "get_run",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get run",
        "tags": [
          "api-key"
        ]
      }
    },
    "/runs/{id}/approve": {
      "post": {
        "operationId": "approve",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Approve",
        "tags": [
          "api-key"
        ]
      }
    },
    "/runs/{id}/cancel": {
      "post": {
        "operationId": "cancel_run",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Cancel run",
        "tags": [
          "api-key"
        ]
      }
    },
    "/runs/{id}/reject": {
      "post": {
        "operationId": "reject",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Reject",
        "tags": [
          "api-key"
        ]
      }
    },
    "/runs/{run_id}/events": {
      "get": {
        "operationId": "execution_events",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Execution events",
        "tags": [
          "api-key"
        ]
      }
    },
    "/runs/{run_id}/steps": {
      "get": {
        "operationId": "get_run_steps",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get run steps",
        "tags": [
          "api-key"
        ]
      }
    },
    "/v1/knowledge/collections": {
      "get": {
        "operationId": "v1_list_collections",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List collections",
        "tags": [
          "v1"
        ]
      },
      "post": {
        "operationId": "v1_create_collection",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create collection",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/knowledge/collections/{id}": {
      "delete": {
        "operationId": "v1_delete_collection",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete collection",
        "tags": [
          "v1"
        ]
      },
      "get": {
        "operationId": "v1_get_collection",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get collection",
        "tags": [
          "v1"
        ]
      },
      "patch": {
        "operationId": "v1_update_collection",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update collection",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/knowledge/collections/{id}/documents": {
      "get": {
        "operationId": "v1_list_documents",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List documents",
        "tags": [
          "v1"
        ]
      },
      "post": {
        "operationId": "v1_create_document",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create document",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/knowledge/documents/{id}": {
      "delete": {
        "operationId": "v1_delete_document",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete document",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/projects": {
      "get": {
        "operationId": "v1_list_projects",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List projects",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/projects/{id}": {
      "get": {
        "operationId": "v1_get_project",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get project",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/projects/{project_id}/workflows": {
      "get": {
        "operationId": "v1_list_workflows",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List workflows",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/runs/{id}": {
      "get": {
        "operationId": "v1_get_run",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get run",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/runs/{id}/approve": {
      "post": {
        "operationId": "v1_approve",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Approve",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/runs/{id}/cancel": {
      "post": {
        "operationId": "v1_cancel_run",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Cancel run",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/runs/{id}/reject": {
      "post": {
        "operationId": "v1_reject",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Reject",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/runs/{run_id}/events": {
      "get": {
        "operationId": "v1_execution_events",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Execution events",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/runs/{run_id}/steps": {
      "get": {
        "operationId": "v1_get_run_steps",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get run steps",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/workflows/{id}/run": {
      "post": {
        "operationId": "v1_trigger_run",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Trigger run",
        "tags": [
          "v1"
        ]
      }
    },
    "/v1/workflows/{id}/runs": {
      "get": {
        "operationId": "v1_list_runs",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope. Every response names the contract that served it in the `SMELT-API-Version` header."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List runs",
        "tags": [
          "v1"
        ]
      }
    },
    "/webhooks/github/{workflow_id}": {
      "post": {
        "operationId": "github_webhook",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [],
        "summary": "Github webhook",
        "tags": [
          "public"
        ]
      }
    },
    "/webhooks/ingest/{workflow_id}": {
      "post": {
        "operationId": "ingest_webhook_header",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [],
        "summary": "Ingest webhook header",
        "tags": [
          "public"
        ]
      }
    },
    "/webhooks/ingest/{workflow_id}/{secret}": {
      "post": {
        "operationId": "ingest_webhook",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "secret",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [],
        "summary": "Ingest webhook",
        "tags": [
          "public"
        ]
      }
    },
    "/webhooks/nango": {
      "post": {
        "operationId": "nango_webhook",
        "responses": {
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [],
        "summary": "Nango webhook",
        "tags": [
          "public"
        ]
      }
    },
    "/webhooks/stripe": {
      "post": {
        "operationId": "stripe_webhook",
        "responses": {
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [],
        "summary": "Stripe webhook",
        "tags": [
          "public"
        ]
      }
    },
    "/workflows/{id}": {
      "delete": {
        "operationId": "delete_workflow",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete workflow",
        "tags": [
          "api-key"
        ]
      },
      "get": {
        "operationId": "get_workflow",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get workflow",
        "tags": [
          "api-key"
        ]
      },
      "patch": {
        "operationId": "save_workflow",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Save workflow",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workflows/{id}/form": {
      "get": {
        "operationId": "get_form_url",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get form url",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workflows/{id}/form/rotate-token": {
      "post": {
        "operationId": "rotate_form_token",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Rotate form token",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workflows/{id}/name": {
      "patch": {
        "operationId": "update_workflow_name",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update workflow name",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workflows/{id}/run": {
      "post": {
        "operationId": "trigger_run",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Trigger run",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workflows/{id}/runs": {
      "get": {
        "operationId": "list_runs",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List runs",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workflows/{id}/trigger-sample": {
      "post": {
        "operationId": "trigger_sample",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Trigger sample",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workflows/{id}/trigger-status": {
      "get": {
        "operationId": "get_trigger_status",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get trigger status",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workflows/{id}/versions": {
      "get": {
        "operationId": "list_workflow_versions",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List workflow versions",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workflows/{id}/versions/{version_id}": {
      "get": {
        "operationId": "get_workflow_version",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get workflow version",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workflows/{id}/versions/{version_id}/restore": {
      "post": {
        "operationId": "restore_workflow_version",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Restore workflow version",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workflows/{id}/webhook": {
      "get": {
        "operationId": "get_webhook_url",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get webhook url",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workflows/{id}/webhook/rotate-secret": {
      "post": {
        "operationId": "rotate_webhook_secret",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Rotate webhook secret",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workspace/invites": {
      "get": {
        "operationId": "list_invites",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List invites",
        "tags": [
          "api-key"
        ]
      },
      "post": {
        "operationId": "create_invite",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create invite",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workspace/invites/{invite_id}": {
      "delete": {
        "operationId": "revoke_invite",
        "parameters": [
          {
            "in": "path",
            "name": "invite_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Revoke invite",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workspace/members": {
      "get": {
        "operationId": "list_members",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List members",
        "tags": [
          "api-key"
        ]
      },
      "post": {
        "operationId": "add_member",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Add member",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workspace/members/{account_id}": {
      "delete": {
        "operationId": "remove_member",
        "parameters": [
          {
            "in": "path",
            "name": "account_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Remove member",
        "tags": [
          "api-key"
        ]
      },
      "patch": {
        "operationId": "update_member_role",
        "parameters": [
          {
            "in": "path",
            "name": "account_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update member role",
        "tags": [
          "api-key"
        ]
      }
    },
    "/workspaces": {
      "get": {
        "operationId": "list_workspaces",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "403": {
            "description": "An API key was presented. This route is for a signed-in person only."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List workspaces",
        "tags": [
          "studio-only"
        ]
      },
      "post": {
        "operationId": "create_workspace",
        "responses": {
          "401": {
            "description": "No token, or a token that is unknown, revoked or expired."
          },
          "403": {
            "description": "An API key was presented. This route is for a signed-in person only."
          },
          "429": {
            "description": "The caller's rate limit is spent. Retry-After says when."
          },
          "default": {
            "description": "The handler's own answer. Errors carry the SMELT error envelope."
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create workspace",
        "tags": [
          "studio-only"
        ]
      }
    }
  },
  "servers": [
    {
      "url": "https://api.smelt.gimzware.ai"
    }
  ]
}
