{
  "openapi": "3.1.0",
  "info": {
    "title": "Vaakyo API",
    "description": "Build, run and observe voice agents. Authenticate with an API key (`X-API-Key: vx_...` or `Authorization: Bearer vx_...`); money is in the minor unit of the workspace's billing currency (`currency`: paise for INR, cents for USD). Webhooks and the MCP server are described in the developer docs.",
    "version": "1.0.0"
  },
  "paths": {
    "/api/v1/auth/signup": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Signup",
        "description": "A client company signs up: its user, its workspace (awaiting KYC) and welcome credits. Limited per\nclient address and per email domain (core/limits.py). Signs the browser in (cookies).",
        "operationId": "signup_api_auth_signup_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Signup"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Signup Api Auth Signup Post"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "public",
          "api_key": false
        },
        "security": [],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/auth/login": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Login",
        "description": "Failed sign-ins are limited per email and per client address (Redis, core/limits.py). A browser gets\nits cookies (app/core/sessions.py); a program (no Origin header) also gets a bearer `token`.",
        "operationId": "login_api_auth_login_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Login"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Login Api Auth Login Post"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "public",
          "api_key": false
        },
        "security": [],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/auth/login/2fa": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Login Two Factor",
        "operationId": "login_two_factor_api_auth_login_2fa_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TwoFactorLogin"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Login Two Factor Api Auth Login 2Fa Post"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "public",
          "api_key": false
        },
        "security": [],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/auth/me": {
      "get": {
        "tags": [
          "account"
        ],
        "summary": "Me",
        "operationId": "me_api_auth_me_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Me Api Auth Me Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/invites": {
      "get": {
        "tags": [
          "account"
        ],
        "summary": "List Invites",
        "operationId": "list_invites_api_invites_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response List Invites Api Invites Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "members.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Create Invite",
        "operationId": "create_invite_api_invites_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewInvite"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Create Invite Api Invites Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "members.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/invites/{invite_id}": {
      "delete": {
        "tags": [
          "account"
        ],
        "summary": "Revoke Invite",
        "operationId": "revoke_invite_api_invites__invite_id__delete",
        "parameters": [
          {
            "name": "invite_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Invite Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "members.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/invites/{token}": {
      "get": {
        "tags": [
          "account"
        ],
        "summary": "Invite Info",
        "operationId": "invite_info_api_invites__token__get",
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Token"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Invite Info Api Invites  Token  Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "public",
          "api_key": false
        },
        "security": []
      }
    },
    "/api/v1/invites/{token}/accept": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Accept Invite",
        "description": "A new user is signed in (cookies, or a bearer `token` for programs). Someone with an account\naccepts in the session they are signed in with.",
        "operationId": "accept_invite_api_invites__token__accept_post",
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Token"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AcceptInvite"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Accept Invite Api Invites  Token  Accept Post"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "public",
          "api_key": false
        },
        "security": []
      }
    },
    "/api/v1/members": {
      "get": {
        "tags": [
          "account"
        ],
        "summary": "List Members",
        "operationId": "list_members_api_members_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response List Members Api Members Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "members.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/members/{user_id}": {
      "patch": {
        "tags": [
          "account"
        ],
        "summary": "Change Role",
        "operationId": "change_role_api_members__user_id__patch",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeRole"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Change Role Api Members  User Id  Patch"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "members.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "account"
        ],
        "summary": "Remove Member",
        "operationId": "remove_member_api_members__user_id__delete",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "members.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/keys": {
      "get": {
        "tags": [
          "account"
        ],
        "summary": "List Keys",
        "operationId": "list_keys_api_keys_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response List Keys Api Keys Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Create Key",
        "operationId": "create_key_api_keys_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewKey"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Create Key Api Keys Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/keys/{key_id}": {
      "delete": {
        "tags": [
          "account"
        ],
        "summary": "Revoke Key",
        "operationId": "revoke_key_api_keys__key_id__delete",
        "parameters": [
          {
            "name": "key_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Key Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/workspace": {
      "get": {
        "tags": [
          "workspace"
        ],
        "summary": "Get Workspace",
        "operationId": "get_workspace_api_workspace_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Get Workspace Api Workspace Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "workspace"
        ],
        "summary": "Rename Workspace",
        "operationId": "rename_workspace_api_workspace_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceName"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Rename Workspace Api Workspace Patch"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "members.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/workspace/system-logs": {
      "patch": {
        "tags": [
          "workspace"
        ],
        "summary": "Set System Logs",
        "description": "Show or hide the server log (Logs > System) for this workspace; off by default.",
        "operationId": "set_system_logs_api_workspace_system_logs_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SystemLogs"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Set System Logs Api Workspace System Logs Patch"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "members.manage",
          "onboarding": false,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/kyc": {
      "get": {
        "tags": [
          "workspace"
        ],
        "summary": "Get Kyc",
        "operationId": "get_kyc_api_kyc_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Get Kyc Api Kyc Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "put": {
        "tags": [
          "workspace"
        ],
        "summary": "Save Kyc",
        "operationId": "save_kyc_api_kyc_put",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KycUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Save Kyc Api Kyc Put"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "kyc.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/workspace/profile": {
      "patch": {
        "tags": [
          "workspace"
        ],
        "summary": "Update Profile",
        "description": "Update the organization's address, GSTIN and contact details after KYC approval. Legal name,\nbusiness type and PAN can't be changed here. Invoices already issued keep their details.",
        "operationId": "update_profile_api_workspace_profile_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProfileUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Update Profile Api Workspace Profile Patch"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "kyc.manage",
          "onboarding": false,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/kyc/documents": {
      "post": {
        "tags": [
          "workspace"
        ],
        "summary": "Upload Document",
        "operationId": "upload_document_api_kyc_documents_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_document_api_kyc_documents_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Upload Document Api Kyc Documents Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "kyc.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/kyc/documents/{doc_id}": {
      "delete": {
        "tags": [
          "workspace"
        ],
        "summary": "Delete Document",
        "operationId": "delete_document_api_kyc_documents__doc_id__delete",
        "parameters": [
          {
            "name": "doc_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Doc Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "kyc.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "workspace"
        ],
        "summary": "Get Document",
        "operationId": "get_document_api_kyc_documents__doc_id__get",
        "parameters": [
          {
            "name": "doc_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Doc Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "kyc.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/kyc/submit": {
      "post": {
        "tags": [
          "workspace"
        ],
        "summary": "Submit Kyc",
        "operationId": "submit_kyc_api_kyc_submit_post",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Submit Kyc Api Kyc Submit Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "kyc.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/billing": {
      "get": {
        "tags": [
          "workspace"
        ],
        "summary": "Billing",
        "operationId": "billing_api_billing_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Billing Api Billing Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/billing/ledger": {
      "get": {
        "tags": [
          "workspace"
        ],
        "summary": "Ledger",
        "description": "Credit changes, newest first; each row carries its `currency` (a currency switch writes the old\nbalance out and the converted one in).",
        "operationId": "ledger_api_billing_ledger_get",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": "Skip"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Ledger Api Billing Ledger Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/billing/payments": {
      "get": {
        "tags": [
          "workspace"
        ],
        "summary": "Payments",
        "operationId": "payments_api_billing_payments_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response Payments Api Billing Payments Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/billing/topup": {
      "post": {
        "tags": [
          "workspace"
        ],
        "summary": "Topup",
        "description": "Start a checkout in the workspace's currency (`amount_paise` is paise or cents). GST is added,\nexcept on a USD top-up by a buyer outside India (no GSTIN or Indian state: an export of services).",
        "operationId": "topup_api_billing_topup_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Topup"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Topup Api Billing Topup Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/billing/payments/{payment_id}/complete": {
      "post": {
        "tags": [
          "workspace"
        ],
        "summary": "Complete Payment",
        "description": "The simulated gateway's callback. Only a `created` payment can complete, exactly once. There is no\nreal gateway yet: a workspace may only mark its checkout failed (success is 403 unless\nPAYMENTS_SIMULATED_SELF_COMPLETE is on); the platform team completes it as paid\n(`POST /api/admin/payments/{id}/complete`).",
        "operationId": "complete_payment_api_billing_payments__payment_id__complete_post",
        "parameters": [
          {
            "name": "payment_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Payment Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Complete"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Complete Payment Api Billing Payments  Payment Id  Complete Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/workspace/limits": {
      "get": {
        "tags": [
          "workspace"
        ],
        "summary": "Limits",
        "operationId": "limits_api_workspace_limits_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Limits Api Workspace Limits Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/workspace/limits/requests": {
      "get": {
        "tags": [
          "workspace"
        ],
        "summary": "Limit Requests",
        "operationId": "limit_requests_api_workspace_limits_requests_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response Limit Requests Api Workspace Limits Requests Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "post": {
        "tags": [
          "workspace"
        ],
        "summary": "Request Limit",
        "operationId": "request_limit_api_workspace_limits_requests_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LimitRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Request Limit Api Workspace Limits Requests Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "members.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/providers": {
      "get": {
        "tags": [
          "workspace"
        ],
        "summary": "Usable Providers",
        "operationId": "usable_providers_api_providers_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response Usable Providers Api Providers Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/agent-shares": {
      "post": {
        "tags": [
          "agents"
        ],
        "summary": "Create Share",
        "description": "A link anyone can use to copy this agent (a snapshot of it now) into their own workspace.",
        "operationId": "create_share_api_agent_shares_post",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewShare"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Create Share Api Agent Shares Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "get": {
        "tags": [
          "agents"
        ],
        "summary": "List Shares",
        "operationId": "list_shares_api_agent_shares_get",
        "parameters": [
          {
            "name": "agent_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "title": "Response List Shares Api Agent Shares Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agent-shares/{token}": {
      "delete": {
        "tags": [
          "agents"
        ],
        "summary": "Revoke Share",
        "operationId": "revoke_share_api_agent_shares__token__delete",
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Token"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "agents"
        ],
        "summary": "Preview Share",
        "description": "Public (no sign-in): what the link copies.",
        "operationId": "preview_share_api_agent_shares__token__get",
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Token"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Preview Share Api Agent Shares  Token  Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "public",
          "api_key": false
        },
        "security": []
      }
    },
    "/api/v1/agent-shares/{token}/copy": {
      "post": {
        "tags": [
          "agents"
        ],
        "summary": "Copy Share",
        "description": "Copy the shared agent into your current workspace. Parts using a provider your workspace can't\nuse go back to the default; `notes` says what changed and `left_out` what to add yourself.",
        "operationId": "copy_share_api_agent_shares__token__copy_post",
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Token"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Copy Share Api Agent Shares  Token  Copy Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/masters": {
      "get": {
        "tags": [
          "billing"
        ],
        "summary": "Public Masters",
        "operationId": "public_masters_api_masters_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Public Masters Api Masters Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/billing/plan": {
      "get": {
        "tags": [
          "billing"
        ],
        "summary": "My Plan",
        "operationId": "my_plan_api_billing_plan_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response My Plan Api Billing Plan Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "post": {
        "tags": [
          "billing"
        ],
        "summary": "Switch to another plan",
        "description": "Move the workspace to a public, self-serve plan at once (workspace owners). A plan with a\nmonthly fee takes the first month from credits now (402 when the credits don't cover it) and\nthen every 30 days, each with an invoice, and grants its `included_minutes` for each paid month (unused\nminutes don't roll over); a plan without one ends the monthly charges. There is\nno proration and no refund of what was paid for the old plan. Custom plans are arranged with\nsales instead.",
        "operationId": "switch_plan_api_billing_plan_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SwitchPlan"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Switch Plan Api Billing Plan Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/billing/packs": {
      "get": {
        "tags": [
          "billing"
        ],
        "summary": "Packs",
        "description": "Credit packs on sale, priced in the workspace's currency (each carries `currency`).",
        "operationId": "packs_api_billing_packs_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response Packs Api Billing Packs Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/billing/invoices": {
      "get": {
        "tags": [
          "billing"
        ],
        "summary": "My Invoices",
        "operationId": "my_invoices_api_billing_invoices_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response My Invoices Api Billing Invoices Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/billing/invoices/{invoice_id}/pdf": {
      "get": {
        "tags": [
          "billing"
        ],
        "summary": "My Invoice Pdf",
        "operationId": "my_invoice_pdf_api_billing_invoices__invoice_id__pdf_get",
        "parameters": [
          {
            "name": "invoice_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Invoice Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/guardrails/rules": {
      "get": {
        "tags": [
          "guardrails"
        ],
        "summary": "Workspace Rules",
        "description": "The platform rules every agent must follow (enabled ones), and how strikes work.",
        "operationId": "workspace_rules_api_guardrails_rules_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Workspace Rules Api Guardrails Rules Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/guardrails/summary": {
      "get": {
        "tags": [
          "guardrails"
        ],
        "summary": "Workspace Summary",
        "description": "The dashboard notice: violation incidents not yet acknowledged, and frozen agents.",
        "operationId": "workspace_summary_api_guardrails_summary_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Workspace Summary Api Guardrails Summary Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/guardrails/incidents": {
      "get": {
        "tags": [
          "guardrails"
        ],
        "summary": "Workspace Incidents",
        "description": "The workspace's guardrail incidents, newest first.",
        "operationId": "workspace_incidents_api_guardrails_incidents_get",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80,
              "description": "comma-separated statuses",
              "default": "",
              "title": "Status"
            },
            "description": "comma-separated statuses"
          },
          {
            "name": "agent_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "",
              "title": "Agent Id"
            }
          },
          {
            "name": "call_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "",
              "title": "Call Id"
            }
          },
          {
            "name": "severity",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(|warning|violation)$",
              "default": "",
              "title": "Severity"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": "Skip"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Workspace Incidents Api Guardrails Incidents Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/guardrails/incidents/{incident_id}": {
      "get": {
        "tags": [
          "guardrails"
        ],
        "summary": "Workspace Incident",
        "operationId": "workspace_incident_api_guardrails_incidents__incident_id__get",
        "parameters": [
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Incident Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Workspace Incident Api Guardrails Incidents  Incident Id  Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/guardrails/incidents/{incident_id}/acknowledge": {
      "post": {
        "tags": [
          "guardrails"
        ],
        "summary": "Acknowledge",
        "description": "Acknowledge a notice (clears it from the dashboard banner; the strike stays).",
        "operationId": "acknowledge_api_guardrails_incidents__incident_id__acknowledge_post",
        "parameters": [
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Incident Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Acknowledge Api Guardrails Incidents  Incident Id  Acknowledge Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/guardrails/incidents/{incident_id}/appeal": {
      "post": {
        "tags": [
          "guardrails"
        ],
        "summary": "Appeal",
        "description": "Ask the platform team to review an incident (a note: why it's wrong, or what was fixed).",
        "operationId": "appeal_api_guardrails_incidents__incident_id__appeal_post",
        "parameters": [
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Incident Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Appeal"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Appeal Api Guardrails Incidents  Incident Id  Appeal Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/billing/usage": {
      "get": {
        "tags": [
          "billing"
        ],
        "summary": "Minutes used in a billing month",
        "description": "Call minutes, calls and spend per day for one calendar month (the billing cycle).",
        "operationId": "usage_api_billing_usage_get",
        "parameters": [
          {
            "name": "month",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 7,
              "description": "YYYY-MM (India time); default: this month",
              "default": "",
              "title": "Month"
            },
            "description": "YYYY-MM (India time); default: this month"
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Usage Api Billing Usage Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/billing/plans": {
      "get": {
        "tags": [
          "billing"
        ],
        "summary": "The plans on offer",
        "description": "Public active plans, with the workspace's current one marked, priced in the workspace's\n`currency` (`price_per_minute_paise`, and `monthly_fee_paise`, taken from credits every 30 days).\n`can_switch` says whether this caller (a workspace owner) can move to a plan at once with\nPOST /api/billing/plan; custom plans go to sales (`cta_url`, else `contact_email`). A plan with a fee may\ninclude call minutes in each paid month (`included_minutes`); `plan_minutes_left_seconds`,\n`plan_minutes_total_seconds` and `plan_minutes_cycle_end` say where the current cycle stands.",
        "operationId": "offered_plans_api_billing_plans_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Offered Plans Api Billing Plans Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/billing/lines": {
      "get": {
        "tags": [
          "billing"
        ],
        "summary": "Extra call lines",
        "description": "The workspace's extra call lines: `extra_lines`, the monthly `price_per_line_paise` in its\n`currency`, the cycle (`lines_paid_until`), the plan's `base_concurrency_limit`, the total\n`concurrency_limit` and how many more it may add (`can_add`, up to the platform's ceiling).",
        "operationId": "get_lines_api_billing_lines_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Get Lines Api Billing Lines Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.view",
          "onboarding": true,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "post": {
        "tags": [
          "billing"
        ],
        "summary": "Buy extra call lines",
        "description": "Add concurrent call lines (workspace owners), charged from credits now: a full month, or what is\nleft of the running lines cycle (prorated by the day). Then every 30 days with an invoice; unpaid past\nthe grace period, the lines are removed. 402 when the credits don't cover it.",
        "operationId": "buy_lines_api_billing_lines_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Lines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Buy Lines Api Billing Lines Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.manage",
          "onboarding": false,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/billing/lines/remove": {
      "post": {
        "tags": [
          "billing"
        ],
        "summary": "Remove extra call lines",
        "description": "Remove lines at once. No refund for the rest of the cycle.",
        "operationId": "remove_lines_api_billing_lines_remove_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Lines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Remove Lines Api Billing Lines Remove Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.manage",
          "onboarding": false,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/billing/coupons/redeem": {
      "post": {
        "tags": [
          "billing"
        ],
        "summary": "Redeem a coupon",
        "description": "A credit coupon adds its credits now; a top-up bonus coupon waits for the next paid top-up\n(the checkout shows the bonus).",
        "operationId": "redeem_coupon_api_billing_coupons_redeem_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Redeem"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Redeem Coupon Api Billing Coupons Redeem Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "billing.manage",
          "onboarding": true,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/caller-id": {
      "get": {
        "tags": [
          "caller id"
        ],
        "summary": "Overview",
        "description": "The workspace's Truecaller requests (newest first), what verification costs it, the business\ncategories to choose from and whether it can ask.",
        "operationId": "overview_api_caller_id_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Overview Api Caller Id Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "post": {
        "tags": [
          "caller id"
        ],
        "summary": "Ask",
        "description": "Ask for Truecaller verification of one of the workspace's numbers: the brand name callers see\n(3-40 characters), a square logo (PNG or JPEG, under 2 MB, at least 200×200), the business\ncategory and the usual reason for calling. The platform team reviews it; fees start once verified.",
        "operationId": "ask_api_caller_id_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_ask_api_caller_id_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Ask Api Caller Id Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "numbers.manage",
          "onboarding": false,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/caller-id/{request_id}/logo": {
      "get": {
        "tags": [
          "caller id"
        ],
        "summary": "Logo",
        "operationId": "logo_api_caller_id__request_id__logo_get",
        "parameters": [
          {
            "name": "request_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Request Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/caller-id/{request_id}/withdraw": {
      "post": {
        "tags": [
          "caller id"
        ],
        "summary": "Withdraw",
        "operationId": "withdraw_api_caller_id__request_id__withdraw_post",
        "parameters": [
          {
            "name": "request_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Request Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Withdraw Api Caller Id  Request Id  Withdraw Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "numbers.manage",
          "onboarding": false,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/caller-id/{request_id}/remove": {
      "post": {
        "tags": [
          "caller id"
        ],
        "summary": "Stop",
        "description": "Stop a verification (its monthly fee stops; Truecaller delists the number).",
        "operationId": "stop_api_caller_id__request_id__remove_post",
        "parameters": [
          {
            "name": "request_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Request Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Stop Api Caller Id  Request Id  Remove Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "numbers.manage",
          "onboarding": false,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/webhooks/events": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "Event Types",
        "description": "The events an endpoint can subscribe to.",
        "operationId": "event_types_api_webhooks_events_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array",
                  "title": "Response Event Types Api Webhooks Events Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/webhooks": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "List Endpoints",
        "operationId": "list_endpoints_api_webhooks_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response List Endpoints Api Webhooks Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "post": {
        "tags": [
          "webhooks"
        ],
        "summary": "Create Endpoint",
        "operationId": "create_endpoint_api_webhooks_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Endpoint"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Create Endpoint Api Webhooks Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/webhooks/{endpoint_id}": {
      "patch": {
        "tags": [
          "webhooks"
        ],
        "summary": "Update Endpoint",
        "operationId": "update_endpoint_api_webhooks__endpoint_id__patch",
        "parameters": [
          {
            "name": "endpoint_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Endpoint Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EndpointPatch"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Update Endpoint Api Webhooks  Endpoint Id  Patch"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "webhooks"
        ],
        "summary": "Delete Endpoint",
        "operationId": "delete_endpoint_api_webhooks__endpoint_id__delete",
        "parameters": [
          {
            "name": "endpoint_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Endpoint Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/webhooks/{endpoint_id}/rotate-secret": {
      "post": {
        "tags": [
          "webhooks"
        ],
        "summary": "Rotate Secret",
        "operationId": "rotate_secret_api_webhooks__endpoint_id__rotate_secret_post",
        "parameters": [
          {
            "name": "endpoint_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Endpoint Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Rotate Secret Api Webhooks  Endpoint Id  Rotate Secret Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/webhooks/{endpoint_id}/test": {
      "post": {
        "tags": [
          "webhooks"
        ],
        "summary": "Test Endpoint",
        "description": "Send a `ping` now (in this request, not via the queue) and log it like any delivery.",
        "operationId": "test_endpoint_api_webhooks__endpoint_id__test_post",
        "parameters": [
          {
            "name": "endpoint_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Endpoint Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Test Endpoint Api Webhooks  Endpoint Id  Test Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/webhooks/default-secret": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "Default Secret Hint",
        "operationId": "default_secret_hint_api_webhooks_default_secret_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Default Secret Hint Api Webhooks Default Secret Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/webhooks/default-secret/rotate": {
      "post": {
        "tags": [
          "webhooks"
        ],
        "summary": "Rotate Default Secret",
        "operationId": "rotate_default_secret_api_webhooks_default_secret_rotate_post",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Rotate Default Secret Api Webhooks Default Secret Rotate Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/webhooks/deliveries": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "Deliveries",
        "description": "Webhook deliveries of the workspace, newest first: event, URL, status, attempts, the last\nresponse code and latency.",
        "operationId": "deliveries_api_webhooks_deliveries_get",
        "parameters": [
          {
            "name": "endpoint_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "description": "an endpoint id, `agent` (agent URLs) or `campaign` (campaign URLs)",
              "default": "",
              "title": "Endpoint Id"
            },
            "description": "an endpoint id, `agent` (agent URLs) or `campaign` (campaign URLs)"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 40,
              "description": "pending, delivered, retrying, failed",
              "default": "",
              "title": "Status"
            },
            "description": "pending, delivered, retrying, failed"
          },
          {
            "name": "call_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "",
              "title": "Call Id"
            }
          },
          {
            "name": "event_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200,
              "description": "comma-separated event types",
              "default": "",
              "title": "Event Type"
            },
            "description": "comma-separated event types"
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "created at or after this time (ISO 8601)",
              "title": "Since"
            },
            "description": "created at or after this time (ISO 8601)"
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "created before this time (ISO 8601)",
              "title": "Until"
            },
            "description": "created before this time (ISO 8601)"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": "Skip"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Deliveries Api Webhooks Deliveries Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/webhooks/deliveries/{delivery_id}": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "Delivery",
        "operationId": "delivery_api_webhooks_deliveries__delivery_id__get",
        "parameters": [
          {
            "name": "delivery_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Delivery Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Delivery Api Webhooks Deliveries  Delivery Id  Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/webhooks/deliveries/{delivery_id}/retry": {
      "post": {
        "tags": [
          "webhooks"
        ],
        "summary": "Retry",
        "operationId": "retry_api_webhooks_deliveries__delivery_id__retry_post",
        "parameters": [
          {
            "name": "delivery_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Delivery Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Retry Api Webhooks Deliveries  Delivery Id  Retry Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/account": {
      "get": {
        "tags": [
          "account"
        ],
        "summary": "Account",
        "operationId": "account_api_account_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Account Api Account Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "delete": {
        "tags": [
          "account"
        ],
        "summary": "Delete Account",
        "operationId": "delete_account_api_account_delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Password"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "account"
        ],
        "summary": "Update Profile",
        "operationId": "update_profile_api_account_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Profile"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Update Profile Api Account Patch"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/account/email": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Change Email",
        "operationId": "change_email_api_account_email_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailChange"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Change Email Api Account Email Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/account/password": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Change Password",
        "operationId": "change_password_api_account_password_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PasswordChange"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Change Password Api Account Password Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/account/sessions": {
      "get": {
        "tags": [
          "account"
        ],
        "summary": "Sessions",
        "operationId": "sessions_api_account_sessions_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response Sessions Api Account Sessions Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/account/sessions/{session_id}": {
      "delete": {
        "tags": [
          "account"
        ],
        "summary": "Revoke Session",
        "operationId": "revoke_session_api_account_sessions__session_id__delete",
        "parameters": [
          {
            "name": "session_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Session Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/account/sessions/revoke-others": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Revoke Others",
        "operationId": "revoke_others_api_account_sessions_revoke_others_post",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "type": "integer"
                  },
                  "type": "object",
                  "title": "Response Revoke Others Api Account Sessions Revoke Others Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/auth/logout": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Logout",
        "description": "Ends the session signed in with (header or cookie; with an expired access cookie, the refresh\ncookie's session) and clears the browser's cookies. Always 204 unless the CSRF check fails.",
        "operationId": "logout_api_auth_logout_post",
        "responses": {
          "204": {
            "description": "Successful Response"
          }
        },
        "x-voxa-auth": {
          "kind": "public",
          "api_key": false
        },
        "security": [],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/account/2fa/setup": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Setup 2Fa",
        "operationId": "setup_2fa_api_account_2fa_setup_post",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": "object",
                  "title": "Response Setup 2Fa Api Account 2Fa Setup Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/account/2fa/enable": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Enable 2Fa",
        "operationId": "enable_2fa_api_account_2fa_enable_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Code"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Enable 2Fa Api Account 2Fa Enable Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/account/2fa/disable": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Disable 2Fa",
        "operationId": "disable_2fa_api_account_2fa_disable_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Disable2FA"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "type": "boolean"
                  },
                  "type": "object",
                  "title": "Response Disable 2Fa Api Account 2Fa Disable Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/search": {
      "get": {
        "tags": [
          "account"
        ],
        "summary": "Search",
        "operationId": "search_api_search_get",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 80,
              "title": "Q"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Search Api Search Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "signed_in",
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/healthz": {
      "get": {
        "tags": [
          "observe"
        ],
        "summary": "Healthz",
        "operationId": "healthz_api_healthz_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": "object",
                  "title": "Response Healthz Api Healthz Get"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "public",
          "api_key": false
        },
        "security": [],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/health": {
      "get": {
        "tags": [
          "observe"
        ],
        "summary": "Healthz",
        "operationId": "healthz_api_health_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": "object",
                  "title": "Response Healthz Api Health Get"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "public",
          "api_key": false
        },
        "security": [],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/stats": {
      "get": {
        "tags": [
          "observe"
        ],
        "summary": "Stats",
        "operationId": "stats_api_stats_get",
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 90,
              "minimum": 1,
              "default": 7,
              "title": "Days"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Stats Api Stats Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/logs": {
      "get": {
        "tags": [
          "observe"
        ],
        "summary": "Logs",
        "operationId": "logs_api_logs_get",
        "parameters": [
          {
            "name": "level",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 10,
              "default": "",
              "title": "Level"
            }
          },
          {
            "name": "source",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 60,
              "default": "",
              "title": "Source"
            }
          },
          {
            "name": "call_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "",
              "title": "Call Id"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 120,
              "default": "",
              "title": "Q"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "at or after this time (ISO 8601)",
              "title": "Since"
            },
            "description": "at or after this time (ISO 8601)"
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "before this time (ISO 8601)",
              "title": "Until"
            },
            "description": "before this time (ISO 8601)"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500,
              "minimum": 1,
              "default": 100,
              "title": "Limit"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": "Skip"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Logs Api Logs Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "logs.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/logs/sources": {
      "get": {
        "tags": [
          "observe"
        ],
        "summary": "Log Sources",
        "operationId": "log_sources_api_logs_sources_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array",
                  "title": "Response Log Sources Api Logs Sources Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "logs.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/logs/requests": {
      "get": {
        "tags": [
          "observe"
        ],
        "summary": "List API requests",
        "description": "Requests made to the API with this workspace's API keys or connected apps (OAuth), newest first:\nmethod, path (no query string), status, latency, key and request id. Kept for 30 days.",
        "operationId": "api_requests_api_logs_requests_get",
        "parameters": [
          {
            "name": "since",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "from this time (ISO 8601)",
              "title": "Since"
            },
            "description": "from this time (ISO 8601)"
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "before this time (ISO 8601)",
              "title": "Until"
            },
            "description": "before this time (ISO 8601)"
          },
          {
            "name": "method",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 40,
              "description": "comma-separated methods: GET,POST",
              "default": "",
              "title": "Method"
            },
            "description": "comma-separated methods: GET,POST"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 10,
              "description": "a code (404), a class (4xx) or error (>= 400)",
              "default": "",
              "title": "Status"
            },
            "description": "a code (404), a class (4xx) or error (>= 400)"
          },
          {
            "name": "key_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 400,
              "description": "comma-separated key ids (app:<id> for an app)",
              "default": "",
              "title": "Key Id"
            },
            "description": "comma-separated key ids (app:<id> for an app)"
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 120,
              "description": "text in the path",
              "default": "",
              "title": "Q"
            },
            "description": "text in the path"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": "Skip"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Api Requests Api Logs Requests Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/logs/requests/keys": {
      "get": {
        "tags": [
          "observe"
        ],
        "summary": "Keys seen in the API request log",
        "description": "The API keys and connected apps that made requests in the last 30 days (for the key filter).",
        "operationId": "api_request_keys_api_logs_requests_keys_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response Api Request Keys Api Logs Requests Keys Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "keys.manage",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/settings": {
      "get": {
        "tags": [
          "observe"
        ],
        "summary": "Settings",
        "operationId": "settings_api_settings_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Settings Api Settings Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/agents/pricing": {
      "post": {
        "tags": [
          "agents"
        ],
        "summary": "Draft Pricing",
        "description": "The approximate price per minute of an unsaved agent configuration, by component (transcriber,\nLLM, voice, telephony, platform). Never less than the plan's price per minute (`floor_applied`).",
        "operationId": "draft_pricing_api_agents_pricing_post",
        "parameters": [
          {
            "name": "channel",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "phone",
                "web"
              ],
              "type": "string",
              "description": "phone (with telephony) or web (a browser test call)",
              "default": "phone",
              "title": "Channel"
            },
            "description": "phone (with telephony) or web (a browser test call)"
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PricingDraft"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Draft Pricing Api Agents Pricing Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/pricing": {
      "get": {
        "tags": [
          "agents"
        ],
        "summary": "Agent Pricing",
        "description": "The agent's approximate price per minute, by component, from typical usage per minute (see\n`assumptions`). Calls are charged for what they actually use, never less than the plan's price.",
        "operationId": "agent_pricing_api_agents__agent_id__pricing_get",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "channel",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "phone",
                "web"
              ],
              "type": "string",
              "description": "phone (with telephony) or web (a browser test call)",
              "default": "phone",
              "title": "Channel"
            },
            "description": "phone (with telephony) or web (a browser test call)"
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Agent Pricing Api Agents  Agent Id  Pricing Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/ambient": {
      "get": {
        "tags": [
          "agents"
        ],
        "summary": "List Sounds",
        "description": "The presets, then this workspace's uploads (newest first). Use `id` as `call.ambient_sound`.",
        "operationId": "list_sounds_api_ambient_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response List Sounds Api Ambient Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "post": {
        "tags": [
          "agents"
        ],
        "summary": "Upload Sound",
        "operationId": "upload_sound_api_ambient_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_sound_api_ambient_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Upload Sound Api Ambient Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/ambient/{sound}/audio": {
      "get": {
        "tags": [
          "agents"
        ],
        "summary": "Sound Audio",
        "description": "The clip as a WAV (16 kHz mono) for a preview.",
        "operationId": "sound_audio_api_ambient__sound__audio_get",
        "parameters": [
          {
            "name": "sound",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Sound"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/ambient/{sound}": {
      "delete": {
        "tags": [
          "agents"
        ],
        "summary": "Delete Sound",
        "operationId": "delete_sound_api_ambient__sound__delete",
        "parameters": [
          {
            "name": "sound",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Sound"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/tests": {
      "get": {
        "tags": [
          "agent tests"
        ],
        "summary": "List an agent's test scenarios",
        "description": "The agent's test scenarios, oldest first, each with a summary of its newest run (`last_run`:\nid, status, score, cost).",
        "operationId": "list_tests_api_agents__agent_id__tests_get",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "title": "Response List Tests Api Agents  Agent Id  Tests Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "agent tests"
        ],
        "summary": "Create a test scenario",
        "description": "A scenario: the simulated caller (persona), values for the agent's variables, the most caller\nturns, the criteria the judge checks and optional stub results for the agent's HTTP tools.",
        "operationId": "create_test_api_agents__agent_id__tests_post",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScenarioConfig"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Create Test Api Agents  Agent Id  Tests Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/tests/suggest": {
      "post": {
        "tags": [
          "agent tests"
        ],
        "summary": "Suggest test scenarios",
        "description": "Five scenarios with criteria proposed by the platform's test model from the agent's saved\nprompt. Nothing is saved: create the ones you want. The model's tokens are charged (ledger kind\n`test`).",
        "operationId": "suggest_tests_api_agents__agent_id__tests_suggest_post",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Suggest Tests Api Agents  Agent Id  Tests Suggest Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/tests/run-all": {
      "post": {
        "tags": [
          "agent tests"
        ],
        "summary": "Run every test scenario",
        "description": "Queue a run of every scenario of the agent (against its saved version). A workspace runs a few\nat a time (`agent_tests.concurrency_per_workspace`, 3 by default); the rest wait. Each run is\ncharged for its tokens.",
        "operationId": "run_all_tests_api_agents__agent_id__tests_run_all_post",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Run All Tests Api Agents  Agent Id  Tests Run All Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/tests/{scenario_id}": {
      "get": {
        "tags": [
          "agent tests"
        ],
        "summary": "Get a test scenario",
        "operationId": "get_test_api_agents__agent_id__tests__scenario_id__get",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "scenario_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Scenario Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Get Test Api Agents  Agent Id  Tests  Scenario Id  Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "agent tests"
        ],
        "summary": "Update a test scenario",
        "operationId": "update_test_api_agents__agent_id__tests__scenario_id__put",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "scenario_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Scenario Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScenarioConfig"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Update Test Api Agents  Agent Id  Tests  Scenario Id  Put"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "agent tests"
        ],
        "summary": "Delete a test scenario",
        "description": "The scenario and its runs.",
        "operationId": "delete_test_api_agents__agent_id__tests__scenario_id__delete",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "scenario_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Scenario Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/tests/{scenario_id}/runs": {
      "post": {
        "tags": [
          "agent tests"
        ],
        "summary": "Run a test scenario",
        "description": "Queue a run of the scenario against the agent's saved version; it starts as soon as the\nworkspace has a free test slot. Poll `GET /api/v1/test-runs/{run_id}` until its status is\n`passed`, `failed` or `error`. Refused (402) without credits.",
        "operationId": "start_run_api_agents__agent_id__tests__scenario_id__runs_post",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "scenario_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Scenario Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Start Run Api Agents  Agent Id  Tests  Scenario Id  Runs Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "agent tests"
        ],
        "summary": "List a scenario's runs",
        "description": "The scenario's runs, newest first (the last 50 are kept), without transcripts.",
        "operationId": "list_runs_api_agents__agent_id__tests__scenario_id__runs_get",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "scenario_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Scenario Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 50,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "title": "Response List Runs Api Agents  Agent Id  Tests  Scenario Id  Runs Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/test-runs/{run_id}": {
      "get": {
        "tags": [
          "agent tests"
        ],
        "summary": "Get a test run",
        "description": "One run: status, the transcript (agent, caller and tool entries), tool calls, each criterion's\nresult and reason, the score, the judge's improvement summary, tokens per role and the cost.",
        "operationId": "get_run_api_test_runs__run_id__get",
        "parameters": [
          {
            "name": "run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Run Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Get Run Api Test Runs  Run Id  Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents": {
      "get": {
        "tags": [
          "agents"
        ],
        "summary": "List Agents",
        "operationId": "list_agents_api_agents_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Agent"
                  }
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "post": {
        "tags": [
          "agents"
        ],
        "summary": "Create Agent",
        "operationId": "create_agent_api_agents_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AgentConfig"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Agent"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/agents/prompt/generate": {
      "post": {
        "tags": [
          "agents"
        ],
        "summary": "Generate Prompt",
        "description": "Write (or improve) a voice-agent system prompt with Gemini. Nothing is saved.",
        "operationId": "generate_prompt_api_agents_prompt_generate_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PromptRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Generate Prompt Api Agents Prompt Generate Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/agents/pins": {
      "get": {
        "tags": [
          "agents"
        ],
        "summary": "List Pins",
        "description": "Your pinned agents (ids, in pin order): personal, up to 3.",
        "operationId": "list_pins_api_agents_pins_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response List Pins Api Agents Pins Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/pin": {
      "put": {
        "tags": [
          "agents"
        ],
        "summary": "Pin Agent",
        "description": "Pin an agent to the top of your agents list and the sidebar (409 when 3 are pinned).",
        "operationId": "pin_agent_api_agents__agent_id__pin_put",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Pin Agent Api Agents  Agent Id  Pin Put"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "agents"
        ],
        "summary": "Unpin Agent",
        "operationId": "unpin_agent_api_agents__agent_id__pin_delete",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Unpin Agent Api Agents  Agent Id  Pin Delete"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}": {
      "get": {
        "tags": [
          "agents"
        ],
        "summary": "Get Agent",
        "operationId": "get_agent_api_agents__agent_id__get",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Agent"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "agents"
        ],
        "summary": "Update Agent",
        "operationId": "update_agent_api_agents__agent_id__put",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AgentConfig"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Agent"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "agents"
        ],
        "summary": "Delete Agent",
        "operationId": "delete_agent_api_agents__agent_id__delete",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/duplicate": {
      "post": {
        "tags": [
          "agents"
        ],
        "summary": "Duplicate Agent",
        "operationId": "duplicate_agent_api_agents__agent_id__duplicate_post",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Agent"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/versions": {
      "get": {
        "tags": [
          "agents"
        ],
        "summary": "List Versions",
        "operationId": "list_versions_api_agents__agent_id__versions_get",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "title": "Response List Versions Api Agents  Agent Id  Versions Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/versions/{version}": {
      "get": {
        "tags": [
          "agents"
        ],
        "summary": "Get Version",
        "operationId": "get_version_api_agents__agent_id__versions__version__get",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Version"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Get Version Api Agents  Agent Id  Versions  Version  Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/versions/{version}/restore": {
      "post": {
        "tags": [
          "agents"
        ],
        "summary": "Restore Version",
        "operationId": "restore_version_api_agents__agent_id__versions__version__restore_post",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Version"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Agent"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/latency": {
      "get": {
        "tags": [
          "agents"
        ],
        "summary": "Measured Latency",
        "description": "Average reply latency over the agent's last 20 finished calls, from their timelines:\ncaller stops -> first LLM token (llm.first_token) and -> first audio (tts.first_audio, the\nwelcome excluded). Voice latency is the difference.",
        "operationId": "measured_latency_api_agents__agent_id__latency_get",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Measured Latency Api Agents  Agent Id  Latency Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/analytics/test": {
      "post": {
        "tags": [
          "calls"
        ],
        "summary": "Test Analytics",
        "description": "Run summary and extraction on a call or transcript and return the result. Nothing is saved.",
        "operationId": "test_analytics_api_agents__agent_id__analytics_test_post",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnalyticsTest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Test Analytics Api Agents  Agent Id  Analytics Test Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/calls/{call_id}/analyze": {
      "post": {
        "tags": [
          "calls"
        ],
        "summary": "Reanalyze Call",
        "description": "Run the agent's current analytics on a finished call again and save the result (for\nexample after adding extraction fields). Webhooks are not sent again.",
        "operationId": "reanalyze_call_api_calls__call_id__analyze_post",
        "parameters": [
          {
            "name": "call_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Call Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Reanalyze Call Api Calls  Call Id  Analyze Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/calls/export": {
      "get": {
        "tags": [
          "calls"
        ],
        "summary": "Export Calls",
        "description": "Calls as CSV, newest first: one row per call with its outcome, cost, summary and one column\nper extracted field (`extracted.<key>`). At most 50,000 rows.",
        "operationId": "export_calls_api_calls_export_get",
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 365,
              "minimum": 1,
              "description": "calls from the last N days (unless `since` is given)",
              "default": 30,
              "title": "Days"
            },
            "description": "calls from the last N days (unless `since` is given)"
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "description": "IANA zone for created_at",
              "default": "Asia/Kolkata",
              "title": "Timezone"
            },
            "description": "IANA zone for created_at"
          },
          {
            "name": "agent_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 1400,
              "description": "an agent id, or several comma-separated",
              "default": "",
              "title": "Agent Id"
            },
            "description": "an agent id, or several comma-separated"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80,
              "description": "comma-separated statuses",
              "default": "",
              "title": "Status"
            },
            "description": "comma-separated statuses"
          },
          {
            "name": "direction",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 40,
              "description": "outbound, inbound or web (comma-separated)",
              "default": "",
              "title": "Direction"
            },
            "description": "outbound, inbound or web (comma-separated)"
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80,
              "description": "text in a number, the agent's name or the call id",
              "default": "",
              "title": "Q"
            },
            "description": "text in a number, the agent's name or the call id"
          },
          {
            "name": "batch_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "description": "only the calls of this batch (campaign)",
              "default": "",
              "title": "Batch Id"
            },
            "description": "only the calls of this batch (campaign)"
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "created at or after this time (ISO 8601)",
              "title": "Since"
            },
            "description": "created at or after this time (ISO 8601)"
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "created before this time (ISO 8601)",
              "title": "Until"
            },
            "description": "created before this time (ISO 8601)"
          },
          {
            "name": "call_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "description": "a call id or its beginning",
              "default": "",
              "title": "Call Id"
            },
            "description": "a call id or its beginning"
          },
          {
            "name": "phone_number",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 400,
              "description": "the agent's number(s), comma-separated (caller id or dialled number)",
              "default": "",
              "title": "Phone Number"
            },
            "description": "the agent's number(s), comma-separated (caller id or dialled number)"
          },
          {
            "name": "customer_number",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 20,
              "description": "the customer's number, or a part of it",
              "default": "",
              "title": "Customer Number"
            },
            "description": "the customer's number, or a part of it"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/agents/{agent_id}/call": {
      "post": {
        "tags": [
          "calls"
        ],
        "summary": "Place Call",
        "operationId": "place_call_api_agents__agent_id__call_post",
        "parameters": [
          {
            "name": "agent_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlaceCall"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "QueuedCall",
                  "properties": {
                    "call_id": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "queued"
                      ]
                    },
                    "position": {
                      "type": "integer",
                      "description": "Place in the workspace's queue (1 is next)."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.place",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/calls": {
      "get": {
        "tags": [
          "calls"
        ],
        "summary": "List Calls",
        "operationId": "list_calls_api_calls_get",
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 20,
              "description": "created_at, duration_seconds or cost_paise; a leading - for descending",
              "default": "-created_at",
              "title": "Sort"
            },
            "description": "created_at, duration_seconds or cost_paise; a leading - for descending"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": "Skip"
            }
          },
          {
            "name": "agent_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 1400,
              "description": "an agent id, or several comma-separated",
              "default": "",
              "title": "Agent Id"
            },
            "description": "an agent id, or several comma-separated"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80,
              "description": "comma-separated statuses",
              "default": "",
              "title": "Status"
            },
            "description": "comma-separated statuses"
          },
          {
            "name": "direction",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 40,
              "description": "outbound, inbound or web (comma-separated)",
              "default": "",
              "title": "Direction"
            },
            "description": "outbound, inbound or web (comma-separated)"
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80,
              "description": "text in a number, the agent's name or the call id",
              "default": "",
              "title": "Q"
            },
            "description": "text in a number, the agent's name or the call id"
          },
          {
            "name": "batch_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "description": "only the calls of this batch (campaign)",
              "default": "",
              "title": "Batch Id"
            },
            "description": "only the calls of this batch (campaign)"
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "created at or after this time (ISO 8601)",
              "title": "Since"
            },
            "description": "created at or after this time (ISO 8601)"
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "created before this time (ISO 8601)",
              "title": "Until"
            },
            "description": "created before this time (ISO 8601)"
          },
          {
            "name": "call_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "description": "a call id or its beginning",
              "default": "",
              "title": "Call Id"
            },
            "description": "a call id or its beginning"
          },
          {
            "name": "phone_number",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 400,
              "description": "the agent's number(s), comma-separated (caller id or dialled number)",
              "default": "",
              "title": "Phone Number"
            },
            "description": "the agent's number(s), comma-separated (caller id or dialled number)"
          },
          {
            "name": "customer_number",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 20,
              "description": "the customer's number, or a part of it",
              "default": "",
              "title": "Customer Number"
            },
            "description": "the customer's number, or a part of it"
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "CallPage",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Call"
                      },
                      "description": "Newest first, without the transcript."
                    },
                    "total": {
                      "type": "integer",
                      "description": "Calls matching the filters."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/calls/{call_id}/events": {
      "get": {
        "tags": [
          "calls"
        ],
        "summary": "Call Events",
        "operationId": "call_events_api_calls__call_id__events_get",
        "parameters": [
          {
            "name": "call_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Call Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "title": "CallEvent",
                    "properties": {
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "title": "At"
                      },
                      "type": {
                        "type": "string",
                        "title": "Type",
                        "description": "For example `call.started`."
                      },
                      "level": {
                        "type": "string",
                        "enum": [
                          "info",
                          "warning",
                          "error"
                        ],
                        "title": "Level"
                      },
                      "message": {
                        "type": "string",
                        "title": "Message"
                      },
                      "data": {
                        "type": "object",
                        "additionalProperties": true,
                        "title": "Data"
                      },
                      "latency_ms": {
                        "anyOf": [
                          {
                            "type": "integer"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "title": "Latency Ms"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/calls/{call_id}": {
      "get": {
        "tags": [
          "calls"
        ],
        "summary": "Get Call",
        "operationId": "get_call_api_calls__call_id__get",
        "parameters": [
          {
            "name": "call_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Call Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Call"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/calls/{call_id}/recording": {
      "get": {
        "tags": [
          "calls"
        ],
        "summary": "Get Recording",
        "operationId": "get_recording_api_calls__call_id__recording_get",
        "parameters": [
          {
            "name": "call_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Call Id"
            }
          },
          {
            "name": "download",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false,
              "title": "Download"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/calls/{call_id}/hangup": {
      "post": {
        "tags": [
          "calls"
        ],
        "summary": "Hangup Call",
        "operationId": "hangup_call_api_calls__call_id__hangup_post",
        "parameters": [
          {
            "name": "call_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Call Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Hangup Call Api Calls  Call Id  Hangup Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.place",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/batches/uploads": {
      "post": {
        "tags": [
          "batches"
        ],
        "summary": "Upload a contact list",
        "description": "Parse a contact list and return a preview: the columns, the detected phone column, the first\nrows, invalid rows (bad numbers, duplicates) with reasons and which agent variables the columns\nfill. The file is kept for 24 hours under `upload_id`; create the batch from it.",
        "operationId": "upload_api_batches_uploads_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_api_batches_uploads_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Upload Api Batches Uploads Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.place",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/batches/uploads/{upload_id}": {
      "get": {
        "tags": [
          "batches"
        ],
        "summary": "Preview an upload again",
        "description": "The same preview as the upload, with another phone column or agent.",
        "operationId": "preview_upload_api_batches_uploads__upload_id__get",
        "parameters": [
          {
            "name": "upload_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Upload Id"
            }
          },
          {
            "name": "phone_column",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "",
              "title": "Phone Column"
            }
          },
          {
            "name": "agent_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "",
              "title": "Agent Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Preview Upload Api Batches Uploads  Upload Id  Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.place",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/batches": {
      "post": {
        "tags": [
          "batches"
        ],
        "summary": "Create a batch",
        "description": "Schedule a batch from an upload. Each valid row becomes a contact; the other columns become\nits `user_data`. Calls go through the workspace's outbound queue inside the agent's calling hours.",
        "operationId": "create_batch_api_batches_post",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBatch"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Create Batch Api Batches Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.place",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "get": {
        "tags": [
          "batches"
        ],
        "summary": "List batches",
        "description": "Batches, newest first, with counts per contact status and progress.",
        "operationId": "list_batches_api_batches_get",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80,
              "description": "comma-separated statuses",
              "default": "",
              "title": "Status"
            },
            "description": "comma-separated statuses"
          },
          {
            "name": "agent_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "",
              "title": "Agent Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": "Skip"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response List Batches Api Batches Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/batches/{batch_id}": {
      "get": {
        "tags": [
          "batches"
        ],
        "summary": "Get a batch",
        "description": "One batch with its counts per contact status, progress and retry rules.",
        "operationId": "get_batch_api_batches__batch_id__get",
        "parameters": [
          {
            "name": "batch_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Batch Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Get Batch Api Batches  Batch Id  Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "batches"
        ],
        "summary": "Delete a batch",
        "description": "Delete a finished batch and its contact list. Its calls stay in the call history.",
        "operationId": "delete_batch_api_batches__batch_id__delete",
        "parameters": [
          {
            "name": "batch_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Batch Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.place",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/batches/{batch_id}/contacts": {
      "get": {
        "tags": [
          "batches"
        ],
        "summary": "List a batch's contacts",
        "description": "Contacts in file order: number, `user_data`, status, attempts and the latest call id.",
        "operationId": "list_contacts_api_batches__batch_id__contacts_get",
        "parameters": [
          {
            "name": "batch_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Batch Id"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 120,
              "description": "comma-separated contact statuses",
              "default": "",
              "title": "Status"
            },
            "description": "comma-separated contact statuses"
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80,
              "description": "phone number or a value in the first columns",
              "default": "",
              "title": "Q"
            },
            "description": "phone number or a value in the first columns"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": "Skip"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response List Contacts Api Batches  Batch Id  Contacts Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/batches/{batch_id}/pause": {
      "post": {
        "tags": [
          "batches"
        ],
        "summary": "Pause a batch",
        "description": "Stop releasing contacts. Calls still waiting in the queue are canceled (their attempt does\nnot count); calls already ringing finish.",
        "operationId": "pause_batch_api_batches__batch_id__pause_post",
        "parameters": [
          {
            "name": "batch_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Batch Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Pause Batch Api Batches  Batch Id  Pause Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.place",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/batches/{batch_id}/resume": {
      "post": {
        "tags": [
          "batches"
        ],
        "summary": "Resume a batch",
        "description": "Carry on calling a paused batch (needs credits).",
        "operationId": "resume_batch_api_batches__batch_id__resume_post",
        "parameters": [
          {
            "name": "batch_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Batch Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Resume Batch Api Batches  Batch Id  Resume Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.place",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/batches/{batch_id}/cancel": {
      "post": {
        "tags": [
          "batches"
        ],
        "summary": "Cancel a batch",
        "description": "Cancel every contact not called yet and the batch's calls still queued. Calls already\nringing or in progress finish normally.",
        "operationId": "cancel_batch_api_batches__batch_id__cancel_post",
        "parameters": [
          {
            "name": "batch_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Batch Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Cancel Batch Api Batches  Batch Id  Cancel Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.place",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/batches/{batch_id}/results": {
      "get": {
        "tags": [
          "batches"
        ],
        "summary": "Download a batch's results (CSV)",
        "description": "One row per contact: `row`, the file's columns, `phone_e164`, `status`, `attempts`,\n`last_call_id`, `last_call_status`, `duration_seconds`, `cost_paise`, `summary`, `outcome`\n(`completed`, `voicemail`, `transferred`, `no-answer`, ...) and one `extracted.<key>` column per\nextracted field.",
        "operationId": "batch_results_api_batches__batch_id__results_get",
        "parameters": [
          {
            "name": "batch_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Batch Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "calls.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/catalog": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "Get Catalog",
        "operationId": "get_catalog_api_catalog_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Get Catalog Api Catalog Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/catalog/models": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "Model Cards",
        "description": "What the agent editor's model cards show: typical figures per model (masters\n`model_profiles`), presets built from options that exist, and this workspace's price per\nminute. Never the providers' own prices or keys.",
        "operationId": "model_cards_api_catalog_models_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Model Cards Api Catalog Models Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/catalog/llm-models": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "Llm Models",
        "description": "The models an agent can use with an LLM provider. `custom_models`: any other model id the\nprovider accepts may be typed in (OpenRouter ids, Bedrock inference profiles, Azure deployments).",
        "operationId": "llm_models_api_catalog_llm_models_get",
        "parameters": [
          {
            "name": "provider",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "gemini",
                "bedrock",
                "openai",
                "azure_openai",
                "anthropic",
                "openrouter",
                "deepseek"
              ],
              "type": "string",
              "description": "The LLM provider whose models to list",
              "default": "gemini",
              "title": "Provider"
            },
            "description": "The LLM provider whose models to list"
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Llm Models Api Catalog Llm Models Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/voices": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "List Voices",
        "operationId": "list_voices_api_voices_get",
        "parameters": [
          {
            "name": "language",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 10,
              "default": "",
              "title": "Language"
            }
          },
          {
            "name": "gender",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 20,
              "default": "",
              "title": "Gender"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80,
              "default": "",
              "title": "Q"
            }
          },
          {
            "name": "provider",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "cartesia",
                "sarvam",
                "elevenlabs"
              ],
              "type": "string",
              "description": "cartesia (its voice library), sarvam (speakers) or elevenlabs (the account's voices)",
              "default": "cartesia",
              "title": "Provider"
            },
            "description": "cartesia (its voice library), sarvam (speakers) or elevenlabs (the account's voices)"
          },
          {
            "name": "model",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 40,
              "description": "Sarvam only: the bulbul model whose speakers to list",
              "default": "",
              "title": "Model"
            },
            "description": "Sarvam only: the bulbul model whose speakers to list"
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "title": "Response List Voices Api Voices Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/voices/{voice_id}/preview": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "Preview Voice",
        "operationId": "preview_voice_api_voices__voice_id__preview_get",
        "parameters": [
          {
            "name": "voice_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Voice Id"
            }
          },
          {
            "name": "text",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 300,
              "default": "Namaste, main aapki kaise madad kar sakti hoon?",
              "title": "Text"
            }
          },
          {
            "name": "model",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 40,
              "default": "sonic-3.6",
              "title": "Model"
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 10,
              "default": "hi",
              "title": "Language"
            }
          },
          {
            "name": "provider",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "cartesia",
                "sarvam",
                "elevenlabs"
              ],
              "type": "string",
              "default": "cartesia",
              "title": "Provider"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/numbers": {
      "get": {
        "tags": [
          "numbers"
        ],
        "summary": "List Numbers",
        "description": "The workspace's numbers, each with its `provider` (`plivo`), country, whether it\ntakes voice calls, and the agent that answers it.",
        "operationId": "list_numbers_api_numbers_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response List Numbers Api Numbers Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/numbers/search": {
      "get": {
        "tags": [
          "numbers"
        ],
        "summary": "Search Numbers",
        "description": "Numbers you can rent, with their monthly and setup price in the workspace's `currency` (paise or\ncents; INR at today's rate).",
        "operationId": "search_numbers_api_numbers_search_get",
        "parameters": [
          {
            "name": "country_iso",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2,
              "default": "IN",
              "title": "Country Iso"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "",
                "fixed",
                "mobile",
                "tollfree",
                "local"
              ],
              "type": "string",
              "default": "",
              "title": "Type"
            }
          },
          {
            "name": "pattern",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 20,
              "pattern": "^[0-9]*$",
              "default": "",
              "title": "Pattern"
            }
          },
          {
            "name": "region",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 60,
              "default": "",
              "title": "Region"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 1000,
              "minimum": 0,
              "default": 0,
              "title": "Offset"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Search Numbers Api Numbers Search Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "numbers.manage",
          "onboarding": false,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/numbers/buy": {
      "post": {
        "tags": [
          "numbers"
        ],
        "summary": "Buy Number",
        "description": "Rent a number: setup and the first month are taken from your credits now, then each month's\nrent on its date. The number is ready to connect to an agent.",
        "operationId": "buy_number_api_numbers_buy_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Buy"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Buy Number Api Numbers Buy Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "numbers.manage",
          "onboarding": false,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/numbers/{number}": {
      "delete": {
        "tags": [
          "numbers"
        ],
        "summary": "Release Number",
        "description": "Stop renting a number you rented (no refund for the current month; cannot be undone).",
        "operationId": "release_number_api_numbers__number__delete",
        "parameters": [
          {
            "name": "number",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Number"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "numbers.manage",
          "onboarding": false,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/numbers/{number}/connect": {
      "post": {
        "tags": [
          "numbers"
        ],
        "summary": "Connect Number",
        "operationId": "connect_number_api_numbers__number__connect_post",
        "parameters": [
          {
            "name": "number",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Number"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Connect"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Connect Number Api Numbers  Number  Connect Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "numbers.manage",
          "onboarding": false,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/tools/test": {
      "post": {
        "tags": [
          "tools"
        ],
        "summary": "Test Tool",
        "operationId": "test_tool_api_tools_test_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolTest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Test Tool Api Tools Test Post"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/knowledge-bases": {
      "get": {
        "tags": [
          "knowledge bases"
        ],
        "summary": "List knowledge bases",
        "description": "The workspace's knowledge bases, most recently changed first, with the agents using each.",
        "operationId": "list_knowledge_bases_api_knowledge_bases_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/KnowledgeBase"
                  },
                  "type": "array",
                  "title": "Response List Knowledge Bases Api Knowledge Bases Get"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      },
      "post": {
        "tags": [
          "knowledge bases"
        ],
        "summary": "Create a knowledge base",
        "description": "An empty knowledge base; add sources to it, then attach it to agents.",
        "operationId": "create_knowledge_base_api_knowledge_bases_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewKnowledgeBase"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeBase"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/knowledge-bases/{kb_id}": {
      "get": {
        "tags": [
          "knowledge bases"
        ],
        "summary": "Get a knowledge base",
        "description": "One knowledge base with its sources and their processing status.",
        "operationId": "get_knowledge_base_api_knowledge_bases__kb_id__get",
        "parameters": [
          {
            "name": "kb_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Kb Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeBaseDetail"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "knowledge bases"
        ],
        "summary": "Rename a knowledge base",
        "description": "Change the name or description.",
        "operationId": "update_knowledge_base_api_knowledge_bases__kb_id__patch",
        "parameters": [
          {
            "name": "kb_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Kb Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KnowledgeBasePatch"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeBaseDetail"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "knowledge bases"
        ],
        "summary": "Delete a knowledge base",
        "description": "Delete it with its sources and passages. Refused (409) while an agent uses it.",
        "operationId": "delete_knowledge_base_api_knowledge_bases__kb_id__delete",
        "parameters": [
          {
            "name": "kb_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Kb Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/knowledge-bases/{kb_id}/sources/file": {
      "post": {
        "tags": [
          "knowledge bases"
        ],
        "summary": "Upload a file",
        "description": "A PDF (up to 5 MB and 100 pages), or a UTF-8 text or Markdown file (`.txt`, `.md`, up to\n10 MB). It is processed in the background:\npoll the knowledge base until the source is `ready`.",
        "operationId": "upload_file_api_knowledge_bases__kb_id__sources_file_post",
        "parameters": [
          {
            "name": "kb_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Kb Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_file_api_knowledge_bases__kb_id__sources_file_post"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeSource"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/knowledge-bases/{kb_id}/sources/url": {
      "post": {
        "tags": [
          "knowledge bases"
        ],
        "summary": "Add a web page",
        "description": "Fetch one public web page (HTML, text or PDF, up to 5 MB) and index its text. Links are not\nfollowed. Addresses on private networks are refused.",
        "operationId": "add_url_api_knowledge_bases__kb_id__sources_url_post",
        "parameters": [
          {
            "name": "kb_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Kb Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewUrlSource"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeSource"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/knowledge-bases/{kb_id}/sources/text": {
      "post": {
        "tags": [
          "knowledge bases"
        ],
        "summary": "Add pasted text",
        "description": "Index text you paste (an FAQ, a price list, opening hours).",
        "operationId": "add_text_api_knowledge_bases__kb_id__sources_text_post",
        "parameters": [
          {
            "name": "kb_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Kb Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewTextSource"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeSource"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/knowledge-bases/{kb_id}/sources/{source_id}": {
      "delete": {
        "tags": [
          "knowledge bases"
        ],
        "summary": "Delete a source",
        "description": "Remove the source and its passages; agents stop finding it at once.",
        "operationId": "delete_source_api_knowledge_bases__kb_id__sources__source_id__delete",
        "parameters": [
          {
            "name": "kb_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Kb Id"
            }
          },
          {
            "name": "source_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Source Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/knowledge-bases/{kb_id}/sources/{source_id}/reprocess": {
      "post": {
        "tags": [
          "knowledge bases"
        ],
        "summary": "Process a source again",
        "description": "Extract and index the source again (a web page is fetched again). Its current passages stay\nsearchable until the new ones are ready.",
        "operationId": "reprocess_source_api_knowledge_bases__kb_id__sources__source_id__reprocess_post",
        "parameters": [
          {
            "name": "kb_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Kb Id"
            }
          },
          {
            "name": "source_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Source Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeSource"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.edit",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/knowledge-bases/{kb_id}/search": {
      "post": {
        "tags": [
          "knowledge bases"
        ],
        "summary": "Test a search",
        "description": "Run the search an agent runs during a call, and see the passages it would get with their\nscores. Passages marked `relevant: false` score below the cut-off and are not given to agents.",
        "operationId": "search_knowledge_base_api_knowledge_bases__kb_id__search_post",
        "parameters": [
          {
            "name": "kb_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Kb Id"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KnowledgeSearch"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeSearchResult"
                }
              }
            }
          },
          "401": {
            "description": "No credentials, or they are invalid or revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Your role (or an API key) lacks the permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Over the per-key rate limit; wait for `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-voxa-auth": {
          "kind": "permission",
          "permission": "agents.view",
          "onboarding": false,
          "api_key": true
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/api/v1/locations/india": {
      "get": {
        "tags": [
          "locations"
        ],
        "summary": "India's states and cities",
        "description": "All 36 states and union territories of India, sorted by name, each with its two-digit GST state\ncode and its cities and towns (district headquarters and other towns, sorted). Address fields\n(`state`, `city`) elsewhere in the API must use these names. No authentication; cache it: the\nresponse carries an `ETag` and `Cache-Control`, and `If-None-Match` returns `304`.",
        "operationId": "india_api_locations_india_get",
        "responses": {
          "200": {
            "description": "Every state and union territory with its GST state code and cities.",
            "content": {
              "application/json": {
                "schema": {},
                "example": {
                  "country": "IN",
                  "states": [
                    {
                      "name": "Karnataka",
                      "code": "29",
                      "cities": [
                        "Bengaluru",
                        "Mysuru"
                      ]
                    }
                  ]
                }
              }
            }
          },
          "304": {
            "description": "Not modified (the `If-None-Match` ETag still matches)."
          }
        },
        "x-voxa-auth": {
          "kind": "public",
          "api_key": false
        },
        "security": [],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA time zone for every timestamp in the response (`at`, `date`, `timestamp` and `*_at` fields), as ISO 8601 with the offset. The `X-Timezone` header works too; the zone used comes back in the `X-Timezone` response header. An unknown zone is a `400`.",
            "schema": {
              "type": "string",
              "default": "Asia/Kolkata",
              "examples": [
                "Asia/Kolkata",
                "UTC"
              ]
            }
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "AcceptInvite": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 80,
            "title": "Name",
            "default": ""
          },
          "password": {
            "type": "string",
            "maxLength": 128,
            "title": "Password",
            "default": ""
          }
        },
        "type": "object",
        "title": "AcceptInvite",
        "description": "A new user sets their name and password here. Someone who already has an account accepts while\nsigned in as that account (their browser's cookie, or Authorization: Bearer), with no password."
      },
      "AgentConfig": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "title": "Name"
          },
          "welcome_message": {
            "type": "string",
            "title": "Welcome Message",
            "default": ""
          },
          "system_prompt": {
            "type": "string",
            "title": "System Prompt",
            "default": ""
          },
          "llm": {
            "$ref": "#/components/schemas/LLMConfig"
          },
          "voice": {
            "$ref": "#/components/schemas/VoiceConfig"
          },
          "transcriber": {
            "$ref": "#/components/schemas/TranscriberConfig"
          },
          "call": {
            "$ref": "#/components/schemas/CallConfig"
          },
          "analytics": {
            "$ref": "#/components/schemas/AnalyticsConfig"
          },
          "tools": {
            "items": {
              "$ref": "#/components/schemas/ApiTool"
            },
            "type": "array",
            "title": "Tools"
          },
          "knowledge_base_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "maxItems": 10,
            "title": "Knowledge Base Ids"
          },
          "knowledge_mode": {
            "type": "string",
            "enum": [
              "auto",
              "search"
            ],
            "title": "Knowledge Mode",
            "default": "auto"
          },
          "webhook_url": {
            "type": "string",
            "title": "Webhook Url",
            "default": ""
          },
          "phone_number": {
            "type": "string",
            "title": "Phone Number",
            "default": ""
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "paused",
              "frozen"
            ],
            "title": "Status",
            "default": "active"
          },
          "avatar": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 499,
                "minimum": 0
              },
              {
                "type": "string",
                "pattern": "^(v1(\\.\\d{1,3}){9,10}|g1\\.\\d{1,3}\\.\\d{1,2})$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Avatar"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "AgentConfig"
      },
      "AnalyticsConfig": {
        "properties": {
          "summarize": {
            "type": "boolean",
            "title": "Summarize",
            "default": false
          },
          "extractions": {
            "items": {
              "$ref": "#/components/schemas/ExtractionField"
            },
            "type": "array",
            "maxItems": 50,
            "title": "Extractions"
          },
          "extraction_prompt": {
            "type": "string",
            "maxLength": 4000,
            "title": "Extraction Prompt",
            "default": ""
          }
        },
        "type": "object",
        "title": "AnalyticsConfig",
        "description": "Run once the call ends; the results are saved on the call and sent in call.completed."
      },
      "AnalyticsTest": {
        "properties": {
          "call_id": {
            "type": "string",
            "title": "Call Id",
            "description": "a call of this workspace to analyse",
            "default": ""
          },
          "transcript": {
            "type": "string",
            "maxLength": 50000,
            "title": "Transcript",
            "description": "or a transcript to analyse instead",
            "default": ""
          },
          "analytics": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnalyticsConfig"
              },
              {
                "type": "null"
              }
            ],
            "description": "settings to try (default: the saved ones)"
          }
        },
        "type": "object",
        "title": "AnalyticsTest",
        "description": "Try analytics settings before saving them: on one of the agent's calls, or pasted text."
      },
      "ApiTool": {
        "properties": {
          "name": {
            "type": "string",
            "pattern": "^[a-zA-Z_][a-zA-Z0-9_]{0,63}$",
            "title": "Name"
          },
          "description": {
            "type": "string",
            "maxLength": 1000,
            "minLength": 3,
            "title": "Description"
          },
          "parameters": {
            "additionalProperties": true,
            "type": "object",
            "title": "Parameters"
          },
          "method": {
            "type": "string",
            "enum": [
              "GET",
              "POST"
            ],
            "title": "Method",
            "default": "POST"
          },
          "url": {
            "type": "string",
            "title": "Url"
          },
          "headers": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Headers"
          },
          "pre_call_message": {
            "type": "string",
            "title": "Pre Call Message",
            "default": ""
          },
          "timeout_seconds": {
            "type": "number",
            "maximum": 30,
            "minimum": 1,
            "title": "Timeout Seconds",
            "default": 8
          }
        },
        "type": "object",
        "required": [
          "name",
          "description",
          "url"
        ],
        "title": "ApiTool",
        "description": "A function the agent can call mid-conversation (an HTTP request)."
      },
      "Appeal": {
        "properties": {
          "note": {
            "type": "string",
            "maxLength": 2000,
            "minLength": 10,
            "title": "Note",
            "description": "why the incident is wrong or fixed"
          }
        },
        "type": "object",
        "required": [
          "note"
        ],
        "title": "Appeal"
      },
      "Body_ask_api_caller_id_post": {
        "properties": {
          "number": {
            "type": "string",
            "maxLength": 20,
            "minLength": 6,
            "title": "Number"
          },
          "brand_name": {
            "type": "string",
            "maxLength": 40,
            "minLength": 3,
            "title": "Brand Name"
          },
          "category": {
            "type": "string",
            "title": "Category"
          },
          "call_reason": {
            "type": "string",
            "maxLength": 100,
            "title": "Call Reason",
            "default": ""
          },
          "website": {
            "type": "string",
            "maxLength": 200,
            "title": "Website",
            "default": ""
          },
          "logo": {
            "type": "string",
            "format": "binary",
            "title": "Logo"
          }
        },
        "type": "object",
        "required": [
          "number",
          "brand_name",
          "category",
          "logo"
        ],
        "title": "Body_ask_api_caller_id_post"
      },
      "Body_upload_api_batches_uploads_post": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File",
            "description": "a .csv or .xlsx file; the first row is the header"
          },
          "agent_id": {
            "type": "string",
            "maxLength": 64,
            "title": "Agent Id",
            "description": "check the columns against this agent's variables",
            "default": ""
          },
          "phone_column": {
            "type": "string",
            "maxLength": 64,
            "title": "Phone Column",
            "description": "the phone number column (detected if empty)",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "Body_upload_api_batches_uploads_post"
      },
      "Body_upload_document_api_kyc_documents_post": {
        "properties": {
          "kind": {
            "type": "string",
            "maxLength": 40,
            "title": "Kind"
          },
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File"
          }
        },
        "type": "object",
        "required": [
          "kind",
          "file"
        ],
        "title": "Body_upload_document_api_kyc_documents_post"
      },
      "Body_upload_file_api_knowledge_bases__kb_id__sources_file_post": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File"
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "Body_upload_file_api_knowledge_bases__kb_id__sources_file_post"
      },
      "Body_upload_sound_api_ambient_post": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File"
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "Body_upload_sound_api_ambient_post"
      },
      "Buy": {
        "properties": {
          "number": {
            "type": "string",
            "maxLength": 20,
            "minLength": 6,
            "pattern": "^\\+?[0-9]+$",
            "title": "Number"
          },
          "country_iso": {
            "type": "string",
            "maxLength": 2,
            "minLength": 2,
            "title": "Country Iso",
            "default": "IN"
          }
        },
        "type": "object",
        "required": [
          "number"
        ],
        "title": "Buy"
      },
      "CallConfig": {
        "properties": {
          "max_duration_seconds": {
            "type": "integer",
            "maximum": 3600,
            "minimum": 30,
            "title": "Max Duration Seconds",
            "default": 600
          },
          "hangup_after_silence_seconds": {
            "type": "integer",
            "maximum": 120,
            "minimum": 5,
            "title": "Hangup After Silence Seconds",
            "default": 15
          },
          "allow_interruptions": {
            "type": "boolean",
            "title": "Allow Interruptions",
            "default": true
          },
          "interruption_min_words": {
            "type": "integer",
            "maximum": 10,
            "minimum": 1,
            "title": "Interruption Min Words",
            "default": 2
          },
          "calling_hours": {
            "type": "boolean",
            "title": "Calling Hours",
            "default": false
          },
          "call_start_hour": {
            "type": "integer",
            "maximum": 23,
            "minimum": 0,
            "title": "Call Start Hour",
            "default": 9
          },
          "call_end_hour": {
            "type": "integer",
            "maximum": 24,
            "minimum": 1,
            "title": "Call End Hour",
            "default": 21
          },
          "timezone": {
            "type": "string",
            "title": "Timezone",
            "default": "Asia/Kolkata"
          },
          "record": {
            "type": "boolean",
            "title": "Record",
            "default": true
          },
          "hangup_message": {
            "type": "string",
            "title": "Hangup Message",
            "default": ""
          },
          "hangup_on_prompt": {
            "type": "boolean",
            "title": "Hangup On Prompt",
            "default": false
          },
          "hangup_prompt": {
            "type": "string",
            "maxLength": 4000,
            "title": "Hangup Prompt",
            "default": "You are an AI assistant determining if a conversation is complete. A conversation is complete if:\n\n1. The user explicitly says they want to stop (e.g., \"That's all,\" \"I'm done,\" \"Goodbye,\" \"thank you\").\n2. The user seems satisfied, and their goal appears to be achieved.\n3. The user's goal appears achieved based on the conversation history, even without explicit confirmation.\n\nIf none of these apply, the conversation is not complete."
          },
          "hangup_interruptible": {
            "type": "boolean",
            "title": "Hangup Interruptible",
            "default": false
          },
          "check_user_online": {
            "type": "boolean",
            "title": "Check User Online",
            "default": false
          },
          "user_online_message": {
            "type": "string",
            "title": "User Online Message",
            "default": "Are you still there?"
          },
          "user_online_after_seconds": {
            "type": "integer",
            "maximum": 60,
            "minimum": 3,
            "title": "User Online After Seconds",
            "default": 9
          },
          "ambient_sound": {
            "type": "string",
            "maxLength": 80,
            "pattern": "^$|^(office|call_centre|cafe|street)$|^upload:[a-f0-9]{32}$",
            "title": "Ambient Sound",
            "default": ""
          },
          "ambient_volume": {
            "type": "integer",
            "maximum": 100,
            "minimum": 0,
            "title": "Ambient Volume",
            "default": 30
          },
          "noise_cancellation": {
            "type": "boolean",
            "title": "Noise Cancellation",
            "default": false
          },
          "noise_cancellation_strength": {
            "type": "integer",
            "maximum": 100,
            "minimum": 0,
            "title": "Noise Cancellation Strength",
            "default": 50
          },
          "voicemail_detection": {
            "type": "boolean",
            "title": "Voicemail Detection",
            "default": false
          },
          "voicemail_detection_seconds": {
            "type": "integer",
            "maximum": 10,
            "minimum": 2,
            "title": "Voicemail Detection Seconds",
            "default": 5
          },
          "voicemail_message": {
            "type": "string",
            "maxLength": 1000,
            "title": "Voicemail Message",
            "default": ""
          },
          "truecaller_call_reason": {
            "type": "string",
            "maxLength": 200,
            "title": "Truecaller Call Reason",
            "default": ""
          },
          "dtmf_input": {
            "type": "boolean",
            "title": "Dtmf Input",
            "default": false
          },
          "dtmf_wait_seconds": {
            "type": "number",
            "maximum": 10,
            "minimum": 0.5,
            "title": "Dtmf Wait Seconds",
            "default": 2.5
          },
          "auto_reschedule": {
            "type": "boolean",
            "title": "Auto Reschedule",
            "default": false
          },
          "reschedule_max_days": {
            "type": "integer",
            "maximum": 30,
            "minimum": 1,
            "title": "Reschedule Max Days",
            "default": 7
          },
          "transfer_enabled": {
            "type": "boolean",
            "title": "Transfer Enabled",
            "default": false
          },
          "transfer_targets": {
            "items": {
              "$ref": "#/components/schemas/TransferTarget"
            },
            "type": "array",
            "maxItems": 5,
            "title": "Transfer Targets"
          },
          "transfer_message": {
            "type": "string",
            "maxLength": 300,
            "title": "Transfer Message",
            "default": "Please hold, I'm connecting you to {target}."
          },
          "transfer_summary": {
            "type": "boolean",
            "title": "Transfer Summary",
            "default": true
          }
        },
        "type": "object",
        "title": "CallConfig"
      },
      "CallWindow": {
        "properties": {
          "start_hour": {
            "type": "integer",
            "maximum": 23,
            "minimum": 0,
            "title": "Start Hour",
            "description": "first hour calls may start (0-23)",
            "default": 9
          },
          "end_hour": {
            "type": "integer",
            "maximum": 24,
            "minimum": 1,
            "title": "End Hour",
            "description": "calls are not released from this hour on (1-24)",
            "default": 18
          }
        },
        "type": "object",
        "title": "CallWindow",
        "description": "Hours of the day (in the batch's timezone) when the batch releases contacts: start <= hour < end."
      },
      "ChangeRole": {
        "properties": {
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "admin",
              "developer",
              "viewer"
            ],
            "title": "Role"
          }
        },
        "type": "object",
        "required": [
          "role"
        ],
        "title": "ChangeRole"
      },
      "Code": {
        "properties": {
          "code": {
            "type": "string",
            "maxLength": 20,
            "minLength": 6,
            "title": "Code"
          }
        },
        "type": "object",
        "required": [
          "code"
        ],
        "title": "Code"
      },
      "Complete": {
        "properties": {
          "outcome": {
            "type": "string",
            "enum": [
              "success",
              "failure"
            ],
            "title": "Outcome"
          }
        },
        "type": "object",
        "required": [
          "outcome"
        ],
        "title": "Complete"
      },
      "Connect": {
        "properties": {
          "agent_id": {
            "type": "string",
            "title": "Agent Id"
          }
        },
        "type": "object",
        "required": [
          "agent_id"
        ],
        "title": "Connect"
      },
      "CreateBatch": {
        "properties": {
          "upload_id": {
            "type": "string",
            "maxLength": 64,
            "title": "Upload Id"
          },
          "agent_id": {
            "type": "string",
            "maxLength": 64,
            "title": "Agent Id"
          },
          "name": {
            "type": "string",
            "maxLength": 120,
            "title": "Name",
            "default": ""
          },
          "phone_column": {
            "type": "string",
            "maxLength": 64,
            "title": "Phone Column",
            "description": "detected when empty",
            "default": ""
          },
          "from_number": {
            "type": "string",
            "pattern": "^$|^\\+?[0-9]{8,15}$",
            "title": "From Number",
            "description": "the agent's number when empty",
            "default": ""
          },
          "start_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start At",
            "description": "when to start; empty or past = now. Without an offset it is read in `timezone`"
          },
          "timezone": {
            "type": "string",
            "maxLength": 64,
            "title": "Timezone",
            "default": "Asia/Kolkata"
          },
          "retry": {
            "$ref": "#/components/schemas/RetryRules"
          },
          "max_concurrency": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 1000,
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Concurrency",
            "description": "most calls of this batch queued, ringing or live at once; empty = the workspace's limit. Never above the workspace's concurrency limit"
          },
          "call_window": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CallWindow"
              },
              {
                "type": "null"
              }
            ],
            "description": "hours of the day (in `timezone`) when contacts are released, on top of the agent's calling hours; empty = the agent's hours only"
          },
          "webhook_url": {
            "type": "string",
            "maxLength": 500,
            "title": "Webhook Url",
            "description": "receives the lifecycle events (call.queued ... call.completed) of this batch's calls, signed with the workspace's default signing secret",
            "default": ""
          },
          "variable_columns": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "maxItems": 50
              },
              {
                "type": "null"
              }
            ],
            "title": "Variable Columns",
            "description": "the columns passed to the agent as call variables (`user_data`); empty = every column except the phone number"
          }
        },
        "type": "object",
        "required": [
          "upload_id",
          "agent_id"
        ],
        "title": "CreateBatch"
      },
      "Criterion": {
        "properties": {
          "text": {
            "type": "string",
            "maxLength": 300,
            "minLength": 3,
            "title": "Text"
          },
          "required": {
            "type": "boolean",
            "title": "Required",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "text"
        ],
        "title": "Criterion",
        "description": "One thing the judge checks, e.g. \"Asks for the caller's mohalla\". A run fails when a required\ncriterion is not met; an optional one only lowers the score."
      },
      "Disable2FA": {
        "properties": {
          "password": {
            "type": "string",
            "maxLength": 128,
            "title": "Password"
          },
          "code": {
            "type": "string",
            "maxLength": 20,
            "minLength": 6,
            "title": "Code"
          }
        },
        "type": "object",
        "required": [
          "password",
          "code"
        ],
        "title": "Disable2FA"
      },
      "EmailChange": {
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "title": "Email"
          },
          "password": {
            "type": "string",
            "maxLength": 128,
            "title": "Password"
          }
        },
        "type": "object",
        "required": [
          "email",
          "password"
        ],
        "title": "EmailChange"
      },
      "Endpoint": {
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 500,
            "title": "Url"
          },
          "description": {
            "type": "string",
            "maxLength": 200,
            "title": "Description",
            "default": ""
          },
          "events": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Events"
          },
          "active": {
            "type": "boolean",
            "title": "Active",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "url"
        ],
        "title": "Endpoint"
      },
      "EndpointPatch": {
        "properties": {
          "url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "events": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Events"
          },
          "active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Active"
          }
        },
        "type": "object",
        "title": "EndpointPatch"
      },
      "ExtractionChoice": {
        "properties": {
          "value": {
            "type": "string",
            "maxLength": 60,
            "minLength": 1,
            "title": "Value"
          },
          "when": {
            "type": "string",
            "maxLength": 300,
            "title": "When",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "value"
        ],
        "title": "ExtractionChoice",
        "description": "One allowed answer of a `choice` field, and when to pick it."
      },
      "ExtractionField": {
        "properties": {
          "key": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]{0,39}$",
            "title": "Key",
            "description": "the JSON key, e.g. lead_status"
          },
          "label": {
            "type": "string",
            "maxLength": 80,
            "title": "Label",
            "default": ""
          },
          "type": {
            "type": "string",
            "enum": [
              "text",
              "number",
              "boolean",
              "choice",
              "date",
              "list"
            ],
            "title": "Type",
            "default": "text"
          },
          "description": {
            "type": "string",
            "maxLength": 600,
            "title": "Description",
            "description": "what to extract and how",
            "default": ""
          },
          "choices": {
            "items": {
              "$ref": "#/components/schemas/ExtractionChoice"
            },
            "type": "array",
            "maxItems": 20,
            "title": "Choices"
          }
        },
        "type": "object",
        "required": [
          "key"
        ],
        "title": "ExtractionField",
        "description": "One value to pull out of every call. All fields are filled in one model call that must\nreturn JSON matching their schema, so results are typed and the same shape on every call."
      },
      "FallbackTranscriber": {
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "cartesia",
              "deepgram",
              "sarvam"
            ],
            "title": "Provider",
            "default": "deepgram"
          },
          "model": {
            "type": "string",
            "maxLength": 40,
            "title": "Model",
            "default": "nova-3"
          },
          "language": {
            "type": "string",
            "maxLength": 20,
            "minLength": 1,
            "title": "Language",
            "default": "hi"
          }
        },
        "type": "object",
        "title": "FallbackTranscriber",
        "description": "A backup speech-to-text service, connected when the one before it fails."
      },
      "FallbackVoice": {
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "cartesia",
              "sarvam",
              "elevenlabs"
            ],
            "title": "Provider",
            "default": "cartesia"
          },
          "model": {
            "type": "string",
            "maxLength": 40,
            "minLength": 1,
            "title": "Model",
            "default": "sonic-3.6"
          },
          "voice_id": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "title": "Voice Id"
          },
          "voice_name": {
            "type": "string",
            "maxLength": 200,
            "title": "Voice Name",
            "default": ""
          },
          "language": {
            "type": "string",
            "maxLength": 10,
            "title": "Language",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "voice_id"
        ],
        "title": "FallbackVoice",
        "description": "A backup voice, used for the rest of the call when the voice before it fails."
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "KnowledgeBase": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "source_count": {
            "type": "integer",
            "title": "Source Count",
            "description": "Sources of any status.",
            "default": 0
          },
          "chunk_count": {
            "type": "integer",
            "title": "Chunk Count",
            "description": "Searchable passages (from ready sources).",
            "default": 0
          },
          "size": {
            "type": "integer",
            "title": "Size",
            "description": "Bytes of the uploaded files and fetched pages.",
            "default": 0
          },
          "processing": {
            "type": "integer",
            "title": "Processing",
            "description": "Sources still being processed.",
            "default": 0
          },
          "agents": {
            "items": {
              "$ref": "#/components/schemas/KnowledgeBaseAgent"
            },
            "type": "array",
            "title": "Agents",
            "description": "Agents that search it during calls."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At"
          },
          "created_by": {
            "type": "string",
            "title": "Created By",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "created_at",
          "updated_at"
        ],
        "title": "KnowledgeBase",
        "description": "A knowledge base, with totals over its sources."
      },
      "KnowledgeBaseAgent": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          }
        },
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "title": "KnowledgeBaseAgent"
      },
      "KnowledgeBaseDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "source_count": {
            "type": "integer",
            "title": "Source Count",
            "description": "Sources of any status.",
            "default": 0
          },
          "chunk_count": {
            "type": "integer",
            "title": "Chunk Count",
            "description": "Searchable passages (from ready sources).",
            "default": 0
          },
          "size": {
            "type": "integer",
            "title": "Size",
            "description": "Bytes of the uploaded files and fetched pages.",
            "default": 0
          },
          "processing": {
            "type": "integer",
            "title": "Processing",
            "description": "Sources still being processed.",
            "default": 0
          },
          "agents": {
            "items": {
              "$ref": "#/components/schemas/KnowledgeBaseAgent"
            },
            "type": "array",
            "title": "Agents",
            "description": "Agents that search it during calls."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At"
          },
          "created_by": {
            "type": "string",
            "title": "Created By",
            "default": ""
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/KnowledgeSource"
            },
            "type": "array",
            "title": "Sources",
            "description": "Newest first."
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "created_at",
          "updated_at"
        ],
        "title": "KnowledgeBaseDetail"
      },
      "KnowledgeBasePatch": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 120,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          }
        },
        "type": "object",
        "title": "KnowledgeBasePatch"
      },
      "KnowledgeSearch": {
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 2000,
            "minLength": 1,
            "title": "Query"
          },
          "limit": {
            "type": "integer",
            "maximum": 20,
            "minimum": 1,
            "title": "Limit",
            "default": 5
          }
        },
        "type": "object",
        "required": [
          "query"
        ],
        "title": "KnowledgeSearch"
      },
      "KnowledgeSearchHit": {
        "properties": {
          "kb_id": {
            "type": "string",
            "title": "Kb Id"
          },
          "source_id": {
            "type": "string",
            "title": "Source Id"
          },
          "source_name": {
            "type": "string",
            "title": "Source Name"
          },
          "text": {
            "type": "string",
            "title": "Text"
          },
          "score": {
            "type": "number",
            "title": "Score",
            "description": "Meaning similarity (cosine), 0 to 1."
          },
          "keyword": {
            "type": "boolean",
            "title": "Keyword",
            "description": "Among the best keyword (BM25) matches for the query.",
            "default": false
          },
          "relevant": {
            "type": "boolean",
            "title": "Relevant",
            "description": "Given to agents during calls: a high meaning score, or a top keyword match."
          }
        },
        "type": "object",
        "required": [
          "kb_id",
          "source_id",
          "source_name",
          "text",
          "score",
          "relevant"
        ],
        "title": "KnowledgeSearchHit"
      },
      "KnowledgeSearchResult": {
        "properties": {
          "results": {
            "items": {
              "$ref": "#/components/schemas/KnowledgeSearchHit"
            },
            "type": "array",
            "title": "Results"
          },
          "latency_ms": {
            "type": "integer",
            "title": "Latency Ms",
            "description": "Total time, including embedding the query."
          },
          "embed_ms": {
            "type": "integer",
            "title": "Embed Ms"
          },
          "search_ms": {
            "type": "number",
            "title": "Search Ms"
          },
          "min_score": {
            "type": "number",
            "title": "Min Score",
            "description": "Passages below this score are not given to the agent."
          }
        },
        "type": "object",
        "required": [
          "results",
          "latency_ms",
          "embed_ms",
          "search_ms",
          "min_score"
        ],
        "title": "KnowledgeSearchResult"
      },
      "KnowledgeSource": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "kb_id": {
            "type": "string",
            "title": "Kb Id"
          },
          "kind": {
            "type": "string",
            "enum": [
              "file",
              "url",
              "text"
            ],
            "title": "Kind"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "url": {
            "type": "string",
            "title": "Url",
            "default": ""
          },
          "content_type": {
            "type": "string",
            "title": "Content Type",
            "default": ""
          },
          "size": {
            "type": "integer",
            "title": "Size",
            "default": 0
          },
          "status": {
            "type": "string",
            "enum": [
              "processing",
              "ready",
              "failed"
            ],
            "title": "Status"
          },
          "error": {
            "type": "string",
            "title": "Error",
            "description": "Why processing failed, when `status` is `failed`.",
            "default": ""
          },
          "chunk_count": {
            "type": "integer",
            "title": "Chunk Count",
            "default": 0
          },
          "characters": {
            "type": "integer",
            "title": "Characters",
            "default": 0
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "processed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Processed At"
          },
          "created_by": {
            "type": "string",
            "title": "Created By",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "id",
          "kb_id",
          "kind",
          "name",
          "status",
          "created_at"
        ],
        "title": "KnowledgeSource",
        "description": "One document, pasted text or web page in a knowledge base."
      },
      "KycFields": {
        "properties": {
          "legal_name": {
            "type": "string",
            "maxLength": 150,
            "title": "Legal Name",
            "default": ""
          },
          "business_type": {
            "type": "string",
            "maxLength": 40,
            "title": "Business Type",
            "default": ""
          },
          "pan": {
            "type": "string",
            "maxLength": 10,
            "title": "Pan",
            "default": ""
          },
          "gstin": {
            "type": "string",
            "maxLength": 15,
            "title": "Gstin",
            "default": ""
          },
          "address_line": {
            "type": "string",
            "maxLength": 300,
            "title": "Address Line",
            "default": ""
          },
          "city": {
            "type": "string",
            "maxLength": 80,
            "title": "City",
            "default": ""
          },
          "state": {
            "type": "string",
            "maxLength": 80,
            "title": "State",
            "default": ""
          },
          "pincode": {
            "type": "string",
            "maxLength": 6,
            "title": "Pincode",
            "default": ""
          },
          "contact_name": {
            "type": "string",
            "maxLength": 80,
            "title": "Contact Name",
            "default": ""
          },
          "contact_phone": {
            "type": "string",
            "maxLength": 16,
            "title": "Contact Phone",
            "default": ""
          },
          "website": {
            "type": "string",
            "maxLength": 200,
            "title": "Website",
            "default": ""
          }
        },
        "type": "object",
        "title": "KycFields"
      },
      "KycUpdate": {
        "properties": {
          "fields": {
            "$ref": "#/components/schemas/KycFields"
          }
        },
        "type": "object",
        "required": [
          "fields"
        ],
        "title": "KycUpdate"
      },
      "LLMConfig": {
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "gemini",
              "bedrock",
              "openai",
              "azure_openai",
              "anthropic",
              "openrouter",
              "deepseek"
            ],
            "title": "Provider",
            "default": "gemini"
          },
          "model": {
            "type": "string",
            "maxLength": 200,
            "title": "Model",
            "default": "gemini-3.5-flash-lite"
          },
          "temperature": {
            "type": "number",
            "maximum": 2,
            "minimum": 0,
            "title": "Temperature",
            "default": 0.4
          },
          "max_tokens": {
            "type": "integer",
            "maximum": 4096,
            "minimum": 16,
            "title": "Max Tokens",
            "default": 300
          }
        },
        "type": "object",
        "title": "LLMConfig"
      },
      "LimitRequest": {
        "properties": {
          "requested_limit": {
            "type": "integer",
            "maximum": 1000,
            "minimum": 2,
            "title": "Requested Limit"
          },
          "reason": {
            "type": "string",
            "maxLength": 500,
            "minLength": 5,
            "title": "Reason"
          }
        },
        "type": "object",
        "required": [
          "requested_limit",
          "reason"
        ],
        "title": "LimitRequest"
      },
      "Lines": {
        "properties": {
          "quantity": {
            "type": "integer",
            "maximum": 500,
            "minimum": 1,
            "title": "Quantity",
            "description": "how many lines"
          }
        },
        "type": "object",
        "required": [
          "quantity"
        ],
        "title": "Lines"
      },
      "Login": {
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "title": "Email"
          },
          "password": {
            "type": "string",
            "maxLength": 128,
            "title": "Password"
          }
        },
        "type": "object",
        "required": [
          "email",
          "password"
        ],
        "title": "Login"
      },
      "NewInvite": {
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "title": "Email"
          },
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "admin",
              "developer",
              "viewer"
            ],
            "title": "Role",
            "default": "viewer"
          }
        },
        "type": "object",
        "required": [
          "email"
        ],
        "title": "NewInvite"
      },
      "NewKey": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 60,
            "minLength": 1,
            "title": "Name"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "NewKey"
      },
      "NewKnowledgeBase": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "title": "Name"
          },
          "description": {
            "type": "string",
            "maxLength": 1000,
            "title": "Description",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "NewKnowledgeBase"
      },
      "NewShare": {
        "properties": {
          "agent_id": {
            "type": "string",
            "title": "Agent Id"
          }
        },
        "type": "object",
        "required": [
          "agent_id"
        ],
        "title": "NewShare"
      },
      "NewTextSource": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 200,
            "minLength": 1,
            "title": "Name"
          },
          "text": {
            "type": "string",
            "maxLength": 500000,
            "minLength": 1,
            "title": "Text"
          }
        },
        "type": "object",
        "required": [
          "name",
          "text"
        ],
        "title": "NewTextSource"
      },
      "NewUrlSource": {
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 2000,
            "title": "Url",
            "description": "One page; links on it are not followed."
          },
          "name": {
            "type": "string",
            "maxLength": 200,
            "title": "Name",
            "description": "Defaults to the page title.",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "url"
        ],
        "title": "NewUrlSource"
      },
      "Password": {
        "properties": {
          "password": {
            "type": "string",
            "maxLength": 128,
            "title": "Password"
          }
        },
        "type": "object",
        "required": [
          "password"
        ],
        "title": "Password"
      },
      "PasswordChange": {
        "properties": {
          "current_password": {
            "type": "string",
            "maxLength": 128,
            "title": "Current Password"
          },
          "new_password": {
            "type": "string",
            "maxLength": 128,
            "minLength": 8,
            "title": "New Password"
          }
        },
        "type": "object",
        "required": [
          "current_password",
          "new_password"
        ],
        "title": "PasswordChange"
      },
      "PlaceCall": {
        "properties": {
          "to": {
            "type": "string",
            "pattern": "^\\+?[0-9]{8,15}$",
            "title": "To"
          },
          "from_number": {
            "type": "string",
            "pattern": "^$|^\\+?[0-9]{8,15}$",
            "title": "From Number",
            "default": ""
          },
          "user_data": {
            "additionalProperties": true,
            "type": "object",
            "title": "User Data"
          },
          "ignore_call_window": {
            "type": "boolean",
            "title": "Ignore Call Window",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "to"
        ],
        "title": "PlaceCall"
      },
      "PricingDraft": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 120,
            "title": "Name",
            "default": "draft"
          },
          "welcome_message": {
            "type": "string",
            "title": "Welcome Message",
            "default": ""
          },
          "system_prompt": {
            "type": "string",
            "title": "System Prompt",
            "default": ""
          },
          "llm": {
            "$ref": "#/components/schemas/LLMConfig"
          },
          "voice": {
            "$ref": "#/components/schemas/VoiceConfig"
          },
          "transcriber": {
            "$ref": "#/components/schemas/TranscriberConfig"
          },
          "call": {
            "$ref": "#/components/schemas/CallConfig"
          },
          "analytics": {
            "$ref": "#/components/schemas/AnalyticsConfig"
          },
          "tools": {
            "items": {
              "$ref": "#/components/schemas/ApiTool"
            },
            "type": "array",
            "title": "Tools"
          },
          "knowledge_base_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "maxItems": 10,
            "title": "Knowledge Base Ids"
          },
          "knowledge_mode": {
            "type": "string",
            "enum": [
              "auto",
              "search"
            ],
            "title": "Knowledge Mode",
            "default": "auto"
          },
          "webhook_url": {
            "type": "string",
            "title": "Webhook Url",
            "default": ""
          },
          "phone_number": {
            "type": "string",
            "title": "Phone Number",
            "default": ""
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "paused",
              "frozen"
            ],
            "title": "Status",
            "default": "active"
          },
          "avatar": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 499,
                "minimum": 0
              },
              {
                "type": "string",
                "pattern": "^(v1(\\.\\d{1,3}){9,10}|g1\\.\\d{1,3}\\.\\d{1,2})$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Avatar"
          }
        },
        "type": "object",
        "title": "PricingDraft",
        "description": "An agent's configuration as the editor holds it (unsaved); only the models, prompt, knowledge\nbases and hang-up settings change the estimate."
      },
      "Profile": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 80,
            "minLength": 1,
            "title": "Name"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "Profile"
      },
      "ProfileUpdate": {
        "properties": {
          "gstin": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 15
              },
              {
                "type": "null"
              }
            ],
            "title": "Gstin"
          },
          "address_line": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 300
              },
              {
                "type": "null"
              }
            ],
            "title": "Address Line"
          },
          "city": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 80
              },
              {
                "type": "null"
              }
            ],
            "title": "City"
          },
          "state": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 80
              },
              {
                "type": "null"
              }
            ],
            "title": "State"
          },
          "pincode": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 6
              },
              {
                "type": "null"
              }
            ],
            "title": "Pincode"
          },
          "contact_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 80
              },
              {
                "type": "null"
              }
            ],
            "title": "Contact Name"
          },
          "contact_phone": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 16
              },
              {
                "type": "null"
              }
            ],
            "title": "Contact Phone"
          },
          "website": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Website"
          }
        },
        "type": "object",
        "title": "ProfileUpdate",
        "description": "Only the fields an approved workspace may change; omitted fields keep their value."
      },
      "PromptRequest": {
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "create",
              "improve"
            ],
            "title": "Mode",
            "default": "create"
          },
          "description": {
            "type": "string",
            "maxLength": 4000,
            "title": "Description",
            "default": ""
          },
          "current_prompt": {
            "type": "string",
            "maxLength": 20000,
            "title": "Current Prompt",
            "default": ""
          },
          "agent_name": {
            "type": "string",
            "maxLength": 120,
            "title": "Agent Name",
            "default": ""
          },
          "language": {
            "type": "string",
            "maxLength": 20,
            "title": "Language",
            "default": ""
          },
          "variables": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "maxItems": 50,
            "title": "Variables"
          }
        },
        "type": "object",
        "title": "PromptRequest",
        "description": "`create`: write a prompt from a description; `improve`: rewrite the current prompt\n(following the description, if any)."
      },
      "Redeem": {
        "properties": {
          "code": {
            "type": "string",
            "maxLength": 40,
            "minLength": 1,
            "title": "Code"
          }
        },
        "type": "object",
        "required": [
          "code"
        ],
        "title": "Redeem"
      },
      "RetryRules": {
        "properties": {
          "outcomes": {
            "items": {
              "type": "string",
              "enum": [
                "no-answer",
                "busy",
                "failed",
                "voicemail"
              ]
            },
            "type": "array",
            "title": "Outcomes",
            "description": "call outcomes that are retried"
          },
          "max_retries": {
            "type": "integer",
            "maximum": 3,
            "minimum": 0,
            "title": "Max Retries",
            "description": "extra attempts per contact after the first call",
            "default": 1
          },
          "delay_minutes": {
            "type": "integer",
            "maximum": 1440,
            "minimum": 1,
            "title": "Delay Minutes",
            "description": "wait between attempts",
            "default": 30
          }
        },
        "type": "object",
        "title": "RetryRules"
      },
      "ScenarioConfig": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "title": "Name"
          },
          "persona": {
            "type": "string",
            "maxLength": 4000,
            "minLength": 10,
            "title": "Persona"
          },
          "variables": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "maxProperties": 50,
            "title": "Variables"
          },
          "max_turns": {
            "type": "integer",
            "maximum": 30,
            "minimum": 1,
            "title": "Max Turns",
            "default": 12
          },
          "criteria": {
            "items": {
              "$ref": "#/components/schemas/Criterion"
            },
            "type": "array",
            "maxItems": 20,
            "title": "Criteria"
          },
          "tool_stubs": {
            "additionalProperties": true,
            "type": "object",
            "maxProperties": 50,
            "title": "Tool Stubs"
          }
        },
        "type": "object",
        "required": [
          "name",
          "persona"
        ],
        "title": "ScenarioConfig"
      },
      "Signup": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 80,
            "minLength": 1,
            "title": "Name"
          },
          "email": {
            "type": "string",
            "format": "email",
            "title": "Email"
          },
          "password": {
            "type": "string",
            "maxLength": 128,
            "minLength": 8,
            "title": "Password"
          },
          "company": {
            "type": "string",
            "maxLength": 100,
            "minLength": 2,
            "title": "Company"
          }
        },
        "type": "object",
        "required": [
          "name",
          "email",
          "password",
          "company"
        ],
        "title": "Signup"
      },
      "SwitchPlan": {
        "properties": {
          "plan_id": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "title": "Plan Id"
          }
        },
        "type": "object",
        "required": [
          "plan_id"
        ],
        "title": "SwitchPlan"
      },
      "SystemLogs": {
        "properties": {
          "enabled": {
            "type": "boolean",
            "title": "Enabled"
          }
        },
        "type": "object",
        "required": [
          "enabled"
        ],
        "title": "SystemLogs"
      },
      "ToolTest": {
        "properties": {
          "tool": {
            "$ref": "#/components/schemas/ApiTool"
          },
          "args": {
            "additionalProperties": true,
            "type": "object",
            "title": "Args"
          }
        },
        "type": "object",
        "required": [
          "tool"
        ],
        "title": "ToolTest"
      },
      "Topup": {
        "properties": {
          "pack_id": {
            "type": "string",
            "title": "Pack Id",
            "default": ""
          },
          "amount_paise": {
            "type": "integer",
            "minimum": 0,
            "title": "Amount Paise",
            "default": 0
          }
        },
        "type": "object",
        "title": "Topup"
      },
      "TranscriberConfig": {
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "cartesia",
              "deepgram",
              "sarvam"
            ],
            "title": "Provider",
            "default": "cartesia"
          },
          "model": {
            "type": "string",
            "title": "Model",
            "default": "ink-2"
          },
          "turn_detection": {
            "type": "string",
            "enum": [
              "responsive",
              "balanced",
              "patient"
            ],
            "title": "Turn Detection",
            "default": "balanced"
          },
          "language": {
            "type": "string",
            "title": "Language",
            "default": "hi"
          },
          "endpointing_ms": {
            "type": "integer",
            "maximum": 3000,
            "minimum": 10,
            "title": "Endpointing Ms",
            "default": 300
          },
          "keyterms": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "maxItems": 100,
            "title": "Keyterms"
          },
          "fallbacks": {
            "items": {
              "$ref": "#/components/schemas/FallbackTranscriber"
            },
            "type": "array",
            "maxItems": 2,
            "title": "Fallbacks"
          }
        },
        "type": "object",
        "title": "TranscriberConfig",
        "description": "Speech to text."
      },
      "TransferTarget": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 60,
            "minLength": 1,
            "title": "Name",
            "description": "e.g. Support desk"
          },
          "number": {
            "type": "string",
            "pattern": "^\\+[1-9][0-9]{6,14}$",
            "title": "Number",
            "description": "E.164, e.g. +919876543210"
          },
          "description": {
            "type": "string",
            "maxLength": 300,
            "title": "Description",
            "description": "when to transfer here, e.g. billing questions",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "name",
          "number"
        ],
        "title": "TransferTarget",
        "description": "A person or desk the agent may hand a phone call to (`transfer_call`)."
      },
      "TwoFactorLogin": {
        "properties": {
          "challenge": {
            "type": "string",
            "maxLength": 500,
            "title": "Challenge"
          },
          "code": {
            "type": "string",
            "maxLength": 20,
            "minLength": 6,
            "title": "Code"
          }
        },
        "type": "object",
        "required": [
          "challenge",
          "code"
        ],
        "title": "TwoFactorLogin"
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "VoiceConfig": {
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "cartesia",
              "sarvam",
              "elevenlabs"
            ],
            "title": "Provider",
            "default": "cartesia"
          },
          "model": {
            "type": "string",
            "title": "Model",
            "default": "sonic-3.6"
          },
          "voice_id": {
            "type": "string",
            "title": "Voice Id",
            "default": ""
          },
          "voice_name": {
            "type": "string",
            "title": "Voice Name",
            "default": ""
          },
          "language": {
            "type": "string",
            "title": "Language",
            "default": "hi"
          },
          "speed": {
            "type": "number",
            "maximum": 1.5,
            "minimum": 0.6,
            "title": "Speed",
            "default": 1
          },
          "fallbacks": {
            "items": {
              "$ref": "#/components/schemas/FallbackVoice"
            },
            "type": "array",
            "maxItems": 3,
            "title": "Fallbacks"
          }
        },
        "type": "object",
        "title": "VoiceConfig",
        "description": "Text to speech."
      },
      "WorkspaceName": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 2,
            "title": "Name"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "WorkspaceName"
      },
      "Error": {
        "type": "object",
        "title": "Error",
        "properties": {
          "detail": {
            "type": "string",
            "title": "Detail",
            "description": "What went wrong, in plain words."
          }
        },
        "required": [
          "detail"
        ]
      },
      "Turn": {
        "properties": {
          "role": {
            "enum": [
              "assistant",
              "user",
              "tool"
            ],
            "title": "Role",
            "type": "string"
          },
          "text": {
            "title": "Text",
            "type": "string"
          },
          "at": {
            "format": "date-time",
            "title": "At",
            "type": "string"
          },
          "interrupted": {
            "default": false,
            "title": "Interrupted",
            "type": "boolean"
          }
        },
        "required": [
          "role",
          "text"
        ],
        "title": "Turn",
        "type": "object"
      },
      "Usage": {
        "properties": {
          "stt_seconds": {
            "default": 0,
            "title": "Stt Seconds",
            "type": "number"
          },
          "tts_characters": {
            "default": 0,
            "title": "Tts Characters",
            "type": "integer"
          },
          "llm_input_tokens": {
            "default": 0,
            "title": "Llm Input Tokens",
            "type": "integer"
          },
          "llm_output_tokens": {
            "default": 0,
            "title": "Llm Output Tokens",
            "type": "integer"
          },
          "llm_calls": {
            "default": 0,
            "title": "Llm Calls",
            "type": "integer"
          }
        },
        "title": "Usage",
        "type": "object"
      },
      "Agent": {
        "properties": {
          "name": {
            "maxLength": 120,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "welcome_message": {
            "default": "",
            "title": "Welcome Message",
            "type": "string"
          },
          "system_prompt": {
            "default": "",
            "title": "System Prompt",
            "type": "string"
          },
          "llm": {
            "$ref": "#/components/schemas/LLMConfig"
          },
          "voice": {
            "$ref": "#/components/schemas/VoiceConfig"
          },
          "transcriber": {
            "$ref": "#/components/schemas/TranscriberConfig"
          },
          "call": {
            "$ref": "#/components/schemas/CallConfig"
          },
          "analytics": {
            "$ref": "#/components/schemas/AnalyticsConfig"
          },
          "tools": {
            "items": {
              "$ref": "#/components/schemas/ApiTool"
            },
            "title": "Tools",
            "type": "array"
          },
          "knowledge_base_ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 10,
            "title": "Knowledge Base Ids",
            "type": "array"
          },
          "knowledge_mode": {
            "default": "auto",
            "enum": [
              "auto",
              "search"
            ],
            "title": "Knowledge Mode",
            "type": "string"
          },
          "webhook_url": {
            "default": "",
            "title": "Webhook Url",
            "type": "string"
          },
          "phone_number": {
            "default": "",
            "title": "Phone Number",
            "type": "string"
          },
          "status": {
            "default": "active",
            "enum": [
              "active",
              "paused",
              "frozen"
            ],
            "title": "Status",
            "type": "string"
          },
          "avatar": {
            "anyOf": [
              {
                "maximum": 499,
                "minimum": 0,
                "type": "integer"
              },
              {
                "pattern": "^(v1(\\.\\d{1,3}){9,10}|g1\\.\\d{1,3}\\.\\d{1,2})$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Avatar"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "version": {
            "default": 1,
            "title": "Version",
            "type": "integer"
          },
          "updated_by": {
            "default": "",
            "title": "Updated By",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "frozen_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Frozen At"
          },
          "frozen_reason": {
            "default": "",
            "title": "Frozen Reason",
            "type": "string"
          },
          "frozen_incident_id": {
            "default": "",
            "title": "Frozen Incident Id",
            "type": "string"
          },
          "frozen_from": {
            "default": "",
            "title": "Frozen From",
            "type": "string"
          },
          "variables": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "Variables",
            "description": "Every `{variable}` the welcome message and prompt use, in order."
          }
        },
        "required": [
          "name"
        ],
        "title": "Agent",
        "type": "object"
      },
      "Call": {
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "agent_id": {
            "title": "Agent Id",
            "type": "string"
          },
          "agent_name": {
            "default": "",
            "title": "Agent Name",
            "type": "string"
          },
          "channel": {
            "default": "phone",
            "enum": [
              "phone",
              "web"
            ],
            "title": "Channel",
            "type": "string"
          },
          "direction": {
            "default": "outbound",
            "enum": [
              "outbound",
              "inbound",
              "web"
            ],
            "title": "Direction",
            "type": "string"
          },
          "from_number": {
            "default": "",
            "title": "From Number",
            "type": "string"
          },
          "to_number": {
            "default": "",
            "title": "To Number",
            "type": "string"
          },
          "status": {
            "default": "queued",
            "enum": [
              "queued",
              "ringing",
              "in-progress",
              "completed",
              "failed",
              "no-answer",
              "busy",
              "canceled"
            ],
            "title": "Status",
            "type": "string"
          },
          "provider": {
            "default": "plivo",
            "title": "Provider",
            "type": "string"
          },
          "provider_call_id": {
            "default": "",
            "title": "Provider Call Id",
            "type": "string"
          },
          "provider_request_id": {
            "default": "",
            "title": "Provider Request Id",
            "type": "string"
          },
          "waiting_for": {
            "default": "",
            "title": "Waiting For",
            "type": "string"
          },
          "provider_account": {
            "default": "",
            "title": "Provider Account",
            "type": "string"
          },
          "user_data": {
            "additionalProperties": true,
            "title": "User Data",
            "type": "object"
          },
          "transcript": {
            "items": {
              "$ref": "#/components/schemas/Turn"
            },
            "title": "Transcript",
            "type": "array"
          },
          "usage": {
            "$ref": "#/components/schemas/Usage"
          },
          "recording_seconds": {
            "default": 0,
            "title": "Recording Seconds",
            "type": "number"
          },
          "hangup_by": {
            "default": "",
            "title": "Hangup By",
            "type": "string"
          },
          "hangup_reason": {
            "default": "",
            "title": "Hangup Reason",
            "type": "string"
          },
          "error": {
            "default": "",
            "title": "Error",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "answered_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Answered At"
          },
          "ended_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Ended At"
          },
          "duration_seconds": {
            "default": 0,
            "title": "Duration Seconds",
            "type": "number"
          },
          "first_audio_ms": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "First Audio Ms"
          },
          "cost_paise": {
            "default": 0,
            "title": "Cost Paise",
            "type": "integer"
          },
          "currency": {
            "default": "",
            "title": "Currency",
            "type": "string"
          },
          "cost_breakdown": {
            "additionalProperties": true,
            "title": "Cost Breakdown",
            "type": "object"
          },
          "plan_seconds_covered": {
            "default": 0,
            "title": "Plan Seconds Covered",
            "type": "integer"
          },
          "providers": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Providers",
            "type": "object"
          },
          "provider_cost_usd": {
            "default": 0,
            "title": "Provider Cost Usd",
            "type": "number"
          },
          "queued_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Queued At"
          },
          "dequeued_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Dequeued At"
          },
          "ignore_call_window": {
            "default": false,
            "title": "Ignore Call Window",
            "type": "boolean"
          },
          "summary": {
            "default": "",
            "title": "Summary",
            "type": "string"
          },
          "extracted": {
            "additionalProperties": true,
            "title": "Extracted",
            "type": "object"
          },
          "guardrail_incidents": {
            "default": 0,
            "title": "Guardrail Incidents",
            "type": "integer"
          },
          "guardrail_severity": {
            "default": "",
            "title": "Guardrail Severity",
            "type": "string"
          },
          "guardrail_check": {
            "additionalProperties": true,
            "title": "Guardrail Check",
            "type": "object"
          },
          "batch_id": {
            "default": "",
            "title": "Batch Id",
            "type": "string"
          },
          "batch_row": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Batch Row"
          },
          "attempt": {
            "default": 1,
            "title": "Attempt",
            "type": "integer"
          },
          "answered_by": {
            "default": "",
            "title": "Answered By",
            "type": "string"
          },
          "scheduled_for": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Scheduled For"
          },
          "rescheduled_from": {
            "default": "",
            "title": "Rescheduled From",
            "type": "string"
          },
          "rescheduled_to": {
            "default": "",
            "title": "Rescheduled To",
            "type": "string"
          },
          "rescheduled_for": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Rescheduled For"
          },
          "transferred_to": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Transferred To",
            "type": "object"
          },
          "transferred_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Transferred At"
          },
          "transfer_reason": {
            "default": "",
            "title": "Transfer Reason",
            "type": "string"
          },
          "transfer_status": {
            "default": "",
            "title": "Transfer Status",
            "type": "string"
          },
          "transfer_seconds": {
            "default": 0,
            "title": "Transfer Seconds",
            "type": "number"
          },
          "transfer_charged_paise": {
            "default": 0,
            "title": "Transfer Charged Paise",
            "type": "integer"
          }
        },
        "required": [
          "agent_id"
        ],
        "title": "Call",
        "type": "object"
      }
    },
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key",
        "description": "A workspace API key (`vx_...`), created in the console under Settings > API keys."
      },
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "`Authorization: Bearer <token>`: an API key (`vx_...`), an OAuth access token (`vxo_...`), or a session token from `POST /api/v1/auth/login` (then pick the workspace with `X-Workspace-ID`)."
      }
    }
  },
  "servers": [
    {
      "url": "https://api.vaakyo.com",
      "description": "Production"
    }
  ]
}