Webscale APIs

The Webscale v2 control-plane REST API. 151 operations across 25 resource collections — applications and web controls, address sets, URL maps, clusters, environments and stacks, servers, builders, monitors, metric prototypes, application and SSH logs, archived logs, files and file versions, secrets, tasks, templates, accounts, groups, roles, invitations, users, service users, SSH hosts and access keys. JSON over HTTPS with GET/POST/PATCH/DELETE semantics, href-addressable resources, an EBNF filter expression language, and offset pagination.

Operations 151

GET /accounts Read account collection
POST /accounts Create an account
GET /accounts/{id} Read an account
PATCH /accounts/{id} Update an account
DELETE /accounts/{id} Delete an account
GET /accounts/{id}/group-invitations Read group invitation collection
POST /accounts/{id}/group-invitations Create a group invitation
GET /accounts/{id}/group-invitations/{invitation_id} Read a group invitation
PATCH /accounts/{id}/group-invitations/{invitation_id} Update a group invitation
DELETE /accounts/{id}/group-invitations/{invitation_id} Delete a group invitation
GET /accounts/{id}/groups Read groups collection
POST /accounts/{id}/groups Create a group
GET /accounts/{id}/groups/{group_id} Read a group
PATCH /accounts/{id}/groups/{group_id} Update a group
DELETE /accounts/{id}/groups/{group_id} Delete a group
GET /accounts/{id}/roles Read role collection
POST /accounts/{id}/roles Create a role
GET /accounts/{id}/roles/{role_id} Read a role
PATCH /accounts/{id}/roles/{role_id} Update a role
DELETE /accounts/{id}/roles/{role_id} Delete a role
GET /accounts/{id}/invitations Read invitation collection
POST /accounts/{id}/invitations Create an invitation
GET /accounts/{id}/invitations/{invitation_id} Read an invitation
PATCH /accounts/{id}/invitations/{invitation_id} Update an invitation
DELETE /accounts/{id}/invitations/{invitation_id} Delete an invitation
GET /accounts/{id}/service-users Read service user collection
POST /accounts/{id}/service-users Create a service user
GET /accounts/{account_id}/service-users/{id} Read a service user
PATCH /accounts/{account_id}/service-users/{id} Update a service user
DELETE /accounts/{account_id}/service-users/{id} Delete a service user
GET /address-sets Read address set collection
POST /address-sets Create an address set
GET /address-sets/{id} Read an address set
PATCH /address-sets/{id} Update an address set
DELETE /address-sets/{id} Delete an address set
GET /address-sets/{id}/addresses Read addresses for an address set
GET /address-sets/metrics Read address set collection metrics
GET /address-sets/{id}/metrics Read address set metrics
DELETE /tests/{id} Delete a test configuration
GET /applications Read application collection
POST /applications Create an application
GET /applications/{id} Read an application
PATCH /applications/{id} Update an application
DELETE /applications/{id} Delete an application
GET /applications/{id}/logs Read application logs
POST /applications/{id}/logs Create application logs
GET /applications/metrics Read application collection metrics
GET /applications/{id}/metrics Read application metrics
GET /applications/{app_id}/webcontrols Read web controls
GET /applications/{app_id}/webcontrols/{id} Read a web control
GET /archived-logs List log status
GET /archived-logs/{ref} Download archived logs
DELETE /archived-logs/{ref} Delete archived logs
GET /builders Read builder collection
POST /builders Create a builder
GET /builders/{id} Read a builder
PATCH /builders/{id} Update a builder
DELETE /builders/{id} Delete a builder
GET /clusters Read cluster collection
POST /clusters Create a cluster
GET /clusters/{id} Read a cluster
PATCH /clusters/{id} Update a cluster
DELETE /clusters/{id} Delete a cluster
GET /clusters/{id}/metrics Read cluster metrics
GET /clusters/metrics Read cluster collection metrics
GET /environments Read environments collection
POST /environments Create an environment
GET /environments/{id} Read an environment
PATCH /environments/{id} Update an environment
DELETE /environments/{id} Delete an environment
GET /files Get all files
POST /files Create a file.
GET /files/{id} Get a file
PATCH /files/{id} Update a file
DELETE /files/{id} Delete a file
GET /files/{id}/contents Get a file contents
GET /files/{id}/contents/{path} Get contents of a file within a package
GET /files/{id}/details Gets all details.
GET /files/{id}/versions/{version_id} Gets properties of a particular version of a file.
GET /files/{id}/versions/{version_id}/contents Get contents of a file version
GET /files/{id}/versions/{version_id}/contents/{path} Get contents of a file version within a package.
DELETE /labelers/{id} Delete a labeler
GET /log-schemas Read log schemas
GET /metric-prototypes Read metric prototypes
POST /metric-prototypes Create a metric prototype
GET /metric-prototypes/{id} Read a metric prototype
DELETE /metric-prototypes/{id} Delete a metric prototype
GET /monitors Read monitors collection
POST /monitors Create a monitor
GET /monitors/{id} Read a monitor
PATCH /monitors/{id} Update a monitor
DELETE /monitors/{id} Delete a monitor
GET /reports/{report_id}/sections/{section_id} Read a test report section
DELETE /resources/{id} Delete a resource
GET /secrets Read secret collection
POST /secrets Create a secret
GET /secrets/{id} Read a secret
DELETE /secrets/{id} Delete a secret
GET /servers Read server collection
DELETE /servers/{id} Delete a server
POST /servers/{id}/metrics Create server metrics
GET /ssh-hosts Read SSH host collection
POST /ssh-hosts Create SSH host
GET /ssh-hosts/{id} Read SSH host
PATCH /ssh-hosts/{id} Update SSH Host
DELETE /ssh-hosts/{id} Delete SSH host
GET /ssh-hosts/{id}/logs Read SSH logs
GET /stacks Read stack collection
POST /stacks Create a stack
GET /stacks/{id} Read a stack
PATCH /stacks/{id} Update a stack
DELETE /stacks/{id} Delete a stack
GET /tasks Read task collection
POST /tasks Create a task
GET /tasks/{id} Read a task
GET /tasks/{id}/logs Read task logs
GET /templates Read template collection
POST /templates Create a template
GET /templates/{id} Read a template
PATCH /templates/{id} Update a template
DELETE /templates/{id} Delete a template
GET /url-maps Read URL map collection
POST /url-maps Create a URL map
GET /url-maps/{id} Read a URL map
PATCH /url-maps/{id} Update a URL map
DELETE /url-maps/{id} Delete a URL map
GET /users Read user collection
GET /users/{id} Read a user
PATCH /users/{id} Update a user
GET /users/{id}/access-keys Read access keys collection
POST /users/{id}/access-keys Create an access key
DELETE /users/{user_id}/access-keys/{id} Delete an access key
GET /users/{id}/authorization Read authorization
POST /users/{id}/authorization Create authorization
GET /users/{id}/group-invitations Read group invitations
GET /users/{id}/group-invitations/{group-invitation-id} Read a group invitation
PATCH /users/{id}/group-invitations/{group-invitation-id} Update a group invitation
GET /users/{id}/groups Read user group collection
GET /users/{id}/groups/{group_id} Read group membership
DELETE /users/{id}/groups/{group_id} Delete group membership
GET /users/{id}/invitations Read role invitations
GET /users/{id}/invitations/{invitation_id} Read a role invitation
PATCH /users/{id}/invitations/{invitation_id} Update a role invitation
GET /users/{id}/roles Read role membership collection
GET /users/{id}/roles/{role_id} Read role membership
DELETE /users/{id}/roles/{role_id} Delete role membership
GET /users/{id}/ssh-public-keys Read SSH public key collection
POST /users/{id}/ssh-public-keys Create an SSH public key
GET /users/{id}/ssh-public-keys/{key_id} Read an SSH public key
PATCH /users/{id}/ssh-public-keys/{key_id} Update an SSH public key
DELETE /users/{id}/ssh-public-keys/{key_id} Delete an SSH public key

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/webscale-apis"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

