> ## Documentation Index
> Fetch the complete documentation index at: https://docs.advinservers.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a team

> ### Overview

Creates an empty team owned by your account. Send `name` with 1 to 191 characters and no control characters. Duplicate names are allowed. The team starts with Admin, Member and Restricted roles. It does not become the default team.

### Permissions

Requires the account permission `teams.manage` (Manage teams).



## OpenAPI

````yaml https://console.advinservers.com/docs/openapi.json post /teams
openapi: 3.1.0
info:
  title: API reference
  version: 1.0.0
  description: >-
    Use this API to manage your team's servers, networks, backups, and other
    resources.


    ## Authentication


    Create an API key under **API Keys** and send it as a bearer token with
    every request:


    ```

    Authorization: Bearer {YOUR_API_KEY}

    Accept: application/json

    ```


    Copy the key when you create it. It cannot be shown again. Revoking a key
    takes effect immediately.


    ## Permissions


    Give each key only the permissions it needs. Every endpoint lists the
    required permission.


    Permissions cover servers and other resources in the key's team.


    ## Team scope


    A key can access resources in the team selected when it was created. This
    includes servers,

    snapshots, backups, firewall groups, images, SSH keys, scripts, networks and
    addresses.

    Resources in other teams return `404 Not Found`. Create a separate key for
    each team.


    The key determines the team for every request. Legacy keys that had no team
    are assigned

    to the account's first owned team.


    ## Actions that need the panel


    API keys cannot do the following, even with every permission. Sign in to the
    panel in a

    browser to do them:


    - Create, edit or revoke API keys

    - Edit the IP groups that restrict API keys

    - End signed-in sessions

    - Change two-factor authentication

    - Change the account's email address

    - Accept or decline team invitations

    - Switch or leave a team


    This keeps a leaked key from widening its own access or locking you out of
    your account.


    ## Source IP restrictions


    A key can be restricted to one or more IP groups. Requests from other
    addresses are rejected.


    ## Requests and responses


    Each endpoint lists its path, query, header, and body parameters. Examples
    use fictional data.


    Single records use JSON objects. Collections use JSON arrays unless the
    endpoint supports pagination. Timestamps use ISO 8601 in UTC.


    Error responses include `message`. Validation errors also include an
    `errors` object for each field. Each endpoint lists its status codes.


    ## Audit log


    Every API request, including reads, is recorded in the account audit log
    with the key that made it.
servers:
  - url: https://console.advinservers.com/api/v1/client
security:
  - http: []
tags:
  - name: Account
    description: Billing contact details and account setup progress.
  - name: Account activity
    description: Actions performed in the current team by people and API keys.
  - name: Servers
    description: >-
      Order and list servers, read their state and resource use, open a console,
      and control power.
  - name: Server settings
    description: >-
      Rename a server, rebuild it, and change its hardware, media, resolvers and
      credentials.
  - name: Backups
    description: Scheduled server copies stored separately from the server.
  - name: Snapshots
    description: >-
      Take, restore and move server snapshots. Snapshots are kept in snapshot
      storage that the team buys by the GiB.
  - name: Firewall groups
    description: Reusable sets of firewall rules, and the servers they apply to.
  - name: IP groups
    description: Reusable source address lists for firewall rules.
  - name: Server firewall
    description: >-
      Read default traffic policies and rules managed outside your firewall
      groups.
  - name: IP addresses
    description: Manage floating IPs and server address assignments.
  - name: Private networks
    description: Connect servers over a private network in the same location.
  - name: Reverse DNS
    description: Set the hostnames returned by IP address lookups.
  - name: DDoS protection
    description: Configure attack filtering for server addresses.
  - name: Bandwidth
    description: Buy extra bandwidth and share it between servers or location pools.
  - name: SSH keys
    description: Public keys the account can install on a server when it is built.
  - name: Setup scripts
    description: Scripts the account can run on a server when it is built.
  - name: ISO images
    description: ISO images you have downloaded, and the servers they are mounted on.
  - name: Server upgrades
    description: Change an existing server's plan.
  - name: Checkout
    description: Choose a payment method and pay for a purchase.
  - name: Invoices
    description: View and pay account invoices.
  - name: Billing
    description: Manage service renewals, payment methods and account credit.
  - name: Transfers
    description: Move resources between teams or transfer ownership.
  - name: Teams
    description: Manage the team assigned to your API key.
  - name: Team members
    description: Invite people and manage their team access.
  - name: Team roles
    description: Define the permissions granted to team members.
  - name: Team activity
    description: View actions performed in a team.
  - name: Support tickets
    description: >-
      Open, read, reply to and close support tickets. Tickets belong to the
      account holder and are not shared with team members.
