{
  "openapi": "3.1.0",
  "info": {
    "title": "Voxa API",
    "description": "Build, run and observe voice agents. Authenticate with an API key (`X-API-Key: vx_...` or `Authorization: Bearer vx_...`); money is in paise. 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.",
        "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",
        "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",
        "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/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",
        "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",
        "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.",
        "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/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"
              ]
            }
          }
        ]
      }
    },
    "/api/v1/billing/packs": {
      "get": {
        "tags": [
          "billing"
        ],
        "summary": "Packs",
        "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/webhooks/events": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "Event Types",
        "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",
        "operationId": "deliveries_api_webhooks_deliveries_get",
        "parameters": [
          {
            "name": "endpoint_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "",
              "title": "Endpoint Id"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 40,
              "default": "",
              "title": "Status"
            }
          },
          {
            "name": "call_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "",
              "title": "Call 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 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",
        "operationId": "logout_api_auth_logout_post",
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "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/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/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": "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/audit": {
      "get": {
        "tags": [
          "observe"
        ],
        "summary": "Audit Log",
        "operationId": "audit_log_api_audit_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": "target_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 30,
              "default": "",
              "title": "Target Type"
            }
          },
          {
            "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 Audit Log Api Audit 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": "audit.view",
          "onboarding": false,
          "api_key": false
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/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": {
      "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/{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}/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",
              "default": 30,
              "title": "Days"
            },
            "description": "calls from the last N days"
          },
          {
            "name": "agent_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "",
              "title": "Agent Id"
            }
          },
          {
            "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": 10,
              "default": "",
              "title": "Direction"
            }
          },
          {
            "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"
          }
        ],
        "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": "agent_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "",
              "title": "Agent Id"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80,
              "default": "",
              "title": "Status"
            }
          },
          {
            "name": "direction",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 10,
              "default": "",
              "title": "Direction"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80,
              "default": "",
              "title": "Q"
            }
          },
          {
            "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": "batch_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "description": "only the calls of this batch",
              "default": "",
              "title": "Batch Id"
            },
            "description": "only the calls of this batch"
          },
          {
            "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` and one\n`extracted.<key>` column per extracted 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/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": "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": "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",
        "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/{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, or a UTF-8 text or Markdown file (`.txt`, `.md`). 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": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "AcceptInvite": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 80,
            "title": "Name",
            "default": ""
          },
          "password": {
            "type": "string",
            "maxLength": 128,
            "minLength": 8,
            "title": "Password"
          }
        },
        "type": "object",
        "required": [
          "password"
        ],
        "title": "AcceptInvite"
      },
      "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"
          },
          "webhook_url": {
            "type": "string",
            "title": "Webhook Url",
            "default": ""
          },
          "phone_number": {
            "type": "string",
            "title": "Phone Number",
            "default": ""
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "paused"
            ],
            "title": "Status",
            "default": "active"
          }
        },
        "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)."
      },
      "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"
      },
      "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
          },
          "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
          }
        },
        "type": "object",
        "title": "CallConfig"
      },
      "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"
          }
        },
        "type": "object",
        "required": [
          "upload_id",
          "agent_id"
        ],
        "title": "CreateBatch"
      },
      "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."
      },
      "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": "Cosine similarity, 0 to 1."
          },
          "relevant": {
            "type": "boolean",
            "title": "Relevant",
            "description": "Above the cut-off the agent uses during calls."
          }
        },
        "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",
            "const": "gemini",
            "title": "Provider",
            "default": "gemini"
          },
          "model": {
            "type": "string",
            "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"
      },
      "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"
      },
      "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"
      },
      "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."
      },
      "RetryRules": {
        "properties": {
          "outcomes": {
            "items": {
              "type": "string",
              "enum": [
                "no-answer",
                "busy",
                "failed"
              ]
            },
            "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"
      },
      "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"
      },
      "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"
            ],
            "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"
          }
        },
        "type": "object",
        "title": "TranscriberConfig",
        "description": "Speech to text."
      },
      "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",
            "const": "cartesia",
            "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
          }
        },
        "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"
          },
          "webhook_url": {
            "default": "",
            "title": "Webhook Url",
            "type": "string"
          },
          "phone_number": {
            "default": "",
            "title": "Phone Number",
            "type": "string"
          },
          "status": {
            "default": "active",
            "enum": [
              "active",
              "paused"
            ],
            "title": "Status",
            "type": "string"
          },
          "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"
          },
          "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"
          },
          "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"
          },
          "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"
          },
          "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"
          }
        },
        "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://voxa.abhinavyadav.in",
      "description": "Production"
    }
  ]
}