webscale-networks-webscale-apis-openapi.json Raw ↑
{
  "openapi": "3.0.3",
  "servers": [
    {
      "url": "https://api.webscale.com/v2"
    }
  ],
  "tags": [
    {
      "name": "Accounts",
      "x-tag-expanded": false
    },
    {
      "name": "Actions",
      "x-tag-expanded": false
    },
    {
      "name": "Address sets",
      "x-tag-expanded": false
    },
    {
      "name": "Applications",
      "x-tag-expanded": false,
      "description": "An application configures the Webscale service for a group of related\nwebsites.\n"
    },
    {
      "name": "Application test",
      "x-tag-expanded": false
    },
    {
      "name": "Archived Logs",
      "x-tag-expanded": false
    },
    {
      "name": "Builders",
      "x-tag-expanded": false
    },
    {
      "name": "Clusters",
      "x-tag-expanded": false
    },
    {
      "name": "Data planes",
      "x-tag-expanded": false
    },
    {
      "name": "Entitlements",
      "x-tag-expanded": false
    },
    {
      "name": "Environments",
      "x-tag-expanded": false
    },
    {
      "name": "Events",
      "x-tag-expanded": false
    },
    {
      "name": "Files",
      "x-tag-expanded": false
    },
    {
      "name": "Filters",
      "x-tag-expanded": false
    },
    {
      "name": "Groups",
      "x-tag-expanded": false
    },
    {
      "name": "Handlers",
      "x-tag-expanded": false
    },
    {
      "name": "Labelers",
      "x-tag-expanded": false
    },
    {
      "name": "Logs",
      "x-tag-expanded": false
    },
    {
      "name": "Log schemas",
      "x-tag-expanded": false
    },
    {
      "name": "Metrics",
      "x-tag-expanded": false
    },
    {
      "name": "Monitors",
      "x-tag-expanded": false
    },
    {
      "name": "Plans",
      "x-tag-expanded": false
    },
    {
      "name": "Providers",
      "x-tag-expanded": false
    },
    {
      "name": "Reports",
      "x-tag-expanded": false
    },
    {
      "name": "Resources",
      "x-tag-expanded": false
    },
    {
      "name": "Roles",
      "x-tag-expanded": false
    },
    {
      "name": "Secrets",
      "x-tag-expanded": false
    },
    {
      "name": "Servers",
      "x-tag-expanded": false
    },
    {
      "name": "Services",
      "x-tag-expanded": false
    },
    {
      "name": "Status",
      "x-tag-expanded": false
    },
    {
      "name": "SSH Hosts",
      "x-tag-expanded": false
    },
    {
      "name": "SSH Public Keys",
      "x-tag-expanded": false
    },
    {
      "name": "Subscriptions",
      "x-tag-expanded": false
    },
    {
      "name": "Tasks",
      "x-tag-expanded": false
    },
    {
      "name": "Templates",
      "x-tag-expanded": false
    },
    {
      "name": "URL maps",
      "x-tag-expanded": false
    },
    {
      "name": "Users",
      "x-tag-expanded": false
    },
    {
      "name": "Service users",
      "x-tag-expanded": false
    }
  ],
  "security": [
    {
      "access_key": [

      ]
    }
  ],
  "info": {
    "title": "Webscale APIs",
    "version": "2026.273",
    "description": "The Webscale APIs allow programmatic access to the Webscale services.\nThe API is designed to be\n[RESTful](https://en.wikipedia.org/wiki/Representational_state_transfer)\nand thus is accessed by making HTTP requests to resources addressed by their\nURL. Resources are primarily represented as JSON objects and are accessed\nusing the HTTP methods:\n\n| Method name | Meaning |\n| ------------| ------- |\n| GET         | Get the representation of the resource state |\n| POST        | Create a new resource |\n| PATCH       | Partially update a resource |\n| DELETE      | Delete a resource |\n\nObjects are arranged in collections and can also be addressed directly.\nFor example, the application collection addressed as `/v2/applications`\nmight contain a single application addressed as `/v2/applications/xyz`. To\ncreate a new object in the applications collection, a POST request is made\nto `/v2/applications`. Addressable resources include an `href` attribute\nthat specifies the URI of the object that can be used to get it, patch it,\nor delete it.\n\nFollowing are some of the commonly used object types and their descriptions.\n\n| Collection       | Object type | Description |\n| ---------------- | ----------- | ----------- |\n| /v2/applications | Application | The primary service configuration for a web application |\n| /v2/address-sets | Address set | Maintains a set of IP addresses usually used to block or allow access |\n| /v2/url-maps | URL map | Collection of URL patterns redirected to other URLs |\n| /v2/events | Event | A record of an event related to the operation of the service or site |\n| /v2/reports | Report | Machine-readable reports providing resource usage history and test results |\n| /v2/secrets | Secret | Arbitrary store-only secrets that are used when configuring services requiring credentials |\n| /v2/files | File | Versioned file contents and metadata used for purposes such as Microsites and Handlers |\n| /v2/tasks | Task | An asynchronously executing process, used for a variety of purposes |\n| /v2/users | User | A person or service entity that has access to the API or console |\n| /v2/accounts | Account | The subscriber to the Webscale service |\n\n### Filter expression\n\nSome APIs accept a filter query that limits the resources that are returned.\nFilters follow the following\n[EBNF](https://en.wikipedia.org/wiki/Extended_Backus–Naur_form) syntax:\n\n```ebnf\n  filter = filter, \"or\", filter | filter, \"and\", filter |\n          \"(\", filter, \")\" | leaf-predicate\n  leaf-predicate = attribute, rel-op, value |\n                  attribute, list-op, ( list-value | value ) |\n                  attribute, null-check-op\n  attribute = word (* member of attributes given on construction *)\n  value = string | word\n  rel-op = \"=\" | \"!=\" | \"~\" | \"!~\" | \"<\" | \">\" | \"<=\" | \">=\" |\n    \"contains\" | \"not contains\"\n  list-op = \"in\" | ( \"not\", \"in\" ) ;\n  list-value = \"(\", list, \")\"\n  list = value, { \",\", list }\n  null-check-op = ( \"is\", \"null\" ) | ( \"is\", \"not\", \"null\" )\n```\n\n### Value template<a name=\"value-template\"></a>\n\nSome web control attributes, such as the header value in the\n`set-request-header` action, accept templates that allow for value\nsubstitution from a set of pre-defined functions.\n\n| Expression | Description |\n| ---------- | ----------- |\n| $_n_ | References a numbered captures `$0`…`$9` from a matching `urls` condition |\n| $(cookie('_name_')) | The value of the specified cookie from `Cookie` header for the request |\n| $(country) | The country code associated with the IP address making the request |\n| $(header('_name_')) | The value of the named header for the request |\n| $(host) | Host from the request |\n| $(path) | Path from the request URL |\n| $(peer_address) | The IP address of the client or upstream server |\n| $(query) | Entire query from the request URL |\n| $(query('_key_'[,'_key_']…)) | A query string consisting of keys and values from the request, or an empty string if the request query contains none of the specified keys |\n| $(referrer) | The URL of the page that linked to the requested resource |\n| $(request_address) | The IP address of the client |\n| $(request_method) | The HTTP method used in the request |\n| $(request_protocol) | The protocol used for the request |\n| $(scheme) | Scheme from the request URL |\n| $(session_id) | A unique identifier assigned to a user’s session |\n\n\n\n#### URL matching\n\nWhen using a `urls` condition, matching process stops at the first URL object in\nits list that matches the request. Captured values, numbered `$1`…`$9` are set\nsequentially from left to right for each wildcard in the `scheme`, `domain`,\n`path`, and `query` attributes or for each capture group of the `regex`\nattribute of a matching URL object. When not using `regex` mode, any omitted\nURL object attributes are considered a single wildcard.\n\n##### Example: Capture example\n\nConsider a request with the URL `https://example.com/images/123.jpg` and a\ncondition configured as follows:\n\n```\n\"list\": [\n  {\n    \"path\": \"/media/*\"\n  },\n  {\n    \"path\": \"/images/*\"\n  },\n  {\n    \"path\": \"*\"\n  }\n]\n```\n\nIn this case, the second URL object matches the request (`/images/*`), so the\nmatching stops there. The captures will be set to:\n\n| Capture | Value |\n| ------- | ----- |\n| `$1` | `http` |\n| `$2` | `example.com` |\n| `$3` | `123.jpg` |\n\nThe final URL condition object (`{ \"path\": \"*\" }`) is not evaluated because the\nsecond condition already matched the request.\n\n##### Example: Simplifying a URL query\n\nYou want to rewrite the URL to include only the `pid` and `v` query parameters,\npreserving the scheme, host, and path.\n\nHere is the JSON configuration for the rewrite-url action:\n\n```\n{\n  \"type\": \"rewrite-url\",\n  \"url\": \"$(scheme)://$(host)$(path)?$(query('pid','v'))\"\n}\n```\n\nConsider a request with the URL: `https://example.com/product/123?pid=456&ref=789&v=a`.\nThen the rewritten URL will be:\n\n```\nhttps://example.com/product/123?pid=456&v=a\n```\n"
  },
  "paths": {
    "/accounts": {
      "get": {
        "summary": "Read account collection",
        "description": "Will return all the account resources that the call is authorized to view.\n",
        "tags": [
          "Accounts"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Account"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create an account",
        "description": "Creates a new account and returns the definition.",
        "tags": [
          "Accounts"
        ],
        "parameters": [

        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountPost",
                "description": "The account definition."
              }
            }
          }
        }
      }
    },
    "/accounts/{id}": {
      "get": {
        "summary": "Read an account",
        "description": "Will return the account resource requested.\n",
        "tags": [
          "Accounts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update an account",
        "description": "",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id."
            }
          }
        ],
        "tags": [
          "Accounts"
        ],
        "responses": {
          "200": {
            "description": "The account was successfully updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountPatch",
                "description": "The account parameters to update."
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an account",
        "description": "Deletes the requested account.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          }
        ],
        "tags": [
          "Accounts"
        ],
        "responses": {
          "200": {
            "description": "The account was successfully deleted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{id}/entitlements": {
    },
    "/accounts/{account_id}/entitlements/{id}": {
    },
    "/accounts/{id}/billing": {
    },
    "/accounts/{id}/group-invitations": {
      "get": {
        "summary": "Read group invitation collection",
        "description": "Group invitations are used to invite a user to multiple roles at once",
        "tags": [
          "Groups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GroupInvitation"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a group invitation",
        "description": "Invites a user to a group and returns the invitation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          }
        ],
        "tags": [
          "Groups"
        ],
        "responses": {
          "200": {
            "description": "The invitation was successfully sent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupInvitation"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupInvitationPost",
                "description": "The invitation definition"
              }
            }
          }
        }
      }
    },
    "/accounts/{id}/group-invitations/{invitation_id}": {
      "get": {
        "summary": "Read a group invitation",
        "description": "Group invitations are used to invite a user to multiple roles at once",
        "tags": [
          "Groups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          },
          {
            "name": "invitation_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Invitation id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupInvitation"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update a group invitation",
        "description": "Reinvite the user to a group and return the invitation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          },
          {
            "name": "invitation_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Invitation id"
            }
          }
        ],
        "tags": [
          "Groups"
        ],
        "responses": {
          "200": {
            "description": "The group invitation was successfully updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupInvitation"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupInvitationConfiguration",
                "description": "The group invitation definition"
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a group invitation",
        "description": "Revoke a user's invitation to a group and return the invitation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          },
          {
            "name": "invitation_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Invitation id"
            }
          }
        ],
        "tags": [
          "Groups"
        ],
        "responses": {
          "200": {
            "description": "The invitation was successfully deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupInvitation"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{id}/groups": {
      "get": {
        "summary": "Read groups collection",
        "description": "Groups can be used to grant users many roles at once",
        "tags": [
          "Groups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Group"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a group",
        "description": "Creates a new group and returns the definition",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          }
        ],
        "tags": [
          "Groups"
        ],
        "responses": {
          "200": {
            "description": "The group was successfully created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Group"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupConfigurationPost",
                "description": "The group definition"
              }
            }
          }
        }
      }
    },
    "/accounts/{id}/groups/{group_id}": {
      "get": {
        "summary": "Read a group",
        "description": "Groups can be used to grant users many roles at once",
        "tags": [
          "Groups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Group id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Group"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update a group",
        "description": "Updates the group and returns the updated definition",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Group id"
            }
          }
        ],
        "tags": [
          "Groups"
        ],
        "responses": {
          "200": {
            "description": "The group was successfully updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Group"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupConfiguration",
                "description": "The group definition"
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a group",
        "description": "The group must belong to the account into which the user is authenticated",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Group id"
            }
          }
        ],
        "tags": [
          "Groups"
        ],
        "responses": {
          "200": {
            "description": "The group was successfully deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Group"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{id}/roles": {
      "get": {
        "summary": "Read role collection",
        "description": "Roles can be granted to users and used to limit access to account resources",
        "tags": [
          "Roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Role"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a role",
        "description": "Creates a new role and returns the definition",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          }
        ],
        "tags": [
          "Roles"
        ],
        "responses": {
          "200": {
            "description": "The role was successfully created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Role"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoleConfigurationPost",
                "description": "The role definition"
              }
            }
          }
        }
      }
    },
    "/accounts/{id}/roles/{role_id}": {
      "get": {
        "summary": "Read a role",
        "description": "Roles can be granted to users and used to limit access to account resources",
        "tags": [
          "Roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          },
          {
            "name": "role_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Role id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Role"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update a role",
        "description": "Updates the role and returns the updated definition",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          },
          {
            "name": "role_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Role id"
            }
          }
        ],
        "tags": [
          "Roles"
        ],
        "responses": {
          "200": {
            "description": "The role was successfully updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Role"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoleConfiguration",
                "description": "The role definition"
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a role",
        "description": "The role must belong to the current account",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id."
            }
          },
          {
            "name": "role_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Role id"
            }
          }
        ],
        "tags": [
          "Roles"
        ],
        "responses": {
          "200": {
            "description": "The role was successfully deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Role"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{id}/invitations": {
      "get": {
        "summary": "Read invitation collection",
        "description": "Invitations are used to grant roles to users",
        "tags": [
          "Roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoleInvitation"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create an invitation",
        "description": "Creates a new invitation and returns the definition",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          }
        ],
        "tags": [
          "Roles"
        ],
        "responses": {
          "200": {
            "description": "The invitation was successfully created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoleInvitation"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoleInvitationPost",
                "description": "The invitation definition"
              }
            }
          }
        }
      }
    },
    "/accounts/{id}/invitations/{invitation_id}": {
      "get": {
        "summary": "Read an invitation",
        "description": "Invitations are used to grant roles to users",
        "tags": [
          "Roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Account id"
            }
          },
          {
            "name": "invitation_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Invitation id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoleInvitation"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update an invitation",
        "description": "Updates the invitation and returns the updated definition",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
            

# --- truncated at 32 KB (599 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/webscale-networks/refs/heads/main/openapi/webscale-networks-webscale-apis-openapi.json