Vast.ai Team API

The Team API from Vast.ai — 9 operation(s) for team.

OpenAPI Specification

vast-ai-team-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Vast.ai Accounts Team API
  description: API for managing cloud GPU instances, volumes, and resources on Vast.ai
  version: 1.0.0
  contact:
    name: Vast.ai Support
    url: https://discord.gg/hSuEbSQ4X8
servers:
- url: https://console.vast.ai
  description: Production API server
security:
- bearerAuth: []
tags:
- name: Team
paths:
  /api/v0/team:
    post:
      summary: create team
      description: 'Creates a new team with the authenticated user as the owner. The user''s existing API key

        becomes the owner key for the team. The user cannot already be a team or be a member of another team.


        The operation:

        1. Converts the user into a team

        2. Creates default team roles (member, manager, owner)

        3. Converts user''s API key into the owner key

        4. Adds the creating user as a team member


        CLI Usage: vast create team --name <team_name>'
      security:
      - BearerAuth: []
      tags:
      - Team
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - team_name
              - permissions
              properties:
                team_name:
                  type: string
                  description: Name for the new team
                  example: my-awesome-team
                permissions:
                  type: object
                  description: JSON object containing role and permission definitions. https://vast.ai/docs/cli/roles-and-permissions
                  example:
                    api:
                      misc: {}
                      user_read: {}
                      instance_read: {}
                      instance_write: {}
                      billing_read: {}
                      billing_write: {}
      responses:
        '200':
          description: Team created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    example: Team Successfully Created!
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: string
                    enum:
                    - already_team
                    - team_member
                  msg:
                    type: string
                    example: Cannot create a team within a team
        '401':
          description: Unauthorized - Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden - User is blacklisted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: User's master API key not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v0/team/role:
    post:
      summary: create team role
      description: 'Creates a new role within a team. Only team owners or managers with the appropriate permissions can perform this operation.


        CLI Usage: vast create team role --name <role_name> --permissions <permissions_json>'
      security:
      - BearerAuth: []
      tags:
      - Team
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - name
              - permissions
              properties:
                name:
                  type: string
                  description: Name for the new role
                  example: developer
                permissions:
                  type: object
                  description: JSON object containing permission definitions
                  example:
                    api:
                      user_read: {}
                      instance_write: {}
      responses:
        '200':
          description: Role created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    example: Role Successfully Created!
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: string
                    example: invalid_role_name
                  msg:
                    type: string
                    example: Role name is invalid
        '401':
          description: Unauthorized - Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden - User lacks permission
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v0/team/:
    delete:
      summary: destroy team
      description: 'Deletes a team and all associated data including API keys, rights, invitations,

        memberships and metadata. The team owner''s master API key is converted to a normal client key.


        CLI Usage: vast-ai destroy team'
      security:
      - BearerAuth: []
      responses:
        '200':
          description: Team successfully deleted
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    example: Team Successfully Deleted!
        '401':
          description: Unauthorized - Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden - User is blacklisted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found - Team does not exist
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Error'
                - type: object
                  properties:
                    error:
                      type: string
                      enum:
                      - no_such_user
                    msg:
                      type: string
                      example: No such user.
      tags:
      - Team
  /api/v0/team/invite/:
    post:
      summary: invite team member
      description: 'Sends an invitation email to the specified user to join the team with the given role.


        CLI Usage: vast-ai invite team-member --email EMAIL --role ROLE'
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - email
              - role
              properties:
                email:
                  type: string
                  description: Email address of the user to invite
                  format: email
                  example: user@example.com
                role:
                  type: string
                  description: Role to assign to the new team member
                  example: developer
                api_key:
                  type: string
                  description: API key of the inviting user
                  example: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      responses:
        '200':
          description: Invitation sent successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    example: New invitation sent to ${email}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    enum:
                    - User is a not a team member
                    - User cannot be invited to their own team.
                    - User is already a member of this team.
        '403':
          description: Forbidden - User not authenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Team metadata not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    example: Team metadata not found
        '429':
          description: Too Many Requests - Duplicate invitation
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    example: 'Error: invitation already sent to user@example.com only 300 seconds ago.'
      tags:
      - Team
  /api/v0/team/members/{id}:
    delete:
      summary: remove team member
      description: 'Removes a member from the team by revoking their team-related API keys and updating membership status.

        Cannot remove the team owner.


        CLI Usage: vast-ai remove team-member ID

        Example: vast-ai remove team-member 12345'
      parameters:
      - in: path
        name: id
        required: true
        schema:
          type: integer
        description: User ID of the team member to remove
        example: 12345
      responses:
        '200':
          description: Member removed successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                    - success
                    example: success
                  message:
                    type: string
                    example: User removed from the team.
        '400':
          description: Bad request - cannot remove team owner
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    example: Cannot remove the team owner from the team
        '401':
          description: Unauthorized - invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: string
                    example: unauthorized
                  msg:
                    type: string
                    example: Invalid or missing API key
        '403':
          description: Forbidden - user is blacklisted
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: string
                    example: forbidden
                  msg:
                    type: string
                    example: User is blacklisted
        '404':
          description: Member not found or already removed
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                    - failure
                    example: failure
                  message:
                    type: string
                    example: No user was removed from the team.
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: string
                    example: rate_limit_exceeded
                  msg:
                    type: string
                    example: API requests too frequent endpoint threshold=3.0
      security:
      - BearerAuth: []
      tags:
      - Team
  /api/v0/team/roles/{id}:
    delete:
      summary: remove team role
      description: 'Removes a role from the team. Cannot remove the team owner role.


        CLI Usage: vast-ai remove team-role NAME

        Example: vast-ai remove team-role developer'
      parameters:
      - in: path
        name: id
        required: true
        schema:
          type: string
        description: Name of the role to remove
        example: developer
      responses:
        '200':
          description: Role removed successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                    - success
                    example: success
                  message:
                    type: string
                    example: Role removed from team
        '400':
          description: Bad request - role name is required
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    example: Role name is required
        '401':
          description: Unauthorized - invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: string
                    example: unauthorized
                  msg:
                    type: string
                    example: Invalid or missing API key
        '403':
          description: Forbidden - cannot delete owner role or user is blacklisted
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: string
                    example: forbidden
                  msg:
                    type: string
                    example: You cannot delete the owner role.
        '404':
          description: Role not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: string
                    example: not_found
                  msg:
                    type: string
                    example: Specified role not found
      security:
      - BearerAuth: []
      tags:
      - Team
  /api/v0/team/members/:
    get:
      summary: show team members
      description: 'Retrieve a list of team members associated with the authenticated user''s team.


        CLI Usage: vastai show team-members'
      security:
      - BearerAuth: []
      responses:
        '200':
          description: Success response
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      description: User ID
                      example: 123
                    username:
                      type: string
                      description: Username of the team member
                      example: johndoe
                    email:
                      type: string
                      description: Email of the team member
                      example: johndoe@example.com
                    roles:
                      type: array
                      description: Roles assigned to the team member
                      items:
                        type: string
                      example:
                      - admin
                      - member
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Team
  /api/v0/team/roles/{id}/:
    put:
      summary: update team role
      description: Update an existing team role with new name and permissions.
      parameters:
      - name: id
        in: path
        required: true
        description: ID of the role to update.
        schema:
          type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: New name for the role.
                permissions:
                  type: object
                  description: JSON encoded permissions for the role.
              required:
              - name
              - permissions
      responses:
        '200':
          description: Successfully updated team role.
          content:
            application/json:
              schema:
                type: string
                example: Successfully Updated Team Role For <role_name>
        '400':
          description: Bad Request - Missing or invalid parameters.
        '403':
          description: Forbidden - User does not have permission to update this role.
        '404':
          description: Not Found - API key not found.
      security:
      - BearerAuth: []
      tags:
      - Team
  /api/v0/team/roles-full/:
    get:
      summary: show team roles
      description: 'Retrieve a list of all roles for a team, excluding the ''team_owner'' role.


        CLI Usage: vastai show team-roles'
      security:
      - BearerAuth: []
      responses:
        '200':
          description: Success response
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      description: Role ID
                      example: 1
                    name:
                      type: string
                      description: Name of the role
                      example: admin
                    permissions:
                      type: array
                      description: Permissions associated with the role
                      items:
                        type: string
                      example:
                      - read
                      - write
                    identifier:
                      type: string
                      description: Unique identifier for the role
                      example: admin_role
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Team
components:
  schemas:
    Error:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: string
        msg:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key authentication
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
    ApiKeyAuth:
      type: apiKey
      in: query
      name: api_key
      description: API key must be provided as a query parameter