paths:
  /teams:
    post:
      tags:
        - Teams
      summary: Create a team
      description: >-
        ### Overview


        Creates an empty team owned by your account. Send `name` with 1 to 191
        characters and no control characters. Duplicate names are allowed. The
        team starts with Admin, Member and Restricted roles. It does not become
        the default team.


        ### Permissions


        Requires the account permission `teams.manage` (Manage teams).
      operationId: client.teams.store
      requestBody:
        description: >-
          Send a JSON object containing the fields below. Required fields are
          marked in the schema.
        required: true
        content:
          application/json:
            schema:
              examples:
                - name: Hazard Course
              allOf:
                - $ref: '#/components/schemas/StoreTeamRequest'
      responses:
        '200':
          description: The record, as a JSON object. There is no envelope.
          content:
            application/json:
              schema:
                examples:
                  - id: fbb31f5f-bd6f-4019-a3ed-1062a28f56f7
                    name: Anomalous Materials
                    is_owner: true
                    is_default: true
                    is_active: true
                    owner:
                      name: Gordon Freeman
                      email: gordon.freeman@blackmesa.example.com
                      gravatar_url: >-
                        https://www.gravatar.com/avatar/6108e5fddd878d82e464d4282b011ed7?s=64&d=404
                    role: null
                    permissions:
                      - team.read
                      - team.manage
                      - server.read
                      - server.power
                      - server.console
                      - server.update
                      - server.credentials
                      - server.reinstall
                      - server.transfer
                      - backup.read
                      - backup.create
                      - backup.restore
                      - backup.delete
                      - snapshot.read
                      - snapshot.create
                      - snapshot.restore
                      - snapshot.delete
                      - snapshot.update
                      - snapshot.transfer
                      - firewall.read
                      - firewall.update
                      - firewall.delete
                      - network.read
                      - network.update
                      - network.transfer
                      - network.delete
                      - sshkey.read
                      - sshkey.update
                      - sshkey.delete
                      - script.read
                      - script.update
                      - script.delete
                      - iso.read
                      - iso.update
                      - iso.delete
                      - measured_boot.read
                      - measured_boot.update
                      - measured_boot.delete
                      - billing.read
                      - billing.manage
                      - billing.purchase
                    can_leave: false
                    members_count: 1
                    held_resources:
                      servers: 2
                      ssh_keys: 2
                      firewall_groups: 1
                      private_networks: 1
                      floating_ips: 1
                      snapshots: 1
                      backups: 3
                      snapshot_storages: 1
                    created_at: '2025-11-18T21:07:44+00:00'
                allOf:
                  - $ref: '#/components/schemas/TeamData'
        '401':
          description: >-
            The key was missing, malformed, revoked, or belongs to an account
            that no longer exists.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                required:
                  - message
        '403':
          description: >-
            Access denied. Check the key's team, permissions and allowed IP
            addresses. Some actions, such as managing API keys, require a
            browser session. The response message explains the reason.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - >-
                        This API key is not allowed to do that in this team. It
                        needs the "snapshot.delete" permission.
                required:
                  - message
        '422':
          description: >-
            A field is missing or invalid, or the resource cannot accept this
            change in its current state. Check `message` for details. Field
            validation also includes an `errors` object keyed by field name.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: >-
                      A summary of the validation error or the reason the change
                      was refused.
                    examples:
                      - The name field is required.
                  errors:
                    type: object
                    description: Validation errors grouped by field name.
                    additionalProperties:
                      type: array
                      items:
                        type: string
                required:
                  - message
        '429':
          description: >-
            Too many requests. The `Retry-After` header says how many seconds to
            wait. Limits are per account, so several keys on one account share
            them.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Too Many Attempts.
                required:
                  - message
