{
  "openapi": "3.1.1",
  "info": {
    "title": "Costfluent Public API",
    "description": "The Costfluent Public API reads the cost a workspace holds and manages what is built on it: providers and custom provider uploads, cost reports, saved filters, dashboards and folders, segments, tags and virtual tags, budgets, cost alerts and report notifications, anomalies, exchange rates, workspaces, and the account's entitlement and metered usage.\n\nEvery request carries an API token in the `Authorization` header; [Authentication](/api/authentication) explains the organization and workspace tokens and what each may reach. Requests and responses are JSON ([Data formats](/api/formats)); lists are paginated ([Pagination](/api/pagination)), errors share one shape ([Errors](/api/errors)), and every token has a request budget ([Rate limits](/api/rate-limits)).",
    "version": "v1"
  },
  "servers": [
    {
      "url": "https://api.costfluent.com",
      "description": "Production"
    }
  ],
  "paths": {
    "/v1/workspaces": {
      "post": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Create workspace",
        "description": "Creates a new workspace for organizing cost data",
        "operationId": "CreateWorkspaceEndpoint",
        "requestBody": {
          "x-name": "CreateWorkspaceRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWorkspaceRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceCreatedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__0"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__1"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "List workspaces",
        "description": "Returns all workspaces for the authenticated organization",
        "operationId": "ListWorkspacesEndpoint",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfWorkspaceResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__2"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__3"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/workspaces/{workspaceId}": {
      "delete": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Delete workspace",
        "description": "Deletes a workspace; its reports, dashboards, budgets and everything else in it go with it and cannot be restored. The connections it used belong to the organization and keep their cost data.",
        "operationId": "DeleteWorkspaceEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__4"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__5"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Get workspace",
        "description": "Returns details of a specific workspace",
        "operationId": "GetWorkspaceEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__6"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__7"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Update workspace",
        "description": "Updates workspace settings",
        "operationId": "UpdateWorkspaceEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateWorkspaceRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWorkspaceRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__8"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__9"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/workspace-providers": {
      "post": {
        "tags": [
          "Workspace Providers"
        ],
        "summary": "Create workspace provider",
        "description": "Enables a connection in a workspace, for all its accounts or for the accounts listed. One connection can be enabled in several workspaces, each for its own accounts.",
        "operationId": "CreateWorkspaceProviderEndpoint",
        "requestBody": {
          "x-name": "CreateWorkspaceProviderRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWorkspaceProviderRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceProviderResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__10"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__11"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Workspace Providers"
        ],
        "summary": "List workspace providers",
        "description": "Returns the connections enabled in a workspace and the accounts it reads of each",
        "operationId": "ListWorkspaceProvidersEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfWorkspaceProviderResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__12"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__13"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/workspace-providers/{workspaceProviderId}": {
      "delete": {
        "tags": [
          "Workspace Providers"
        ],
        "summary": "Delete workspace provider",
        "description": "Stops a workspace reading a connection. The connection and its cost stay; other workspaces that enable it are unaffected.",
        "operationId": "DeleteWorkspaceProviderEndpoint",
        "parameters": [
          {
            "name": "workspaceProviderId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspaceProviderPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__14"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__15"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Workspace Providers"
        ],
        "summary": "Get workspace provider",
        "description": "Returns one connection enabled in a workspace and the accounts it reads",
        "operationId": "GetWorkspaceProviderEndpoint",
        "parameters": [
          {
            "name": "workspaceProviderId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspaceProviderPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceProviderResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__16"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__17"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "Workspace Providers"
        ],
        "summary": "Update workspace provider",
        "description": "Turns a connection on or off in a workspace, or replaces the accounts it reads",
        "operationId": "UpdateWorkspaceProviderEndpoint",
        "parameters": [
          {
            "name": "workspaceProviderId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspaceProviderPublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateWorkspaceProviderRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWorkspaceProviderRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceProviderResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__18"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__19"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/virtual-tags": {
      "post": {
        "tags": [
          "Virtual Tags"
        ],
        "summary": "Create virtual tag",
        "description": "Creates a new virtual tag",
        "operationId": "CreateVirtualTagEndpoint",
        "requestBody": {
          "x-name": "CreateVirtualTagRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVirtualTagRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VirtualTagCreatedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__20"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__21"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Virtual Tags"
        ],
        "summary": "List virtual tags",
        "description": "Returns all virtual tags for a workspace",
        "operationId": "ListVirtualTagsEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfVirtualTagResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__22"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__23"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/virtual-tags/{virtualTagId}": {
      "delete": {
        "tags": [
          "Virtual Tags"
        ],
        "summary": "Delete virtual tag",
        "description": "Deletes a virtual tag",
        "operationId": "DeleteVirtualTagEndpoint",
        "parameters": [
          {
            "name": "virtualTagId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/VirtualTagPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__24"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__25"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Virtual Tags"
        ],
        "summary": "Get virtual tag",
        "description": "Returns a specific virtual tag",
        "operationId": "GetVirtualTagEndpoint",
        "parameters": [
          {
            "name": "virtualTagId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/VirtualTagPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VirtualTagResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__26"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__27"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Virtual Tags"
        ],
        "summary": "Update virtual tag",
        "description": "Updates a virtual tag",
        "operationId": "UpdateVirtualTagEndpoint",
        "parameters": [
          {
            "name": "virtualTagId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/VirtualTagPublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateVirtualTagRouteRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVirtualTagRouteRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__28"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__29"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/me": {
      "get": {
        "tags": [
          "Utility"
        ],
        "summary": "Get current token info",
        "description": "Returns information about the current API token context",
        "operationId": "MeEndpoint",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__30"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__31"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/ping": {
      "get": {
        "tags": [
          "Utility"
        ],
        "summary": "Health check",
        "description": "Returns API status and version",
        "operationId": "PingEndpoint",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PingResponse"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__32"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__33"
          }
        },
        "security": [
          {}
        ]
      }
    },
    "/v1/tag-keys/{tagKeyId}": {
      "delete": {
        "tags": [
          "Tags"
        ],
        "summary": "Delete tag key",
        "description": "Deletes a tag key",
        "operationId": "DeleteTagKeyEndpoint",
        "parameters": [
          {
            "name": "tagKeyId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/TagKeyPublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__34"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__35"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Tags"
        ],
        "summary": "Get tag key",
        "description": "Returns a specific tag key",
        "operationId": "GetTagKeyEndpoint",
        "parameters": [
          {
            "name": "tagKeyId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/TagKeyPublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagKeyResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__36"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__37"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/tag-keys": {
      "get": {
        "tags": [
          "Tags"
        ],
        "summary": "List tag keys",
        "description": "Returns all discovered tag keys for the organization",
        "operationId": "ListTagKeysEndpoint",
        "parameters": [
          {
            "name": "providerKey",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfTagKeyResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__38"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__39"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/saved-filters": {
      "post": {
        "tags": [
          "Saved Filters"
        ],
        "summary": "Create saved filter",
        "description": "Creates a reusable filter configuration",
        "operationId": "CreateSavedFilterEndpoint",
        "requestBody": {
          "x-name": "CreateSavedFilterRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSavedFilterRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SavedFilterCreatedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__40"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__41"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Saved Filters"
        ],
        "summary": "List saved filters",
        "description": "Returns all saved filters for a workspace",
        "operationId": "ListSavedFiltersEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfSavedFilterResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__42"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__43"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/saved-filters/{filterId}": {
      "delete": {
        "tags": [
          "Saved Filters"
        ],
        "summary": "Delete saved filter",
        "description": "Deletes a saved filter",
        "operationId": "DeleteSavedFilterEndpoint",
        "parameters": [
          {
            "name": "filterId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SavedFilterPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__44"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__45"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Saved Filters"
        ],
        "summary": "Get saved filter",
        "description": "Returns a specific saved filter",
        "operationId": "GetSavedFilterEndpoint",
        "parameters": [
          {
            "name": "filterId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SavedFilterPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SavedFilterResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__46"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__47"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "Saved Filters"
        ],
        "summary": "Update saved filter",
        "description": "Updates a saved filter",
        "operationId": "UpdateSavedFilterEndpoint",
        "parameters": [
          {
            "name": "filterId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SavedFilterPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateSavedFilterRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSavedFilterRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SavedFilterResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__48"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__49"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/providers": {
      "post": {
        "tags": [
          "Providers"
        ],
        "summary": "Connect provider",
        "description": "Connects a new cloud provider, platform, or integration for cost monitoring",
        "operationId": "ConnectProviderEndpoint",
        "requestBody": {
          "x-name": "ConnectProviderRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConnectProviderRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProviderCreatedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__50"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__51"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Providers"
        ],
        "summary": "List providers",
        "description": "Returns all connected providers for the authenticated organization",
        "operationId": "ListProvidersEndpoint",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "schema": {
              "nullable": true,
              "type": "string",
              "description": "",
              "x-enumNames": [
                "Cloud",
                "Platform",
                "SaaS",
                "Custom"
              ],
              "x-extensible-enum": [
                "cloud",
                "platform",
                "saaS",
                "custom"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfProviderResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__52"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__53"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/providers/{providerId}": {
      "delete": {
        "tags": [
          "Providers"
        ],
        "summary": "Delete provider",
        "description": "Disconnects a provider: its stored credentials are deleted, every workspace stops counting it at once, and the cost data it imported is then erased. Reports, budgets and alerts stay. This cannot be undone.",
        "operationId": "DeleteProviderEndpoint",
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__54"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__55"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Providers"
        ],
        "summary": "Get provider",
        "description": "Returns details of a specific provider",
        "operationId": "GetProviderEndpoint",
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProviderResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__56"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__57"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "Providers"
        ],
        "summary": "Update provider",
        "description": "Updates provider settings, credentials, or configuration",
        "operationId": "UpdateProviderEndpoint",
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateProviderRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProviderRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProviderResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__58"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__59"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/providers/available": {
      "get": {
        "tags": [
          "Providers"
        ],
        "summary": "Get available providers",
        "description": "Returns all supported provider types and their configuration requirements",
        "operationId": "GetAvailableProvidersEndpoint",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfProviderDefinitionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__60"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__61"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/providers/aws/connector": {
      "get": {
        "tags": [
          "Providers"
        ],
        "summary": "Get the AWS connector",
        "description": "Returns the Costfluent principal and this organization's external ID that an AWS IAM role must trust before it is connected. Stable for the organization; read-only.",
        "operationId": "GetAwsConnectorEndpoint",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AwsConnectorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__62"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__63"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/providers/{providerId}/sync-history": {
      "get": {
        "tags": [
          "Providers"
        ],
        "summary": "Get provider sync history",
        "description": "Returns the provider's newest 100 collection runs, newest first, paged. A run with status PartialFailure published incomplete data: quarantinedCount rows could not be imported.",
        "operationId": "GetProviderSyncHistoryEndpoint",
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfSyncHistoryEntryResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__64"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__65"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/providers/gcp/service-account": {
      "post": {
        "tags": [
          "Providers"
        ],
        "summary": "Provision the GCP service account",
        "description": "Returns the service account this organization grants BigQuery Data Viewer on its GCP billing export dataset to, creating it on the first call. Idempotent.",
        "operationId": "ProvisionGcpServiceAccountEndpoint",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GcpServiceAccountResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__66"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__67"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/providers/{providerId}/test": {
      "post": {
        "tags": [
          "Providers"
        ],
        "summary": "Test provider connection",
        "description": "Validates credentials and connectivity to the provider",
        "operationId": "TestProviderConnectionEndpoint",
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectionTestResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__68"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__69"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/providers/{providerId}/sync": {
      "post": {
        "tags": [
          "Providers"
        ],
        "summary": "Trigger provider sync",
        "description": "Initiates a cost data sync from the provider. Use fullSync=true for complete re-sync.",
        "operationId": "TriggerProviderSyncEndpoint",
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "TriggerProviderSyncRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerProviderSyncRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyncTriggerResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__70"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__71"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/kubernetes/reports": {
      "post": {
        "tags": [
          "Kubernetes"
        ],
        "summary": "Report Kubernetes usage",
        "description": "Accepts one aggregated window from the Costfluent Kubernetes agent, as JSON, gzip-compressed with Content-Encoding: gzip. The first report of a new cluster_id registers the cluster. Requires an organization token with the ReportKubernetesUsage capability.",
        "operationId": "ReportKubernetesUsageEndpoint",
        "requestBody": {
          "x-name": "KubernetesReport",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KubernetesReport"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KubernetesReportAcceptedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "409": {
            "description": "",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "410": {
            "description": "",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "413": {
            "description": "",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__72"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__73"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/folders": {
      "post": {
        "tags": [
          "Folders"
        ],
        "summary": "Create folder",
        "description": "Creates a new folder for organizing reports",
        "operationId": "CreateFolderEndpoint",
        "requestBody": {
          "x-name": "CreateFolderRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFolderRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FolderCreatedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__74"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__75"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Folders"
        ],
        "summary": "List folders",
        "description": "Returns a workspace's top-level folders, each with its subfolders",
        "operationId": "ListFoldersEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfFolderResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__76"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__77"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/folders/{folderId}": {
      "delete": {
        "tags": [
          "Folders"
        ],
        "summary": "Delete folder",
        "description": "Deletes a folder. Its reports and subfolders move to its parent folder, or to the top level when it has none.",
        "operationId": "DeleteFolderEndpoint",
        "parameters": [
          {
            "name": "folderId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/FolderPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__78"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__79"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Folders"
        ],
        "summary": "Get folder",
        "description": "Returns a specific folder",
        "operationId": "GetFolderEndpoint",
        "parameters": [
          {
            "name": "folderId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/FolderPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FolderResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__80"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__81"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "Folders"
        ],
        "summary": "Update folder",
        "description": "Updates folder title or parent",
        "operationId": "UpdateFolderEndpoint",
        "parameters": [
          {
            "name": "folderId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/FolderPublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateFolderRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateFolderRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FolderResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__82"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__83"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/exchange-rates/currencies": {
      "get": {
        "tags": [
          "Exchange Rates"
        ],
        "summary": "Get available currencies",
        "description": "Returns the ISO 4217 codes of the currencies exchange rates are published for",
        "operationId": "GetAvailableCurrenciesEndpoint",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfString"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__84"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__85"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/exchange-rates/rate": {
      "get": {
        "tags": [
          "Exchange Rates"
        ],
        "summary": "Get exchange rate",
        "description": "Returns the exchange rate for a currency pair on a specific date",
        "operationId": "GetExchangeRateEndpoint",
        "parameters": [
          {
            "name": "baseCurrency",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Z]{3}$"
            }
          },
          {
            "name": "targetCurrency",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Z]{3}$"
            }
          },
          {
            "name": "date",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExchangeRateResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__86"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__87"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/workspaces/{workspaceId}/exchange-rates/policy": {
      "get": {
        "tags": [
          "Exchange Rates"
        ],
        "summary": "Get the workspace's exchange rate policy",
        "description": "The conversion method, the named rate source, and the period the policy applies to. Read-only: the policy is an accounting decision recorded with the account, not a setting.",
        "operationId": "GetFxPolicyEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FxPolicyStatusResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__88"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__89"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/exchange-rates": {
      "get": {
        "tags": [
          "Exchange Rates"
        ],
        "summary": "List exchange rates",
        "description": "Returns the published exchange rates over a window of publication days, paged; the window defaults to the latest publication day",
        "operationId": "ListExchangeRatesEndpoint",
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date"
            }
          },
          {
            "name": "baseCurrency",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^[A-Z]{3}$"
            }
          },
          {
            "name": "targetCurrency",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^[A-Z]{3}$"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfExchangeRateResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__90"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__91"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/dashboards": {
      "post": {
        "tags": [
          "Dashboards"
        ],
        "summary": "Create dashboard",
        "description": "Creates a new dashboard",
        "operationId": "CreateDashboardEndpoint",
        "requestBody": {
          "x-name": "CreateDashboardRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDashboardRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardCreatedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__92"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__93"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Dashboards"
        ],
        "summary": "List dashboards",
        "description": "Returns all dashboards for a workspace",
        "operationId": "ListDashboardsEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfDashboardResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__94"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__95"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/dashboards/{dashboardId}": {
      "delete": {
        "tags": [
          "Dashboards"
        ],
        "summary": "Delete dashboard",
        "description": "Deletes a dashboard and all its widgets",
        "operationId": "DeleteDashboardEndpoint",
        "parameters": [
          {
            "name": "dashboardId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DashboardPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__96"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__97"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Dashboards"
        ],
        "summary": "Get dashboard",
        "description": "Returns a specific dashboard with widgets",
        "operationId": "GetDashboardEndpoint",
        "parameters": [
          {
            "name": "dashboardId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DashboardPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__98"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__99"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "Dashboards"
        ],
        "summary": "Update dashboard",
        "description": "Updates a dashboard",
        "operationId": "UpdateDashboardEndpoint",
        "parameters": [
          {
            "name": "dashboardId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DashboardPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateDashboardRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDashboardRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__100"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__101"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/custom-providers/{providerId}/uploads": {
      "post": {
        "tags": [
          "Custom Provider"
        ],
        "summary": "Upload cost files",
        "description": "Uploads one run of a FOCUS cost export to a custom provider: every file of the run in a repeated multipart field `file`, each .csv or .csv.gz with the same header, up to 90 MB together. The upload is accepted as pending and processed in the background; if any row is invalid nothing is committed and the upload fails with its errors. A completed upload replaces the provider's cost for every day from its first charge to its last.",
        "operationId": "UploadCustomCostsEndpoint",
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UploadCustomCostsRequest",
          "description": "",
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/UploadCustomCostsRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomCostUploadResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__102"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__103"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Custom Provider"
        ],
        "summary": "List uploads",
        "description": "Returns a custom provider's uploads, newest first, each with the days it covers and what it billed.",
        "operationId": "ListCustomCostUploadsEndpoint",
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfCustomCostUploadResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__104"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__105"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/custom-providers/{providerId}/uploads/{uploadId}": {
      "get": {
        "tags": [
          "Custom Provider"
        ],
        "summary": "Get upload",
        "description": "Returns one upload with its status and, when it failed, the first errors of its report.",
        "operationId": "GetCustomCostUploadEndpoint",
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          },
          {
            "name": "uploadId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomCostUploadPublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomCostUploadResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__106"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__107"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Custom Provider"
        ],
        "summary": "Delete upload",
        "description": "Deletes an upload and removes the cost it still contributes. Days a later upload replaced keep that upload's cost.",
        "operationId": "DeleteCustomCostUploadEndpoint",
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          },
          {
            "name": "uploadId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomCostUploadPublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__108"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__109"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/custom-providers/{providerId}/costs": {
      "post": {
        "tags": [
          "Custom Provider"
        ],
        "summary": "Submit costs batch",
        "description": "Submits a batch of cost records to a custom provider. Supports idempotency via Idempotency-Key header.",
        "operationId": "SubmitCostsEndpoint",
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "SubmitCostsRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitCostsRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubmitCostsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__110"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__111"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-report-subscriptions/{subscriptionId}/activate": {
      "post": {
        "tags": [
          "Report Notifications"
        ],
        "summary": "Activate report notification",
        "description": "Activates a paused report notification",
        "operationId": "ActivateCostReportSubscriptionEndpoint",
        "parameters": [
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostReportSubscriptionPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__112"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__113"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-report-subscriptions": {
      "post": {
        "tags": [
          "Report Notifications"
        ],
        "summary": "Create report notification",
        "description": "Creates a new scheduled report notification",
        "operationId": "CreateCostReportSubscriptionEndpoint",
        "requestBody": {
          "x-name": "CreateCostReportSubscriptionRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCostReportSubscriptionRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CostReportSubscriptionCreatedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__114"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__115"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Report Notifications"
        ],
        "summary": "List report notifications",
        "description": "Returns all report notifications for a workspace",
        "operationId": "ListCostReportSubscriptionsEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          },
          {
            "name": "costReportId",
            "in": "query",
            "schema": {
              "nullable": true,
              "oneOf": [
                {
                  "$ref": "#/components/schemas/CostReportPublicId"
                }
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfCostReportSubscriptionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__116"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__117"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-report-subscriptions/{subscriptionId}/deactivate": {
      "post": {
        "tags": [
          "Report Notifications"
        ],
        "summary": "Deactivate report notification",
        "description": "Deactivates a report notification",
        "operationId": "DeactivateCostReportSubscriptionEndpoint",
        "parameters": [
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostReportSubscriptionPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__118"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__119"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-report-subscriptions/{subscriptionId}": {
      "delete": {
        "tags": [
          "Report Notifications"
        ],
        "summary": "Delete report notification",
        "description": "Deletes a report notification",
        "operationId": "DeleteCostReportSubscriptionEndpoint",
        "parameters": [
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostReportSubscriptionPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__120"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__121"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Report Notifications"
        ],
        "summary": "Get report notification",
        "description": "Returns a specific report notification",
        "operationId": "GetCostReportSubscriptionEndpoint",
        "parameters": [
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostReportSubscriptionPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CostReportSubscriptionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__122"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__123"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Report Notifications"
        ],
        "summary": "Update report notification",
        "description": "Updates a report notification",
        "operationId": "UpdateCostReportSubscriptionEndpoint",
        "parameters": [
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostReportSubscriptionPublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateCostReportSubscriptionRouteRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCostReportSubscriptionRouteRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__124"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__125"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-reports": {
      "post": {
        "tags": [
          "Cost Reports"
        ],
        "summary": "Create cost report",
        "description": "Creates a new cost report configuration",
        "operationId": "CreateCostReportEndpoint",
        "requestBody": {
          "x-name": "CreateCostReportRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCostReportRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CostReportCreatedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__126"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__127"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Cost Reports"
        ],
        "summary": "List cost reports",
        "description": "Returns all cost reports for a workspace, optionally filtered by folder",
        "operationId": "ListCostReportsEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          },
          {
            "name": "folderId",
            "in": "query",
            "schema": {
              "nullable": true,
              "oneOf": [
                {
                  "$ref": "#/components/schemas/FolderPublicId"
                }
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfCostReportResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__128"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__129"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-reports/{costReportId}": {
      "delete": {
        "tags": [
          "Cost Reports"
        ],
        "summary": "Delete cost report",
        "description": "Deletes a cost report, removes the dashboard widgets that show it and deactivates its subscriptions. Refused with 409 in_use, naming the budgets, while a budget measures it.",
        "operationId": "DeleteCostReportEndpoint",
        "parameters": [
          {
            "name": "costReportId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostReportPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__130"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__131"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Cost Reports"
        ],
        "summary": "Get cost report",
        "description": "Returns a specific cost report configuration",
        "operationId": "GetCostReportEndpoint",
        "parameters": [
          {
            "name": "costReportId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostReportPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CostReportResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__132"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__133"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "Cost Reports"
        ],
        "summary": "Update cost report",
        "description": "Updates a cost report configuration",
        "operationId": "UpdateCostReportEndpoint",
        "parameters": [
          {
            "name": "costReportId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostReportPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateCostReportRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCostReportRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CostReportResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__134"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__135"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-reports/{costReportId}/data": {
      "get": {
        "tags": [
          "Cost Reports"
        ],
        "summary": "Get cost report data",
        "description": "Returns the computed cost data for a report",
        "operationId": "GetCostReportDataEndpoint",
        "parameters": [
          {
            "name": "costReportId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostReportPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CostReportDataResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__136"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__137"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-filters/translate": {
      "get": {
        "tags": [
          "Cost Filters"
        ],
        "summary": "Translate a cost filter",
        "description": "Reads a cost filter written as its JSON document or as CQL text, such as costs.provider = 'aws' AND costs.region LIKE 'eu-%', and returns both canonical spellings. A filter that does not parse returns 400 with the position of the error. Every filter parameter and field of this API accepts either spelling; CQL is described at https://docs.costfluent.com/cost-reports/filter-language.",
        "operationId": "TranslateCostFilterEndpoint",
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CostFilterTranslationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__138"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__139"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/costs": {
      "get": {
        "tags": [
          "Cost Data"
        ],
        "summary": "Get cost data",
        "description": "Returns cost data grouped by up to three ordered dimensions, filtered by the supplied cost filter. A page holds up to 5,000 rows, and paging reaches 100,000 rows (page × limit): a larger read splits its date window into shorter ranges.",
        "operationId": "GetCostDataEndpoint",
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "schema": {
              "nullable": true,
              "oneOf": [
                {
                  "$ref": "#/components/schemas/WorkspacePublicId"
                }
              ]
            }
          },
          {
            "name": "granularity",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "groupBy",
            "in": "query",
            "style": "form",
            "explode": true,
            "schema": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "cloudAccountIds",
            "in": "query",
            "style": "form",
            "explode": true,
            "schema": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "includeCredits",
            "in": "query",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeRefunds",
            "in": "query",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeTax",
            "in": "query",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "amortize",
            "in": "query",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CostDataResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__140"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__141"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/costs/forecast": {
      "get": {
        "tags": [
          "Cost Data"
        ],
        "summary": "Get cost forecast",
        "description": "Returns cost forecast for the upcoming months",
        "operationId": "GetCostForecastEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "months",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CostForecastResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__142"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__143"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/costs/summary": {
      "get": {
        "tags": [
          "Cost Data"
        ],
        "summary": "Get cost summary",
        "description": "Returns aggregated cost summary with comparisons",
        "operationId": "GetCostSummaryEndpoint",
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "schema": {
              "nullable": true,
              "oneOf": [
                {
                  "$ref": "#/components/schemas/WorkspacePublicId"
                }
              ]
            }
          },
          {
            "name": "cloudAccountIds",
            "in": "query",
            "style": "form",
            "explode": true,
            "schema": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "includeCredits",
            "in": "query",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeRefunds",
            "in": "query",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeTax",
            "in": "query",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "amortize",
            "in": "query",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CostSummaryResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__144"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__145"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-alerts": {
      "post": {
        "tags": [
          "Cost Alerts"
        ],
        "summary": "Create cost alert",
        "description": "Creates a new cost alert",
        "operationId": "CreateCostAlertEndpoint",
        "requestBody": {
          "x-name": "CreateCostAlertRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCostAlertRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CostAlertCreatedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__146"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__147"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Cost Alerts"
        ],
        "summary": "List cost alerts",
        "description": "Returns all cost alerts for a workspace",
        "operationId": "ListCostAlertsEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfCostAlertResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__148"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__149"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-alerts/{alertId}": {
      "delete": {
        "tags": [
          "Cost Alerts"
        ],
        "summary": "Delete cost alert",
        "description": "Deletes a cost alert",
        "operationId": "DeleteCostAlertEndpoint",
        "parameters": [
          {
            "name": "alertId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostAlertPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__150"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__151"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Cost Alerts"
        ],
        "summary": "Get cost alert",
        "description": "Returns a specific cost alert",
        "operationId": "GetCostAlertEndpoint",
        "parameters": [
          {
            "name": "alertId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostAlertPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CostAlertResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__152"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__153"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "Cost Alerts"
        ],
        "summary": "Update cost alert",
        "description": "Updates a cost alert",
        "operationId": "UpdateCostAlertEndpoint",
        "parameters": [
          {
            "name": "alertId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostAlertPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateCostAlertRouteRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCostAlertRouteRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__154"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__155"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-alerts/{alertId}/events": {
      "get": {
        "tags": [
          "Cost Alerts"
        ],
        "summary": "Get cost alert events",
        "description": "Returns triggered events for a cost alert",
        "operationId": "GetCostAlertEventsEndpoint",
        "parameters": [
          {
            "name": "alertId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostAlertPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfCostAlertEventResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__156"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__157"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-alerts/{alertId}/pause": {
      "post": {
        "tags": [
          "Cost Alerts"
        ],
        "summary": "Pause cost alert",
        "description": "Pauses evaluation of a cost alert",
        "operationId": "PauseCostAlertEndpoint",
        "parameters": [
          {
            "name": "alertId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostAlertPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__158"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__159"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/cost-alerts/{alertId}/resume": {
      "post": {
        "tags": [
          "Cost Alerts"
        ],
        "summary": "Resume cost alert",
        "description": "Resumes evaluation of a paused cost alert",
        "operationId": "ResumeCostAlertEndpoint",
        "parameters": [
          {
            "name": "alertId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostAlertPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__160"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__161"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/contracting/data-processing-agreement": {
      "get": {
        "tags": [
          "Contracting"
        ],
        "summary": "Get the data processing agreement status",
        "description": "Whether this account's tier is sold with a signed data processing agreement, whether one is currently in force, and why cost collection is paused if it is. Read-only: the agreement is executed outside the product and recorded by us.",
        "operationId": "GetDataProcessingAgreementEndpoint",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DpaStatusResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__162"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__163"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/budgets": {
      "post": {
        "tags": [
          "Budgets"
        ],
        "summary": "Create budget",
        "description": "Creates a budget over a workspace, a segment or a saved cost report, with optional alert thresholds and notification channels",
        "operationId": "CreateBudgetEndpoint",
        "requestBody": {
          "x-name": "CreateBudgetRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBudgetRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "headers": {
              "ETag": {
                "description": "The stored version of the resource, to send back as If-Match."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__164"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__165"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Budgets"
        ],
        "summary": "List budgets",
        "description": "Returns all budgets, optionally filtered by workspace",
        "operationId": "ListBudgetsEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "schema": {
              "nullable": true,
              "oneOf": [
                {
                  "$ref": "#/components/schemas/WorkspacePublicId"
                }
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfBudgetResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__166"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__167"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/budgets/{budgetId}": {
      "delete": {
        "tags": [
          "Budgets"
        ],
        "summary": "Delete budget",
        "description": "Deletes a budget and its alert configuration",
        "operationId": "DeleteBudgetEndpoint",
        "parameters": [
          {
            "name": "budgetId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/BudgetPublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__168"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__169"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "Budgets"
        ],
        "summary": "Get budget",
        "description": "Returns a specific budget with current spend",
        "operationId": "GetBudgetEndpoint",
        "parameters": [
          {
            "name": "budgetId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/BudgetPublicId"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "ETag": {
                "description": "The stored version of the resource, to send back as If-Match."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__170"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__171"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "Budgets"
        ],
        "summary": "Update budget",
        "description": "Updates the name, amount, segment or notification channels of a budget",
        "operationId": "UpdateBudgetEndpoint",
        "parameters": [
          {
            "name": "budgetId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/BudgetPublicId"
            }
          },
          {
            "name": "if-Match",
            "in": "header",
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateBudgetRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateBudgetRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "ETag": {
                "description": "The stored version of the resource, to send back as If-Match."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BudgetResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "412": {
            "description": "",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__172"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__173"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/entitlement": {
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "Get the account's entitlement",
        "description": "The tier, every limit it carries, any limit raised for this account, and the published ladder so a caller can see what the next plan lifts.",
        "operationId": "GetEntitlementEndpoint",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntitlementResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__174"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__175"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/usage": {
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "Get the account's metered usage",
        "description": "The same numbers the caps are enforced against, so a script can check headroom rather than discover a limit by being refused.",
        "operationId": "GetUsageEndpoint",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsageResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__176"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__177"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/anomalies/{anomalyId}/acknowledge": {
      "post": {
        "tags": [
          "Anomalies"
        ],
        "summary": "Acknowledge anomaly",
        "description": "Marks an anomaly as acknowledged. Detection no longer changes its status. A workspace token can acknowledge only its workspace's anomalies.",
        "operationId": "AcknowledgeAnomalyEndpoint",
        "parameters": [
          {
            "name": "anomalyId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AnomalyPublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__178"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__179"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/anomalies": {
      "get": {
        "tags": [
          "Anomalies"
        ],
        "summary": "List anomalies",
        "description": "Returns detected cost anomalies, newest charge date first. A workspace token lists its workspace's anomalies only. An unknown cloudAccountId answers 404.",
        "operationId": "ListAnomaliesEndpoint",
        "parameters": [
          {
            "name": "cloudAccountId",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "severity",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "unacknowledgedOnly",
            "in": "query",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfAnomalyResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__180"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__181"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/allocation/rules": {
      "get": {
        "tags": [
          "Allocation"
        ],
        "summary": "List allocation rules",
        "description": "Returns the workspace's rules in compiled precedence order, paged. The order is the meaning of the set, so reading every page in turn is also the export.",
        "operationId": "ListAllocationRulesEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfAllocationRuleResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__182"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__183"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Allocation"
        ],
        "summary": "Create an allocation rule",
        "operationId": "CreateAllocationRuleEndpoint",
        "requestBody": {
          "x-name": "CreateAllocationRuleRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAllocationRuleRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AllocationRuleResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__184"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__185"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/allocation/rules/{ruleId}": {
      "put": {
        "tags": [
          "Allocation"
        ],
        "summary": "Update an allocation rule",
        "operationId": "UpdateAllocationRuleEndpoint",
        "parameters": [
          {
            "name": "ruleId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AllocationRulePublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateAllocationRuleRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAllocationRuleRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AllocationRuleResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__186"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__187"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Allocation"
        ],
        "summary": "Delete an allocation rule",
        "description": "Allocation is evaluated at query time, so removing a rule restates every past month immediately.",
        "operationId": "DeleteAllocationRuleEndpoint",
        "parameters": [
          {
            "name": "ruleId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AllocationRulePublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__188"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__189"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/allocation/rules/order": {
      "post": {
        "tags": [
          "Allocation"
        ],
        "summary": "Reorder the allocation rule set",
        "operationId": "ReorderAllocationRulesEndpoint",
        "requestBody": {
          "x-name": "ReorderAllocationRulesRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReorderAllocationRulesRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AllocationRuleResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__190"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__191"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/allocation/coverage": {
      "get": {
        "tags": [
          "Allocation"
        ],
        "summary": "Read allocation coverage",
        "operationId": "GetAllocationCoverageEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          },
          {
            "name": "windowStart",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "windowEndExclusive",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "costBasis",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AllocationCoverageResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__192"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__193"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/segments": {
      "get": {
        "tags": [
          "Allocation"
        ],
        "summary": "List segments",
        "description": "Returns every segment cost can be assigned to in a workspace",
        "operationId": "ListSegmentsEndpoint",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfSegmentResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__194"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__195"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Allocation"
        ],
        "summary": "Create a segment",
        "operationId": "CreateSegmentEndpoint",
        "requestBody": {
          "x-name": "CreateSegmentRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSegmentRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SegmentResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__196"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__197"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/segments/{segmentId}": {
      "put": {
        "tags": [
          "Allocation"
        ],
        "summary": "Update a segment",
        "operationId": "UpdateSegmentEndpoint",
        "parameters": [
          {
            "name": "segmentId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SegmentPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "requestBody": {
          "x-name": "UpdateSegmentRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSegmentRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SegmentResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__198"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__199"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Allocation"
        ],
        "summary": "Delete a segment",
        "description": "Refused with 409 in_use while any rule still assigns cost to it or any budget measures it",
        "operationId": "DeleteSegmentEndpoint",
        "parameters": [
          {
            "name": "segmentId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SegmentPublicId"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkspacePublicId"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__200"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__201"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    },
    "/v1/allocation/rules/preview": {
      "post": {
        "tags": [
          "Allocation"
        ],
        "summary": "Preview an allocation rule",
        "description": "Computes what the rule would move without creating it. Allocation is evaluated at query time, so enabling a rule restates history immediately.",
        "operationId": "PreviewAllocationRuleEndpoint",
        "requestBody": {
          "x-name": "PreviewAllocationRuleRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PreviewAllocationRuleRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AllocationDryRunResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The API token lacks the operation's capability, or is a workspace token naming another workspace or an organization-level operation",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "The resource does not exist or is not visible to this token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests; retry after the Retry-After header, or the RateLimit-Reset header that carries the same seconds",
            "headers": {
              "RateLimit-Limit": {
                "description": "Requests the limit that refused this one allows in its window",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests left in the window: 0 on a refusal",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the window frees a request",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying, the same as RateLimit-Reset",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError",
            "description": "",
            "__uniqueRefKey": "#/components/responses/InternalServerError__202"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable",
            "description": "",
            "__uniqueRefKey": "#/components/responses/ServiceUnavailable__203"
          }
        },
        "security": [
          {
            "ApiTokenAuth": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "WorkspaceCreatedResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/WorkspacePublicId"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "WorkspacePublicId": {
        "type": "string",
        "pattern": "^wsp_[A-Za-z0-9_-]{22}$"
      },
      "ApiError": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "title",
          "status",
          "code",
          "retryable"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer",
            "format": "int32"
          },
          "detail": {
            "type": [
              "string",
              "null"
            ]
          },
          "instance": {
            "type": [
              "string",
              "null"
            ]
          },
          "code": {
            "type": "string"
          },
          "retryable": {
            "type": "boolean"
          },
          "traceId": {
            "type": [
              "string",
              "null"
            ]
          },
          "errors": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/ApiErrorEntry"
            }
          }
        }
      },
      "ApiErrorEntry": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "reason"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "code": {
            "type": [
              "string",
              "null"
            ]
          },
          "params": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "CreateWorkspaceRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "currency"
        ],
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 200,
            "minLength": 0,
            "nullable": false
          },
          "currency": {
            "type": "string",
            "maxLength": 3,
            "minLength": 3,
            "pattern": "^[A-Z]{3}$",
            "nullable": false
          },
          "timeZone": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "DeleteWorkspaceRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "WorkspaceResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "currency",
          "timeZone"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/WorkspacePublicId"
          },
          "name": {
            "type": "string"
          },
          "currency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "enableCurrencyConversion": {
            "type": "boolean"
          },
          "conversionCurrency": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{3}$"
          },
          "conversionMethod": {
            "$ref": "#/components/schemas/FxMethod"
          },
          "enableAutomaticSyncing": {
            "type": "boolean"
          },
          "timeZone": {
            "type": "string"
          },
          "providerCount": {
            "type": "integer",
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "FxMethod": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "MonthEndRate",
          "MonthlyAverage",
          "TransactionDate"
        ],
        "enum": [
          "monthEndRate",
          "monthlyAverage",
          "transactionDate"
        ]
      },
      "GetWorkspaceRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfWorkspaceResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkspaceResponse"
            }
          }
        }
      },
      "PaginationLinks": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "self"
        ],
        "properties": {
          "self": {
            "type": "string"
          },
          "first": {
            "type": [
              "string",
              "null"
            ]
          },
          "prev": {
            "type": [
              "string",
              "null"
            ]
          },
          "next": {
            "type": [
              "string",
              "null"
            ]
          },
          "last": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "PaginatedRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "UpdateWorkspaceRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 200,
            "minLength": 0
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{3}$"
          },
          "enableCurrencyConversion": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "conversionCurrency": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{3}$"
          },
          "conversionMethod": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/FxMethod"
              }
            ]
          },
          "enableAutomaticSyncing": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "timeZone": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "WorkspaceProviderResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "workspaceId",
          "providerId",
          "providerName",
          "accountIds"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/WorkspaceProviderPublicId"
          },
          "workspaceId": {
            "$ref": "#/components/schemas/WorkspacePublicId"
          },
          "providerId": {
            "$ref": "#/components/schemas/ProviderPublicId"
          },
          "providerName": {
            "type": "string"
          },
          "providerKey": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ProviderKey"
              }
            ]
          },
          "isEnabled": {
            "type": "boolean"
          },
          "accountIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "addedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "WorkspaceProviderPublicId": {
        "type": "string",
        "pattern": "^wpr_[A-Za-z0-9_-]{22}$"
      },
      "ProviderPublicId": {
        "type": "string",
        "pattern": "^prv_[A-Za-z0-9_-]{22}$"
      },
      "ProviderKey": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Aws",
          "Azure",
          "Gcp",
          "Oracle",
          "Alibaba",
          "Ibm",
          "DigitalOcean",
          "Linode",
          "Vultr",
          "Hetzner",
          "Ovh",
          "Kubernetes",
          "OpenShift",
          "Rancher",
          "Databricks",
          "Snowflake",
          "BigQuery",
          "Redshift",
          "Firebolt",
          "Starburst",
          "MongoDbAtlas",
          "PlanetScale",
          "CockroachDb",
          "Redis",
          "Supabase",
          "Neon",
          "Fauna",
          "Timescale",
          "Datadog",
          "NewRelic",
          "Splunk",
          "Elastic",
          "Grafana",
          "Dynatrace",
          "Honeycomb",
          "Confluent",
          "Kafka",
          "Pulsar",
          "Cloudflare",
          "Fastly",
          "Akamai",
          "CloudFront",
          "GitHub",
          "GitLab",
          "CircleCi",
          "Buildkite",
          "Codefresh",
          "Vercel",
          "Netlify",
          "Railway",
          "Render",
          "Fly",
          "Heroku",
          "OpenAi",
          "Anthropic",
          "HuggingFace",
          "Cohere",
          "Replicate",
          "AzureOpenAi",
          "AwsBedrock",
          "VertexAi",
          "Twilio",
          "SendGrid",
          "Mailgun",
          "Salesforce",
          "Atlassian",
          "Slack",
          "Zoom",
          "Custom"
        ],
        "x-extensible-enum": [
          "aws",
          "azure",
          "gcp",
          "oracle",
          "alibaba",
          "ibm",
          "digitalOcean",
          "linode",
          "vultr",
          "hetzner",
          "ovh",
          "kubernetes",
          "openShift",
          "rancher",
          "databricks",
          "snowflake",
          "bigQuery",
          "redshift",
          "firebolt",
          "starburst",
          "mongoDbAtlas",
          "planetScale",
          "cockroachDb",
          "redis",
          "supabase",
          "neon",
          "fauna",
          "timescale",
          "datadog",
          "newRelic",
          "splunk",
          "elastic",
          "grafana",
          "dynatrace",
          "honeycomb",
          "confluent",
          "kafka",
          "pulsar",
          "cloudflare",
          "fastly",
          "akamai",
          "cloudFront",
          "gitHub",
          "gitLab",
          "circleCi",
          "buildkite",
          "codefresh",
          "vercel",
          "netlify",
          "railway",
          "render",
          "fly",
          "heroku",
          "openAi",
          "anthropic",
          "huggingFace",
          "cohere",
          "replicate",
          "azureOpenAi",
          "awsBedrock",
          "vertexAi",
          "twilio",
          "sendGrid",
          "mailgun",
          "salesforce",
          "atlassian",
          "slack",
          "zoom",
          "custom"
        ]
      },
      "CreateWorkspaceProviderRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId",
          "providerId"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__204"
          },
          "providerId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/ProviderPublicId",
            "__uniqueRefKey": "#/components/schemas/ProviderPublicId__205"
          },
          "accountIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "DeleteWorkspaceProviderRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "GetWorkspaceProviderRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfWorkspaceProviderResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkspaceProviderResponse"
            }
          }
        }
      },
      "ListWorkspaceProvidersRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "UpdateWorkspaceProviderRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__206"
          },
          "isEnabled": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "accountIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "VirtualTagCreatedResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "key"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/VirtualTagPublicId"
          },
          "key": {
            "type": "string"
          }
        }
      },
      "VirtualTagPublicId": {
        "type": "string",
        "pattern": "^vtag_[A-Za-z0-9_-]{22}$"
      },
      "CreateVirtualTagRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId",
          "key"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__207"
          },
          "key": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "defaultValue": {
            "type": [
              "string",
              "null"
            ]
          },
          "collapsedTagKeys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VirtualTagRuleRequest"
            }
          }
        }
      },
      "VirtualTagRuleRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "value",
          "filter"
        ],
        "properties": {
          "value": {
            "type": "string"
          },
          "filter": {
            "type": "string"
          }
        }
      },
      "DeleteVirtualTagRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "VirtualTagResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "key",
          "collapsedTagKeys",
          "rules"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/VirtualTagPublicId"
          },
          "key": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "defaultValue": {
            "type": [
              "string",
              "null"
            ]
          },
          "collapsedTagKeys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VirtualTagRuleResponse"
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "VirtualTagRuleResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "value",
          "filter"
        ],
        "properties": {
          "value": {
            "type": "string"
          },
          "filter": {
            "type": "string"
          }
        }
      },
      "GetVirtualTagRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfVirtualTagResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VirtualTagResponse"
            }
          }
        }
      },
      "ListVirtualTagsRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "UpdateVirtualTagRouteRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__208"
          },
          "key": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "defaultValue": {
            "type": [
              "string",
              "null"
            ]
          },
          "collapsedTagKeys": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "rules": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/VirtualTagRuleRequest"
            }
          }
        }
      },
      "MeResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "organizationId",
          "tokenType",
          "tokenName",
          "capabilities"
        ],
        "properties": {
          "organizationId": {
            "$ref": "#/components/schemas/OrganizationPublicId"
          },
          "workspaceId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/WorkspacePublicId"
              }
            ]
          },
          "tokenType": {
            "type": "string"
          },
          "tokenName": {
            "type": "string"
          },
          "capabilities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "OrganizationPublicId": {
        "type": "string",
        "pattern": "^org_[A-Za-z0-9_-]{22}$"
      },
      "PingResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "status",
          "timestamp",
          "version"
        ],
        "properties": {
          "status": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "version": {
            "type": "string"
          }
        }
      },
      "DeleteTagKeyRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "TagKeyPublicId": {
        "type": "string",
        "pattern": "^tag_[A-Za-z0-9_-]{22}$"
      },
      "TagKeyResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "key",
          "providerKeys"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/TagKeyPublicId"
          },
          "key": {
            "type": "string"
          },
          "providerKeys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "valueCount": {
            "type": "integer",
            "format": "int32"
          },
          "lastSeenAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "isHidden": {
            "type": "boolean"
          },
          "isPreferred": {
            "type": "boolean"
          }
        }
      },
      "GetTagKeyRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfTagKeyResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TagKeyResponse"
            }
          }
        }
      },
      "ListTagKeysRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "SavedFilterCreatedResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "title"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/SavedFilterPublicId"
          },
          "title": {
            "type": "string"
          }
        }
      },
      "SavedFilterPublicId": {
        "type": "string",
        "pattern": "^flt_[A-Za-z0-9_-]{22}$"
      },
      "CreateSavedFilterRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId",
          "title",
          "filter"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__209"
          },
          "title": {
            "type": "string",
            "maxLength": 200,
            "minLength": 0,
            "nullable": false
          },
          "filter": {
            "type": "string",
            "maxLength": 4000,
            "minLength": 0,
            "nullable": false
          },
          "isDefault": {
            "type": "boolean"
          }
        }
      },
      "DeleteSavedFilterRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "SavedFilterResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "title",
          "filter"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/SavedFilterPublicId"
          },
          "title": {
            "type": "string"
          },
          "filter": {
            "type": "string"
          },
          "isDefault": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "GetSavedFilterRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfSavedFilterResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SavedFilterResponse"
            }
          }
        }
      },
      "ListSavedFiltersRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "UpdateSavedFilterRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "filter": {
            "type": [
              "string",
              "null"
            ]
          },
          "isDefault": {
            "type": [
              "boolean",
              "null"
            ]
          }
        }
      },
      "ProviderCreatedResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "type",
          "key",
          "name"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ProviderPublicId"
          },
          "type": {
            "$ref": "#/components/schemas/ProviderType"
          },
          "key": {
            "$ref": "#/components/schemas/ProviderKey"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "ProviderType": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Cloud",
          "Platform",
          "SaaS",
          "Custom"
        ],
        "x-extensible-enum": [
          "cloud",
          "platform",
          "saaS",
          "custom"
        ]
      },
      "ConnectProviderRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "key",
          "credentials"
        ],
        "properties": {
          "key": {
            "$ref": "#/components/schemas/ProviderKey"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255,
            "minLength": 0
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 1000,
            "minLength": 0
          },
          "parentProviderId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ProviderPublicId"
              }
            ]
          },
          "externalId": {
            "type": [
              "string",
              "null"
            ]
          },
          "credentials": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "settings": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          },
          "syncFrequencyMinutes": {
            "type": "integer",
            "format": "int32",
            "maximum": 1440,
            "minimum": 60
          }
        }
      },
      "DeleteProviderRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfProviderDefinitionResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProviderDefinitionResponse"
            }
          }
        }
      },
      "ProviderDefinitionResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "key",
          "type",
          "displayName",
          "requiredCredentialFields",
          "optionalSettingFields",
          "kind"
        ],
        "properties": {
          "key": {
            "$ref": "#/components/schemas/ProviderKey"
          },
          "type": {
            "$ref": "#/components/schemas/ProviderType"
          },
          "displayName": {
            "type": "string"
          },
          "iconUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "requiresParentProvider": {
            "type": "boolean"
          },
          "requiredCredentialFields": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "optionalSettingFields": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "kind": {
            "$ref": "#/components/schemas/ProviderKind"
          }
        }
      },
      "ProviderKind": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "NativeConnector",
          "FileUpload",
          "Unsupported",
          "Agent"
        ],
        "x-extensible-enum": [
          "nativeConnector",
          "fileUpload",
          "unsupported",
          "agent"
        ]
      },
      "AwsConnectorResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "principalArn",
          "externalId",
          "region"
        ],
        "properties": {
          "principalArn": {
            "type": "string"
          },
          "externalId": {
            "type": "string"
          },
          "templateUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "region": {
            "type": "string"
          }
        }
      },
      "ProviderResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "type",
          "key",
          "name",
          "status"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ProviderPublicId"
          },
          "type": {
            "$ref": "#/components/schemas/ProviderType"
          },
          "key": {
            "$ref": "#/components/schemas/ProviderKey"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "$ref": "#/components/schemas/ProviderStatus"
          },
          "parentProviderId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ProviderPublicId"
              }
            ]
          },
          "externalId": {
            "type": [
              "string",
              "null"
            ]
          },
          "lastSyncAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "lastSyncStatus": {
            "type": [
              "string",
              "null"
            ]
          },
          "lastSyncError": {
            "type": [
              "string",
              "null"
            ]
          },
          "nextSyncAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "syncFrequencyMinutes": {
            "type": "integer",
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "ProviderStatus": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Pending",
          "Connecting",
          "Active",
          "Syncing",
          "Error",
          "Disabled"
        ],
        "x-extensible-enum": [
          "pending",
          "connecting",
          "active",
          "syncing",
          "error",
          "disabled"
        ]
      },
      "GetProviderRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfSyncHistoryEntryResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SyncHistoryEntryResponse"
            }
          }
        }
      },
      "SyncHistoryEntryResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "startedAt": {
            "type": "string",
            "format": "date-time"
          },
          "completedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "status": {
            "type": "string"
          },
          "recordsIngested": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "quarantinedCount": {
            "type": "integer",
            "format": "int32"
          },
          "errorMessage": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetProviderSyncHistoryRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfProviderResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProviderResponse"
            }
          }
        }
      },
      "ListProvidersRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "GcpServiceAccountResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "serviceAccountEmail"
        ],
        "properties": {
          "serviceAccountEmail": {
            "type": "string"
          },
          "organizationId": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[0-9]+$"
          },
          "directoryCustomerId": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "ConnectionTestResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "success"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": [
              "string",
              "null"
            ]
          },
          "metadata": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {}
          }
        }
      },
      "TestProviderConnectionRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "SyncTriggerResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "triggered"
        ],
        "properties": {
          "triggered": {
            "type": "boolean"
          },
          "message": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "TriggerProviderSyncRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "fullSync": {
            "type": "boolean"
          }
        }
      },
      "UpdateProviderRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 1000,
            "minLength": 0
          },
          "externalId": {
            "type": [
              "string",
              "null"
            ]
          },
          "credentials": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          },
          "settings": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          },
          "syncFrequencyMinutes": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "maximum": 1440,
            "minimum": 60
          }
        }
      },
      "KubernetesReportAcceptedResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "cluster_id",
          "status"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/K8sClusterPublicId"
          },
          "cluster_id": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/K8sClusterStatus"
          }
        }
      },
      "K8sClusterPublicId": {
        "type": "string",
        "pattern": "^k8s_[A-Za-z0-9_-]{22}$"
      },
      "K8sClusterStatus": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Importing",
          "Stable",
          "Stale",
          "Warning"
        ],
        "enum": [
          "importing",
          "stable",
          "stale",
          "warning"
        ]
      },
      "KubernetesReport": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "schema_version": {
            "type": "integer",
            "format": "int32"
          },
          "cluster_id": {
            "type": "string"
          },
          "agent_version": {
            "type": "string"
          },
          "agent_instance_id": {
            "type": "string"
          },
          "window_start": {
            "type": "string",
            "format": "date-time"
          },
          "window_end": {
            "type": "string",
            "format": "date-time"
          },
          "nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KubernetesReportNode"
            }
          },
          "pods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KubernetesReportPod"
            }
          }
        }
      },
      "KubernetesReportNode": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string"
          },
          "provider_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "instance_type": {
            "type": [
              "string",
              "null"
            ]
          },
          "region": {
            "type": [
              "string",
              "null"
            ]
          },
          "zone": {
            "type": [
              "string",
              "null"
            ]
          },
          "spot": {
            "type": "boolean"
          },
          "observed_seconds": {
            "type": "number",
            "format": "double"
          },
          "capacity_cpu_cores": {
            "type": "number",
            "format": "double"
          },
          "capacity_memory_bytes": {
            "type": "integer",
            "format": "int64"
          },
          "capacity_gpu": {
            "type": "integer",
            "format": "int32"
          },
          "allocatable_cpu_cores": {
            "type": "number",
            "format": "double"
          },
          "allocatable_memory_bytes": {
            "type": "integer",
            "format": "int64"
          },
          "labels": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          },
          "annotations": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "KubernetesReportPod": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "namespace": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "node": {
            "type": "string"
          },
          "controller_kind": {
            "type": [
              "string",
              "null"
            ]
          },
          "controller": {
            "type": [
              "string",
              "null"
            ]
          },
          "labels": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          },
          "annotations": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          },
          "namespace_labels": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          },
          "containers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KubernetesReportContainer"
            }
          }
        }
      },
      "KubernetesReportContainer": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string"
          },
          "observed_seconds": {
            "type": "number",
            "format": "double"
          },
          "cpu_request_cores": {
            "type": "number",
            "format": "double"
          },
          "memory_request_bytes": {
            "type": "integer",
            "format": "int64"
          },
          "gpu_request": {
            "type": "integer",
            "format": "int32"
          },
          "cpu_usage_core_seconds": {
            "type": "number",
            "format": "double"
          },
          "memory_usage_byte_seconds": {
            "type": "number",
            "format": "double"
          },
          "cpu_allocated_core_seconds": {
            "type": "number",
            "format": "double"
          },
          "memory_allocated_byte_seconds": {
            "type": "number",
            "format": "double"
          },
          "cpu_usage_peak_cores": {
            "type": "number",
            "format": "double"
          },
          "memory_usage_peak_bytes": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "FolderCreatedResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "title"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/FolderPublicId"
          },
          "title": {
            "type": "string"
          }
        }
      },
      "FolderPublicId": {
        "type": "string",
        "pattern": "^fld_[A-Za-z0-9_-]{22}$"
      },
      "CreateFolderRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId",
          "title"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__210"
          },
          "title": {
            "type": "string",
            "maxLength": 200,
            "minLength": 0,
            "nullable": false
          },
          "parentId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/FolderPublicId"
              }
            ]
          }
        }
      },
      "DeleteFolderRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "FolderResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "title"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/FolderPublicId"
          },
          "title": {
            "type": "string"
          },
          "parentId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/FolderPublicId"
              }
            ]
          },
          "reportCount": {
            "type": "integer",
            "format": "int32"
          },
          "children": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/FolderResponse"
            }
          }
        }
      },
      "GetFolderRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfFolderResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FolderResponse"
            }
          }
        }
      },
      "ListFoldersRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "UpdateFolderRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__211"
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 200,
            "minLength": 0
          },
          "parentId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/FolderPublicId"
              }
            ]
          }
        }
      },
      "PaginatedResponseOfString": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ExchangeRateResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "baseCurrency",
          "targetCurrency",
          "rate",
          "effectiveDate",
          "source"
        ],
        "properties": {
          "baseCurrency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "targetCurrency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "rate": {
            "type": "number",
            "format": "double"
          },
          "effectiveDate": {
            "type": "string",
            "format": "date"
          },
          "source": {
            "type": "string"
          }
        }
      },
      "GetExchangeRateRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "FxPolicyStatusResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "available",
          "current",
          "history"
        ],
        "properties": {
          "available": {
            "type": "boolean"
          },
          "current": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/FxPolicyResponse"
              }
            ]
          },
          "history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FxPolicyResponse"
            }
          }
        }
      },
      "FxPolicyResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "token",
          "method",
          "source",
          "presentationCurrency",
          "effectiveFrom",
          "effectiveToExclusive",
          "setAt",
          "isCurrent",
          "description"
        ],
        "properties": {
          "token": {
            "$ref": "#/components/schemas/FxPolicyPublicId"
          },
          "method": {
            "$ref": "#/components/schemas/FxMethod"
          },
          "source": {
            "type": "string"
          },
          "presentationCurrency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "effectiveFrom": {
            "type": "string",
            "format": "date"
          },
          "effectiveToExclusive": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "setAt": {
            "type": "string",
            "format": "date-time"
          },
          "isCurrent": {
            "type": "boolean"
          },
          "description": {
            "type": "string"
          }
        }
      },
      "FxPolicyPublicId": {
        "type": "string",
        "pattern": "^fxp_[A-Za-z0-9_-]{22}$"
      },
      "GetFxPolicyRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfExchangeRateResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExchangeRateResponse"
            }
          }
        }
      },
      "ListExchangeRatesRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "DashboardCreatedResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "title"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/DashboardPublicId"
          },
          "title": {
            "type": "string"
          }
        }
      },
      "DashboardPublicId": {
        "type": "string",
        "pattern": "^dsh_[A-Za-z0-9_-]{22}$"
      },
      "CreateDashboardRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId",
          "title"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__212"
          },
          "title": {
            "type": "string",
            "maxLength": 200,
            "minLength": 0,
            "nullable": false
          },
          "isDefault": {
            "type": "boolean"
          },
          "dateInterval": {
            "$ref": "#/components/schemas/DateInterval"
          },
          "dateBin": {
            "$ref": "#/components/schemas/DateBin"
          }
        }
      },
      "DateInterval": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "ThisMonth",
          "LastMonth",
          "Last7Days",
          "Last30Days",
          "Last90Days",
          "YearToDate",
          "Custom",
          "ThisQuarter",
          "LastQuarter",
          "ThisYear",
          "LastYear",
          "Last3Days",
          "Last14Days",
          "Last3Months",
          "Last6Months",
          "Last12Months",
          "Last24Months",
          "Last36Months"
        ],
        "enum": [
          "thisMonth",
          "lastMonth",
          "last7Days",
          "last30Days",
          "last90Days",
          "yearToDate",
          "custom",
          "thisQuarter",
          "lastQuarter",
          "thisYear",
          "lastYear",
          "last3Days",
          "last14Days",
          "last3Months",
          "last6Months",
          "last12Months",
          "last24Months",
          "last36Months"
        ]
      },
      "DateBin": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Day",
          "Week",
          "Month",
          "Quarter",
          "Cumulative"
        ],
        "enum": [
          "day",
          "week",
          "month",
          "quarter",
          "cumulative"
        ]
      },
      "DeleteDashboardRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "DashboardResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "title",
          "dateInterval",
          "dateBin",
          "widgets"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/DashboardPublicId"
          },
          "title": {
            "type": "string"
          },
          "isDefault": {
            "type": "boolean"
          },
          "dateInterval": {
            "$ref": "#/components/schemas/DateInterval"
          },
          "dateBin": {
            "$ref": "#/components/schemas/DateBin"
          },
          "widgets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WidgetResponse"
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "WidgetResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "type",
          "title",
          "position"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/DashboardWidgetPublicId"
          },
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "position": {
            "$ref": "#/components/schemas/WidgetPositionResponse"
          },
          "config": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {}
          }
        }
      },
      "DashboardWidgetPublicId": {
        "type": "string",
        "pattern": "^wdg_[A-Za-z0-9_-]{22}$"
      },
      "WidgetPositionResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "x": {
            "type": "integer",
            "format": "int32"
          },
          "y": {
            "type": "integer",
            "format": "int32"
          },
          "w": {
            "type": "integer",
            "format": "int32"
          },
          "h": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "GetDashboardRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfDashboardResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DashboardResponse"
            }
          }
        }
      },
      "ListDashboardsRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "UpdateDashboardRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "dateInterval": {
            "type": [
              "string",
              "null"
            ]
          },
          "dateBin": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "CustomCostUploadResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "status",
          "fileName",
          "fileSizeBytes",
          "totalRows",
          "successRows",
          "errorRows",
          "uploadedAt"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/CustomCostUploadPublicId"
          },
          "status": {
            "$ref": "#/components/schemas/UploadStatus"
          },
          "fileName": {
            "type": "string"
          },
          "fileSizeBytes": {
            "type": "integer",
            "format": "int64"
          },
          "totalRows": {
            "type": "integer",
            "format": "int32"
          },
          "successRows": {
            "type": "integer",
            "format": "int32"
          },
          "errorRows": {
            "type": "integer",
            "format": "int32"
          },
          "coveredFrom": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "coveredTo": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "billedTotals": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          },
          "uploadedAt": {
            "type": "string",
            "format": "date-time"
          },
          "processedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "errors": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/CustomCostUploadError"
            }
          }
        }
      },
      "CustomCostUploadPublicId": {
        "type": "string",
        "pattern": "^upl_[A-Za-z0-9_-]{22}$"
      },
      "UploadStatus": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Pending",
          "Processing",
          "Completed",
          "PartiallyCompleted",
          "Failed",
          "Deleted"
        ],
        "enum": [
          "pending",
          "processing",
          "completed",
          "partiallyCompleted",
          "failed",
          "deleted"
        ]
      },
      "CustomCostUploadError": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "rowNumber",
          "field",
          "message"
        ],
        "properties": {
          "rowNumber": {
            "type": "integer",
            "format": "int32"
          },
          "field": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "UploadCustomCostsRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "file": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "contentMediaType": "application/octet-stream"
            }
          }
        }
      },
      "PaginatedResponseOfCustomCostUploadResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomCostUploadResponse"
            }
          }
        }
      },
      "ListCustomCostUploadsRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "CustomCostUploadRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "SubmitCostsResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "batchId",
          "totalRows",
          "acceptedRows",
          "rejectedRows"
        ],
        "properties": {
          "batchId": {
            "$ref": "#/components/schemas/CustomCostBatchPublicId"
          },
          "totalRows": {
            "type": "integer",
            "format": "int32"
          },
          "acceptedRows": {
            "type": "integer",
            "format": "int32"
          },
          "rejectedRows": {
            "type": "integer",
            "format": "int32"
          },
          "errors": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/CostValidationError"
            }
          }
        }
      },
      "CustomCostBatchPublicId": {
        "type": "string",
        "pattern": "^cbt_[A-Za-z0-9_-]{22}$"
      },
      "CostValidationError": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "rowIndex",
          "field",
          "message"
        ],
        "properties": {
          "rowIndex": {
            "type": "integer",
            "format": "int32"
          },
          "field": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "SubmitCostsRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "costs"
        ],
        "properties": {
          "costs": {
            "type": "array",
            "minLength": 1,
            "nullable": false,
            "items": {
              "$ref": "#/components/schemas/CostEntry"
            }
          }
        }
      },
      "CostEntry": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "chargePeriodStart",
          "chargeCategory",
          "serviceName",
          "billedCost"
        ],
        "properties": {
          "chargePeriodStart": {
            "type": "string",
            "format": "date"
          },
          "chargeCategory": {
            "type": "string"
          },
          "serviceName": {
            "type": "string"
          },
          "billedCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "lineItemId": {
            "type": [
              "string",
              "null"
            ]
          },
          "chargePeriodEnd": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "billingCurrency": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{3}$"
          },
          "serviceCategory": {
            "type": [
              "string",
              "null"
            ]
          },
          "resourceId": {
            "type": [
              "string",
              "null"
            ]
          },
          "resourceType": {
            "type": [
              "string",
              "null"
            ]
          },
          "regionId": {
            "type": [
              "string",
              "null"
            ]
          },
          "consumedQuantity": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "consumedUnit": {
            "type": [
              "string",
              "null"
            ]
          },
          "tags": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          },
          "subAccountId": {
            "type": [
              "string",
              "null"
            ]
          },
          "subAccountName": {
            "type": [
              "string",
              "null"
            ]
          },
          "skuId": {
            "type": [
              "string",
              "null"
            ]
          },
          "effectiveCost": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "chargeDescription": {
            "type": [
              "string",
              "null"
            ]
          },
          "commitmentDiscountId": {
            "type": [
              "string",
              "null"
            ]
          },
          "commitmentDiscountType": {
            "type": [
              "string",
              "null"
            ]
          },
          "resourceName": {
            "type": [
              "string",
              "null"
            ]
          },
          "regionName": {
            "type": [
              "string",
              "null"
            ]
          },
          "serviceSubcategory": {
            "type": [
              "string",
              "null"
            ]
          },
          "billingAccountId": {
            "type": [
              "string",
              "null"
            ]
          },
          "listCost": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          }
        }
      },
      "ActivateCostReportSubscriptionRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "CostReportSubscriptionPublicId": {
        "type": "string",
        "pattern": "^crs_[A-Za-z0-9_-]{22}$"
      },
      "CostReportSubscriptionCreatedResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/CostReportSubscriptionPublicId"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "CreateCostReportSubscriptionRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId",
          "costReportId",
          "name",
          "scheduleType",
          "appIds"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__213"
          },
          "costReportId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/CostReportPublicId",
            "__uniqueRefKey": "#/components/schemas/CostReportPublicId__214"
          },
          "name": {
            "type": "string",
            "maxLength": 200,
            "minLength": 0,
            "nullable": false
          },
          "scheduleType": {
            "$ref": "#/components/schemas/ScheduleType"
          },
          "deliveryHour": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "maximum": 23,
            "minimum": 0
          },
          "timeZone": {
            "type": [
              "string",
              "null"
            ]
          },
          "appIds": {
            "type": "array",
            "minLength": 1,
            "nullable": false,
            "items": {
              "$ref": "#/components/schemas/AppPublicId"
            }
          }
        }
      },
      "CostReportPublicId": {
        "type": "string",
        "pattern": "^crp_[A-Za-z0-9_-]{22}$"
      },
      "ScheduleType": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Daily",
          "Weekly",
          "Monthly"
        ],
        "enum": [
          "daily",
          "weekly",
          "monthly"
        ]
      },
      "AppPublicId": {
        "type": "string",
        "pattern": "^app_[A-Za-z0-9_-]{22}$"
      },
      "DeactivateCostReportSubscriptionRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "DeleteCostReportSubscriptionRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "CostReportSubscriptionResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "costReportId",
          "name",
          "scheduleType",
          "deliveryHour",
          "timeZone",
          "appIds"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/CostReportSubscriptionPublicId"
          },
          "costReportId": {
            "$ref": "#/components/schemas/CostReportPublicId"
          },
          "name": {
            "type": "string"
          },
          "scheduleType": {
            "$ref": "#/components/schemas/ScheduleType"
          },
          "deliveryHour": {
            "type": "integer",
            "format": "int32"
          },
          "timeZone": {
            "type": "string"
          },
          "appIds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AppPublicId"
            }
          },
          "isActive": {
            "type": "boolean"
          },
          "lastSentAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "nextScheduledAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "GetCostReportSubscriptionRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfCostReportSubscriptionResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CostReportSubscriptionResponse"
            }
          }
        }
      },
      "ListCostReportSubscriptionsRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "UpdateCostReportSubscriptionRouteRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__215"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 200,
            "minLength": 0
          },
          "scheduleType": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ScheduleType"
              }
            ]
          },
          "deliveryHour": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "maximum": 23,
            "minimum": 0
          },
          "timeZone": {
            "type": [
              "string",
              "null"
            ]
          },
          "appIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/AppPublicId"
            }
          }
        }
      },
      "CostReportCreatedResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "title"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/CostReportPublicId"
          },
          "title": {
            "type": "string"
          }
        }
      },
      "CreateCostReportRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId",
          "title"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__216"
          },
          "title": {
            "type": "string",
            "maxLength": 200,
            "minLength": 0,
            "nullable": false
          },
          "folderId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/FolderPublicId"
              }
            ]
          },
          "filter": {
            "type": [
              "string",
              "null"
            ]
          },
          "groupBy": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/ReportGroupingRequest"
            }
          },
          "dateInterval": {
            "$ref": "#/components/schemas/DateInterval"
          },
          "startDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "endDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "chartType": {
            "$ref": "#/components/schemas/ChartType"
          },
          "dateBin": {
            "$ref": "#/components/schemas/DateBin"
          },
          "settings": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/CostReportSettingsRequest"
              }
            ]
          }
        }
      },
      "ReportGroupingRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "dimension"
        ],
        "properties": {
          "dimension": {
            "$ref": "#/components/schemas/CostGroupDimension"
          },
          "key": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "CostGroupDimension": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Provider",
          "ProviderName",
          "SubAccount",
          "ServiceName",
          "Region",
          "ResourceName",
          "ChargeCategory",
          "Tag",
          "VirtualTag",
          "Segment",
          "Cluster",
          "Namespace",
          "BillingAccount",
          "ServiceCategory",
          "ServiceSubcategory",
          "UsageUnit",
          "ChargeClass",
          "Tagged",
          "ResourceId"
        ],
        "enum": [
          "provider",
          "providerName",
          "subAccount",
          "serviceName",
          "region",
          "resourceName",
          "chargeCategory",
          "tag",
          "virtualTag",
          "segment",
          "cluster",
          "namespace",
          "billingAccount",
          "serviceCategory",
          "serviceSubcategory",
          "usageUnit",
          "chargeClass",
          "tagged",
          "resourceId"
        ]
      },
      "ChartType": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Line",
          "Bar",
          "StackedBar",
          "Area",
          "Pie",
          "Table"
        ],
        "enum": [
          "line",
          "bar",
          "stackedBar",
          "area",
          "pie",
          "table"
        ]
      },
      "CostReportSettingsRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "includeCredits": {
            "type": "boolean"
          },
          "includeRefunds": {
            "type": "boolean"
          },
          "includeTax": {
            "type": "boolean"
          },
          "amortize": {
            "type": "boolean"
          },
          "showForecast": {
            "type": "boolean"
          },
          "compareToLastPeriod": {
            "type": "boolean"
          }
        }
      },
      "DeleteCostReportRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "CostReportDataResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "summary",
          "series",
          "breakdown"
        ],
        "properties": {
          "summary": {
            "$ref": "#/components/schemas/ReportSummaryResponse"
          },
          "series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReportTimeSeriesResponse"
            }
          },
          "breakdown": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReportBreakdownResponse"
            }
          },
          "startDate": {
            "type": "string",
            "format": "date"
          },
          "endDate": {
            "type": "string",
            "format": "date"
          },
          "historyFloor": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          }
        }
      },
      "ReportSummaryResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "totalCost": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "previousPeriodCost": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "changePercent": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{3}$"
          },
          "presentation": {
            "$ref": "#/components/schemas/CurrencyPresentation"
          }
        }
      },
      "CurrencyPresentation": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "conversions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CurrencyConversion"
            }
          },
          "unconverted": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CurrencyAmount"
            }
          },
          "totalsByCurrency": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CurrencyAmount"
            }
          }
        }
      },
      "CurrencyConversion": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "sourceCurrency",
          "source",
          "description"
        ],
        "properties": {
          "sourceCurrency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "sourceAmount": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "convertedAmount": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "method": {
            "$ref": "#/components/schemas/FxMethod"
          },
          "source": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        }
      },
      "CurrencyAmount": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "currency"
        ],
        "properties": {
          "currency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "amount": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          }
        }
      },
      "ReportTimeSeriesResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "groups"
        ],
        "properties": {
          "date": {
            "type": "string",
            "format": "date"
          },
          "groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReportGroupResponse"
            }
          }
        }
      },
      "ReportGroupResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "keys"
        ],
        "properties": {
          "keys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{3}$"
          },
          "isOther": {
            "type": "boolean"
          },
          "cost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          }
        }
      },
      "ReportBreakdownResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "keys"
        ],
        "properties": {
          "keys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{3}$"
          },
          "isOther": {
            "type": "boolean"
          },
          "cost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "percent": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "GetCostReportDataRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "CostReportResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "title",
          "groupBy",
          "dateInterval",
          "chartType",
          "dateBin",
          "settings"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/CostReportPublicId"
          },
          "title": {
            "type": "string"
          },
          "folderId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/FolderPublicId"
              }
            ]
          },
          "filter": {
            "type": [
              "string",
              "null"
            ]
          },
          "groupBy": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReportGroupingResponse"
            }
          },
          "dateInterval": {
            "type": "string"
          },
          "startDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "endDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "chartType": {
            "type": "string"
          },
          "dateBin": {
            "type": "string"
          },
          "settings": {
            "$ref": "#/components/schemas/CostReportSettingsResponse"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "ReportGroupingResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "dimension"
        ],
        "properties": {
          "dimension": {
            "type": "string"
          },
          "key": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "CostReportSettingsResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "includeCredits": {
            "type": "boolean"
          },
          "includeRefunds": {
            "type": "boolean"
          },
          "includeTax": {
            "type": "boolean"
          },
          "amortize": {
            "type": "boolean"
          },
          "showForecast": {
            "type": "boolean"
          },
          "compareToLastPeriod": {
            "type": "boolean"
          }
        }
      },
      "GetCostReportRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfCostReportResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CostReportResponse"
            }
          }
        }
      },
      "ListCostReportsRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "UpdateCostReportRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "folderId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/FolderPublicId"
              }
            ]
          },
          "filter": {
            "type": [
              "string",
              "null"
            ]
          },
          "clearFilter": {
            "type": "boolean"
          },
          "groupBy": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/ReportGroupingRequest"
            }
          },
          "dateInterval": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/DateInterval"
              }
            ]
          },
          "startDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "endDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "chartType": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ChartType"
              }
            ]
          },
          "dateBin": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/DateBin"
              }
            ]
          },
          "settings": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/CostReportSettingsRequest"
              }
            ]
          }
        }
      },
      "CostFilterTranslationResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "filter": {
            "type": [
              "string",
              "null"
            ]
          },
          "query": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "TranslateCostFilterRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "CostDataResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data",
          "meta"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CostDataPoint"
            }
          },
          "meta": {
            "$ref": "#/components/schemas/CostDataMeta"
          }
        }
      },
      "CostDataPoint": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "date": {
            "type": "string",
            "format": "date"
          },
          "cost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "listCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "amortizedCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "currency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "dimensions": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "CostDataMeta": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "startDate": {
            "type": "string",
            "format": "date"
          },
          "endDate": {
            "type": "string",
            "format": "date"
          },
          "granularity": {
            "type": "string"
          },
          "totalRecords": {
            "type": "integer",
            "format": "int32"
          },
          "totalCost": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{3}$"
          },
          "presentation": {
            "$ref": "#/components/schemas/CurrencyPresentation"
          },
          "historyFloor": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          }
        }
      },
      "GetCostDataRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "CostForecastResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "currentMonthActual": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "isAvailable": {
            "type": "boolean"
          },
          "currentMonthForecast": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "method": {
            "type": [
              "string",
              "null"
            ]
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{3}$"
          },
          "confidencePercent": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "generatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "forecast": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ForecastMonthResponse"
            }
          }
        }
      },
      "ForecastMonthResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "month": {
            "type": "string",
            "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])$"
          },
          "amount": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "lowerBound": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "upperBound": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          }
        }
      },
      "GetCostForecastRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "CostSummaryResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "totalCost": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "totalListCost": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "totalAmortizedCost": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "currency": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{3}$"
          },
          "costChange": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "costChangePercent": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "presentation": {
            "$ref": "#/components/schemas/CurrencyPresentation"
          },
          "topServices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ServiceCostBreakdown"
            }
          },
          "byProvider": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProviderCostBreakdown"
            }
          },
          "historyFloor": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          }
        }
      },
      "ServiceCostBreakdown": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "serviceName": {
            "type": "string"
          },
          "cost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "percentage": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "ProviderCostBreakdown": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "providerId",
          "providerKey"
        ],
        "properties": {
          "providerId": {
            "$ref": "#/components/schemas/ProviderPublicId"
          },
          "providerName": {
            "type": "string"
          },
          "providerKey": {
            "$ref": "#/components/schemas/ProviderKey"
          },
          "cost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          }
        }
      },
      "GetCostSummaryRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "CostAlertCreatedResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/CostAlertPublicId"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "CostAlertPublicId": {
        "type": "string",
        "pattern": "^alrt_[A-Za-z0-9_-]{22}$"
      },
      "CreateCostAlertRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId",
          "name",
          "thresholdType",
          "thresholdValue"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__217"
          },
          "name": {
            "type": "string",
            "maxLength": 255,
            "minLength": 0,
            "nullable": false
          },
          "thresholdType": {
            "$ref": "#/components/schemas/AlertThresholdType"
          },
          "thresholdValue": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$",
            "exclusiveMinimum": 0
          },
          "comparisonPeriod": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ComparisonPeriod"
              }
            ]
          },
          "providerIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          },
          "filter": {
            "type": [
              "string",
              "null"
            ]
          },
          "appIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/AppPublicId"
            }
          },
          "evaluationFrequencyMinutes": {
            "type": "integer",
            "format": "int32",
            "maximum": 1440,
            "minimum": 15
          }
        }
      },
      "AlertThresholdType": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Absolute",
          "PercentageIncrease",
          "BudgetPercentage",
          "TagCoverageBelow"
        ],
        "enum": [
          "absolute",
          "percentageIncrease",
          "budgetPercentage",
          "tagCoverageBelow"
        ]
      },
      "ComparisonPeriod": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "PreviousDay",
          "PreviousWeek",
          "PreviousMonth",
          "SameDayLastMonth"
        ],
        "enum": [
          "previousDay",
          "previousWeek",
          "previousMonth",
          "sameDayLastMonth"
        ]
      },
      "DeleteCostAlertRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "CostAlertResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "thresholdType",
          "appIds",
          "status"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/CostAlertPublicId"
          },
          "name": {
            "type": "string"
          },
          "providerIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          },
          "filter": {
            "type": [
              "string",
              "null"
            ]
          },
          "thresholdType": {
            "$ref": "#/components/schemas/AlertThresholdType"
          },
          "thresholdValue": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "comparisonPeriod": {
            "type": [
              "string",
              "null"
            ]
          },
          "appIds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AppPublicId"
            }
          },
          "evaluationFrequencyMinutes": {
            "type": "integer",
            "format": "int32"
          },
          "lastEvaluatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "status": {
            "$ref": "#/components/schemas/AlertStatus"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "AlertStatus": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Active",
          "Paused",
          "Triggered"
        ],
        "enum": [
          "active",
          "paused",
          "triggered"
        ]
      },
      "GetCostAlertRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfCostAlertEventResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CostAlertEventResponse"
            }
          }
        }
      },
      "CostAlertEventResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "status"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/CostAlertEventPublicId"
          },
          "triggeredAt": {
            "type": "string",
            "format": "date-time"
          },
          "thresholdValue": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "actualValue": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "comparisonValue": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "affectedProviderIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/ProviderPublicId"
            }
          },
          "status": {
            "$ref": "#/components/schemas/AlertEventStatus"
          },
          "acknowledgedByUserId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UserPublicId"
              }
            ]
          },
          "acknowledgedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "resolvedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "CostAlertEventPublicId": {
        "type": "string",
        "pattern": "^alrt_evt_[A-Za-z0-9_-]{22}$"
      },
      "AlertEventStatus": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Open",
          "Acknowledged",
          "Resolved"
        ],
        "enum": [
          "open",
          "acknowledged",
          "resolved"
        ]
      },
      "UserPublicId": {
        "type": "string",
        "pattern": "^usr_[A-Za-z0-9_-]{22}$"
      },
      "GetCostAlertEventsRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfCostAlertResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CostAlertResponse"
            }
          }
        }
      },
      "ListCostAlertsRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PauseCostAlertRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "ResumeCostAlertRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "UpdateCostAlertRouteRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255,
            "minLength": 0
          },
          "thresholdType": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/AlertThresholdType"
              }
            ]
          },
          "thresholdValue": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$",
            "exclusiveMinimum": 0
          },
          "comparisonPeriod": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ComparisonPeriod"
              }
            ]
          },
          "providerIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "filter": {
            "type": [
              "string",
              "null"
            ]
          },
          "appIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "evaluationFrequencyMinutes": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "maximum": 1440,
            "minimum": 15
          }
        }
      },
      "DpaStatusResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "required",
          "inForce",
          "current",
          "history",
          "collectionRefusal"
        ],
        "properties": {
          "required": {
            "type": "boolean"
          },
          "inForce": {
            "type": "boolean"
          },
          "current": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/DpaExecutionResponse"
              }
            ]
          },
          "history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DpaExecutionResponse"
            }
          },
          "collectionRefusal": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "DpaExecutionResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "token",
          "documentVersion",
          "signedAt",
          "signedByName",
          "signedByRole",
          "recordedAt",
          "isCurrent",
          "supersededAt"
        ],
        "properties": {
          "token": {
            "$ref": "#/components/schemas/DpaExecutionPublicId"
          },
          "documentVersion": {
            "type": "string"
          },
          "signedAt": {
            "type": "string",
            "format": "date"
          },
          "signedByName": {
            "type": "string"
          },
          "signedByRole": {
            "type": "string"
          },
          "recordedAt": {
            "type": "string",
            "format": "date-time"
          },
          "isCurrent": {
            "type": "boolean"
          },
          "supersededAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "DpaExecutionPublicId": {
        "type": "string",
        "pattern": "^dpa_[A-Za-z0-9_-]{22}$"
      },
      "BudgetResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "spendAvailability"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/BudgetPublicId"
          },
          "name": {
            "type": "string"
          },
          "amount": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "currency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "period": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "segmentId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/SegmentPublicId"
              }
            ]
          },
          "costReportId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/CostReportPublicId"
              }
            ]
          },
          "startDate": {
            "type": "string",
            "format": "date"
          },
          "endDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "currentSpend": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "percentUsed": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "spendAvailability": {
            "type": "string"
          },
          "alerts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BudgetAlertResponse"
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "BudgetPublicId": {
        "type": "string",
        "pattern": "^bud_[A-Za-z0-9_-]{22}$"
      },
      "SegmentPublicId": {
        "type": "string",
        "pattern": "^seg_[A-Za-z0-9_-]{22}$"
      },
      "BudgetAlertResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "thresholdPercent": {
            "type": "integer",
            "format": "int32"
          },
          "appIds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AppPublicId"
            }
          },
          "isTriggered": {
            "type": "boolean"
          },
          "triggeredAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "CreateBudgetRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId",
          "name",
          "currency"
        ],
        "properties": {
          "workspaceId": {
            "minLength": 1,
            "nullable": false,
            "$ref": "#/components/schemas/WorkspacePublicId",
            "__uniqueRefKey": "#/components/schemas/WorkspacePublicId__218"
          },
          "name": {
            "type": "string",
            "maxLength": 200,
            "minLength": 0,
            "nullable": false
          },
          "amount": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$",
            "exclusiveMinimum": 0
          },
          "currency": {
            "type": "string",
            "maxLength": 3,
            "minLength": 3,
            "pattern": "^[A-Z]{3}$",
            "nullable": false
          },
          "period": {
            "$ref": "#/components/schemas/BudgetPeriodValue"
          },
          "alerts": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/BudgetAlertRequest"
            }
          },
          "segmentId": {
            "type": [
              "string",
              "null"
            ]
          },
          "costReportId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/CostReportPublicId"
              }
            ]
          },
          "startDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "endDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "appIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/AppPublicId"
            }
          }
        }
      },
      "BudgetPeriodValue": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Monthly",
          "Quarterly",
          "Yearly"
        ],
        "enum": [
          "Monthly",
          "Quarterly",
          "Yearly"
        ]
      },
      "BudgetAlertRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "thresholdPercent": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "DeleteBudgetRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "GetBudgetRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfBudgetResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BudgetResponse"
            }
          }
        }
      },
      "ListBudgetsRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "UpdateBudgetRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "ifMatch": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "amount": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$",
            "exclusiveMinimum": 0
          },
          "segmentId": {
            "type": [
              "string",
              "null"
            ]
          },
          "appIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/AppPublicId"
            }
          }
        }
      },
      "EntitlementResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "planCode": {
            "type": "string"
          },
          "planName": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "currency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "spendCeiling": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "historyDays": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "maxConnections": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "maxAllocationRules": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "maxBackfillMonths": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "maxRowsPerMonth": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "maxBytesStored": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "features": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "overriddenLimits": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ingestionHalted": {
            "type": "boolean"
          },
          "ingestionHaltedReason": {
            "type": "string"
          },
          "bandPlanCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "currentPeriodStart": {
            "type": "string",
            "format": "date"
          },
          "currentPeriodEnd": {
            "type": "string",
            "format": "date"
          },
          "ladder": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlanLadderEntryResponse"
            }
          }
        }
      },
      "PlanLadderEntryResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "code": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "priceAmount": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "currency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "spendCeiling": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "historyDays": {
            "type": "integer",
            "format": "int32"
          },
          "maxConnections": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "maxAllocationRules": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "features": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "selfServeAvailable": {
            "type": "boolean"
          }
        }
      },
      "UsageResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "periodStart": {
            "type": "string",
            "format": "date"
          },
          "currency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "trackedSpend": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "isSpendComplete": {
            "type": "boolean"
          },
          "unconvertedCurrencies": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rowsIngested": {
            "type": "integer",
            "format": "int64"
          },
          "bytesStored": {
            "type": "integer",
            "format": "int64"
          },
          "connectionCount": {
            "type": "integer",
            "format": "int32"
          },
          "activeUserCount": {
            "type": "integer",
            "format": "int32"
          },
          "computedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "averageTrackedSpend": {
            "type": [
              "string",
              "null"
            ],
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "bandPlanCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UsageHistoryEntryResponse"
            }
          }
        }
      },
      "UsageHistoryEntryResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "periodStart": {
            "type": "string",
            "format": "date"
          },
          "trackedSpend": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "rowsIngested": {
            "type": "integer",
            "format": "int64"
          },
          "bytesStored": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "AcknowledgeAnomalyRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "AnomalyPublicId": {
        "type": "string",
        "pattern": "^ano_[A-Za-z0-9_-]{22}$"
      },
      "PaginatedResponseOfAnomalyResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AnomalyResponse"
            }
          }
        }
      },
      "AnomalyResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "workspaceId",
          "providerId"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/AnomalyPublicId"
          },
          "workspaceId": {
            "$ref": "#/components/schemas/WorkspacePublicId"
          },
          "providerId": {
            "$ref": "#/components/schemas/ProviderPublicId"
          },
          "anomalyDate": {
            "type": "string",
            "format": "date"
          },
          "serviceName": {
            "type": "string"
          },
          "region": {
            "type": [
              "string",
              "null"
            ]
          },
          "anomalyType": {
            "type": "string"
          },
          "severity": {
            "type": "string"
          },
          "expectedCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "actualCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "deviationPercent": {
            "type": "number",
            "format": "double"
          },
          "description": {
            "type": "string"
          },
          "currency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "status": {
            "$ref": "#/components/schemas/AnomalyStatus"
          },
          "statusReason": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/AnomalyStatusReason"
              }
            ]
          },
          "ignoreReason": {
            "type": [
              "string",
              "null"
            ]
          },
          "isAcknowledged": {
            "type": "boolean"
          },
          "acknowledgedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "detectedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "AnomalyStatus": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Open",
          "Acknowledged",
          "Archived",
          "Ignored"
        ],
        "enum": [
          "open",
          "acknowledged",
          "archived",
          "ignored"
        ]
      },
      "AnomalyStatusReason": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Expired",
          "Restated"
        ],
        "enum": [
          "expired",
          "restated"
        ]
      },
      "ListAnomaliesRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfAllocationRuleResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AllocationRuleResponse"
            }
          }
        }
      },
      "AllocationRuleResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "priority",
          "filter",
          "costKind",
          "segmentId",
          "isEnabled",
          "createdAt"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/AllocationRulePublicId"
          },
          "name": {
            "type": "string"
          },
          "priority": {
            "type": "integer",
            "format": "int32"
          },
          "filter": {
            "type": "string"
          },
          "costKind": {
            "type": "string"
          },
          "segmentId": {
            "$ref": "#/components/schemas/SegmentPublicId"
          },
          "segmentName": {
            "type": [
              "string",
              "null"
            ]
          },
          "costCentre": {
            "type": [
              "string",
              "null"
            ]
          },
          "isEnabled": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "AllocationRulePublicId": {
        "type": "string",
        "pattern": "^alr_[A-Za-z0-9_-]{22}$"
      },
      "ListAllocationRulesRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "CreateAllocationRuleRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId",
          "name",
          "filter",
          "segmentId"
        ],
        "properties": {
          "workspaceId": {
            "$ref": "#/components/schemas/WorkspacePublicId"
          },
          "name": {
            "type": "string"
          },
          "priority": {
            "type": "integer",
            "format": "int32"
          },
          "filter": {
            "type": "string"
          },
          "segmentId": {
            "$ref": "#/components/schemas/SegmentPublicId"
          },
          "isEnabled": {
            "type": "boolean"
          }
        }
      },
      "UpdateAllocationRuleRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string"
          },
          "priority": {
            "type": "integer",
            "format": "int32"
          },
          "filter": {
            "type": "string"
          },
          "segmentId": {
            "$ref": "#/components/schemas/SegmentPublicId"
          },
          "isEnabled": {
            "type": "boolean"
          }
        }
      },
      "ReorderAllocationRulesRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "workspaceId": {
            "$ref": "#/components/schemas/WorkspacePublicId"
          },
          "ruleIds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AllocationRulePublicId"
            }
          }
        }
      },
      "DeleteAllocationRuleRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "AllocationCoverageResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "windowStart": {
            "type": "string",
            "format": "date"
          },
          "windowEndExclusive": {
            "type": "string",
            "format": "date"
          },
          "costBasis": {
            "type": "string"
          },
          "currencies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AllocationCoverageCurrency"
            }
          }
        }
      },
      "AllocationCoverageCurrency": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "billingCurrency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "totalCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "directCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "sharedCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "undistributedSharedCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "unallocatedCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "unallocatedRecordCount": {
            "type": "integer",
            "format": "int64"
          },
          "recordCount": {
            "type": "integer",
            "format": "int64"
          },
          "coverage": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "segments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AllocationCoverageSegment"
            }
          }
        }
      },
      "AllocationCoverageSegment": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "segmentId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "costCentre": {
            "type": "string"
          },
          "directCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "sharedCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "allocatedCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "recordCount": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "GetAllocationCoverageRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponseOfSegmentResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "links",
          "data"
        ],
        "properties": {
          "links": {
            "$ref": "#/components/schemas/PaginationLinks"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SegmentResponse"
            }
          }
        }
      },
      "SegmentResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "teamLabel",
          "product",
          "costCentre",
          "isShared",
          "createdAt"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/SegmentPublicId"
          },
          "teamId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TeamPublicId"
              }
            ]
          },
          "teamLabel": {
            "type": "string"
          },
          "teamName": {
            "type": [
              "string",
              "null"
            ]
          },
          "product": {
            "type": "string"
          },
          "costCentre": {
            "type": "string"
          },
          "isShared": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "TeamPublicId": {
        "type": "string",
        "pattern": "^team_[A-Za-z0-9_-]{22}$"
      },
      "ListSegmentsRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "CreateSegmentRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId"
        ],
        "properties": {
          "workspaceId": {
            "$ref": "#/components/schemas/WorkspacePublicId"
          },
          "teamId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TeamPublicId"
              }
            ]
          },
          "teamLabel": {
            "type": [
              "string",
              "null"
            ]
          },
          "product": {
            "type": "string"
          },
          "costCentre": {
            "type": "string"
          },
          "isShared": {
            "type": "boolean"
          }
        }
      },
      "UpdateSegmentRequest": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "teamId": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TeamPublicId"
              }
            ]
          },
          "teamLabel": {
            "type": [
              "string",
              "null"
            ]
          },
          "product": {
            "type": "string"
          },
          "costCentre": {
            "type": "string"
          }
        }
      },
      "DeleteSegmentRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "AllocationDryRunResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "billingCurrency",
          "movedCost",
          "movedRecordCount",
          "coverageBefore",
          "coverageAfter",
          "segmentChanges"
        ],
        "properties": {
          "billingCurrency": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "movedCost": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "movedRecordCount": {
            "type": "integer",
            "format": "int64"
          },
          "coverageBefore": {
            "type": "number",
            "format": "double"
          },
          "coverageAfter": {
            "type": "number",
            "format": "double"
          },
          "segmentChanges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AllocationDryRunSegmentChangeResponse"
            }
          }
        }
      },
      "AllocationDryRunSegmentChangeResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "costCentre",
          "allocatedBefore",
          "allocatedAfter",
          "delta"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "costCentre": {
            "type": "string"
          },
          "allocatedBefore": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "allocatedAfter": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          },
          "delta": {
            "type": "string",
            "format": "decimal",
            "pattern": "^-?[0-9]+(\\.[0-9]{1,8})?$"
          }
        }
      },
      "PreviewAllocationRuleRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "workspaceId",
          "windowStart",
          "windowEndExclusive",
          "filter",
          "segmentId"
        ],
        "properties": {
          "workspaceId": {
            "$ref": "#/components/schemas/WorkspacePublicId"
          },
          "windowStart": {
            "type": "string",
            "format": "date"
          },
          "windowEndExclusive": {
            "type": "string",
            "format": "date"
          },
          "filter": {
            "type": "string"
          },
          "segmentId": {
            "$ref": "#/components/schemas/SegmentPublicId"
          },
          "priority": {
            "type": "integer",
            "format": "int32"
          }
        }
      }
    },
    "responses": {
      "InternalServerError": {
        "description": "An unexpected error; quote the traceId when reporting it",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "ServiceUnavailable": {
        "description": "A dependency is briefly unavailable; retry after the Retry-After header",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      }
    },
    "securitySchemes": {
      "ApiTokenAuth": {
        "type": "http",
        "description": "Costfluent API token beginning with cf_org_ or cf_ws_. A cf_ws_ workspace token acts in its own workspace only: lists and cost totals cover that workspace, naming another workspace answers 403, and organization-level operations need a cf_org_ organization token.",
        "scheme": "bearer",
        "bearerFormat": "API token"
      }
    }
  },
  "security": [
    {
      "ApiTokenAuth": []
    }
  ]
}