components:
  schemas:
    StoreTeamRequest:
      type: object
      examples:
        - name: Hazard Course
      properties:
        name:
          type: string
          description: The name shown to customers.
          pattern: ^[^\p{C}]+$
          minLength: 1
          maxLength: 191
      required:
        - name
      title: StoreTeamRequest
    TeamData:
      type: object
      description: A team and the current account's membership details.
      examples:
        - id: fbb31f5f-bd6f-4019-a3ed-1062a28f56f7
          name: Anomalous Materials
          is_owner: true
          is_default: true
          is_active: true
          owner:
            name: Gordon Freeman
            email: gordon.freeman@blackmesa.example.com
            gravatar_url: >-
              https://www.gravatar.com/avatar/6108e5fddd878d82e464d4282b011ed7?s=64&d=404
          role: null
          permissions:
            - team.read
            - team.manage
            - server.read
            - server.power
            - server.console
            - server.update
            - server.credentials
            - server.reinstall
            - server.transfer
            - backup.read
            - backup.create
            - backup.restore
            - backup.delete
            - snapshot.read
            - snapshot.create
            - snapshot.restore
            - snapshot.delete
            - snapshot.update
            - snapshot.transfer
            - firewall.read
            - firewall.update
            - firewall.delete
            - network.read
            - network.update
            - network.transfer
            - network.delete
            - sshkey.read
            - sshkey.update
            - sshkey.delete
            - script.read
            - script.update
            - script.delete
            - iso.read
            - iso.update
            - iso.delete
            - measured_boot.read
            - measured_boot.update
            - measured_boot.delete
            - billing.read
            - billing.manage
            - billing.purchase
          can_leave: false
          members_count: 1
          held_resources:
            servers: 2
            ssh_keys: 2
            firewall_groups: 1
            private_networks: 1
            floating_ips: 1
            snapshots: 1
            backups: 3
            snapshot_storages: 1
          created_at: '2025-11-18T21:07:44+00:00'
      properties:
        id:
          type: string
          description: The id ID.
          examples:
            - fbb31f5f-bd6f-4019-a3ed-1062a28f56f7
        name:
          type: string
          description: The name shown to customers.
          examples:
            - Anomalous Materials
        is_owner:
          type: boolean
          description: Whether the resource is owner.
          examples:
            - true
        is_default:
          type: boolean
          description: >-
            Where a resource lands when nothing has said otherwise, and the team
            a session falls back to. Exactly one of an account's teams carries
            it, which the database enforces rather than trusts.
          examples:
            - true
        is_active:
          type: boolean
          description: >-
            Which team the browser is currently working in, compared against the
            id the resolver settled on rather than against the raw session key.
            An account may own several teams, so "the one you own" stopped being
            an answer the moment the session key was empty - every one of them
            would have read as active at once.
          examples:
            - true
        owner:
          $ref: '#/components/schemas/TeamOwnerData'
          description: The value of `owner`.
          examples:
            - name: Gordon Freeman
              email: gordon.freeman@blackmesa.example.com
              gravatar_url: >-
                https://www.gravatar.com/avatar/6108e5fddd878d82e464d4282b011ed7?s=64&d=404
        role:
          description: The value of `role`.
          examples:
            - null
          anyOf:
            - $ref: '#/components/schemas/TeamRoleSummaryData'
            - type: 'null'
        permissions:
          type: array
          description: The value of `permissions`.
          examples:
            - - team.read
              - team.manage
              - server.read
              - server.power
              - server.console
              - server.update
              - server.credentials
              - server.reinstall
              - server.transfer
              - backup.read
              - backup.create
              - backup.restore
              - backup.delete
              - snapshot.read
              - snapshot.create
              - snapshot.restore
              - snapshot.delete
              - snapshot.update
              - snapshot.transfer
              - firewall.read
              - firewall.update
              - firewall.delete
              - network.read
              - network.update
              - network.transfer
              - network.delete
              - sshkey.read
              - sshkey.update
              - sshkey.delete
              - script.read
              - script.update
              - script.delete
              - iso.read
              - iso.update
              - iso.delete
              - measured_boot.read
              - measured_boot.update
              - measured_boot.delete
              - billing.read
              - billing.manage
              - billing.purchase
          items:
            type: string
        can_leave:
          type: boolean
          description: >-
            Only the owner may leave nothing behind; an owner cannot leave their
            own account, which is why this is not simply `! is_owner`.
          examples:
            - false
        members_count:
          type:
            - integer
            - 'null'
          description: The number of members count.
          examples:
            - 1
        held_resources:
          description: >-
            What is still inside the team, so the listing can say it before a
            deletion is attempted rather than only in the refusal that comes
            back from one. Both are read from the same method deliberately: a
            preview that disagreed with the refusal would send somebody looking
            for a server that is not where they were told it was.
          examples:
            - servers: 2
              ssh_keys: 2
              firewall_groups: 1
              private_networks: 1
              floating_ips: 1
              snapshots: 1
              backups: 3
              snapshot_storages: 1
          anyOf:
            - anyOf:
                - type: object
                  additionalProperties:
                    type: integer
                - type: array
                  items: {}
                  maxItems: 0
            - type: 'null'
        created_at:
          type:
            - string
            - 'null'
          description: >-
            Written out with an explicit format rather than left to the date
            serialiser, because that is what the transformer this replaces
            published: seconds and an offset, not microseconds and a Z.
          examples:
            - '2025-11-18T21:07:44+00:00'
      required:
        - id
        - name
        - is_owner
        - is_default
        - is_active
        - owner
        - role
        - permissions
        - can_leave
        - members_count
        - held_resources
        - created_at
      title: TeamData
    TeamOwnerData:
      type: object
      description: The account that owns a team.
      examples:
        - name: Gordon Freeman
          email: gordon.freeman@blackmesa.example.com
          gravatar_url: >-
            https://www.gravatar.com/avatar/6108e5fddd878d82e464d4282b011ed7?s=64&d=404
      properties:
        name:
          type:
            - string
            - 'null'
          description: The name shown to customers.
          examples:
            - Gordon Freeman
        email:
          type:
            - string
            - 'null'
          description: The email address.
          examples:
            - gordon.freeman@blackmesa.example.com
        gravatar_url:
          type:
            - string
            - 'null'
          description: The value of `gravatar_url`.
          examples:
            - >-
              https://www.gravatar.com/avatar/6108e5fddd878d82e464d4282b011ed7?s=64&d=404
      required:
        - name
        - email
        - gravatar_url
      title: TeamOwnerData
    TeamRoleSummaryData:
      type: object
      description: >-
        A role named on a row that is about something else: the team you hold it
        in, or the member who holds it.
      examples:
        - id: 18f11680-0831-4d41-9d71-824c99009cbf
          name: Research Associate
          is_system: false
      properties:
        id:
          type: string
          description: The id ID.
          examples:
            - 18f11680-0831-4d41-9d71-824c99009cbf
        name:
          type: string
          description: The name shown to customers.
          examples:
            - Research Associate
        is_system:
          type: boolean
          description: Whether the resource is system.
          examples:
            - false
      required:
        - id
        - name
        - is_system
      title: TeamRoleSummaryData
  securitySchemes:
    http:
      type: http
      description: >-
        Your API key, sent as a bearer token. Create one in the control panel
        under API Keys, give it only the permissions the integration needs, and
        copy it when it is created. It cannot be shown again. Each key is
        restricted to one owned team. The key determines the team for every
        request.
      scheme: bearer

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.