{
  "openapi": "3.1.1",
  "info": {
    "title": "Rallybeam API",
    "description": "A company's meets, positions, task templates, configurations, files, team and settings.\r\n\r\n## Getting started\r\n\r\n1. In Rallybeam, open **Settings · Integrations**. The **client ID** is your company's id; the **client secret**\r\n   is yours. Keep it secret: anyone who has it acts as you.\r\n2. Get an access token with the OAuth 2.0 client credentials grant: `POST /v1/oauth/token` with the form fields\r\n   `grant_type=client_credentials`, `client_id` and `client_secret` (or the ID and secret as HTTP Basic).\r\n3. Send the token as `Authorization: Bearer <access_token>`. It acts as you in that company, with your current\r\n   role, and works only for that company's endpoints, where `{tenantId}` is the client ID. Get a new one when it\r\n   expires (`expires_in`, in seconds).\r\n\r\nTo create a meet, find its position (`GET /v1/tenants/{tenantId}/positions`), its configuration\r\n(`GET /v1/tenants/{tenantId}/configurations`, the default first) and one or two interviewers\r\n(`GET /v1/tenants/{tenantId}/members`). Then `POST /v1/tenants/{tenantId}/meets` with `positionId`,\r\n`configurationId`, a `title`, the candidate's e-mail and name, and `interviewerIds`. The response has the meet's\r\n`code`. The meet's link is `https://<this host>/{code}`; the candidate opens it and enters with their\r\n`candidateCode`.\r\n\r\n## Errors\r\n\r\nErrors are problem details (RFC 9457) whose `title` is a stable code, such as `invalid_title` or `meet_ended`.\r\nAnything the token's member may not see answers 404, as if it did not exist. The token endpoint answers OAuth\r\nerrors (RFC 6749 §5.2), such as `invalid_client`.",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://app.rallybeam.com/"
    }
  ],
  "paths": {
    "/v1/tenants/{tenantId}/task-templates": {
      "get": {
        "tags": [
          "Task templates"
        ],
        "summary": "Lists the templates the caller may pick from.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the templates by title; 404 when the caller is not a member.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TaskTemplateView"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TaskTemplateView"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TaskTemplateView"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Task templates"
        ],
        "summary": "Creates a template, or imports one from its JSON file.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "personal",
            "in": "query",
            "description": "Whether only the caller (and Admins) may see it; a company template otherwise.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "A task template in its one JSON form: the body to create or change one, the export file, the import file, and later\r\nthe MCP tool input. It holds no ids or ownership, so a file moves between\r\ncompanies as it is.",
                "$ref": "#/components/schemas/TaskTemplateDocument"
              }
            },
            "text/json": {
              "schema": {
                "description": "A task template in its one JSON form: the body to create or change one, the export file, the import file, and later\r\nthe MCP tool input. It holds no ids or ownership, so a file moves between\r\ncompanies as it is.",
                "$ref": "#/components/schemas/TaskTemplateDocument"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "A task template in its one JSON form: the body to create or change one, the export file, the import file, and later\r\nthe MCP tool input. It holds no ids or ownership, so a file moves between\r\ncompanies as it is.",
                "$ref": "#/components/schemas/TaskTemplateDocument"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "201 with the template; 400 naming the invalid field; 404 when the caller is not a member.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/task-templates/{id}": {
      "get": {
        "tags": [
          "Task templates"
        ],
        "summary": "Reads one template.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The template.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the template; 404 when the caller may not see it.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Task templates"
        ],
        "summary": "Replaces a template's content.",
        "description": "The dashboard sends `If-Match` with the template's `dateLastUpdated` as it read it, so an old\r\n    form cannot overwrite what was saved since (for example the starting content from the template's meet). Imports\r\n    and scripts may leave it out and replace the template as it is.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The template.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "A task template in its one JSON form: the body to create or change one, the export file, the import file, and later\r\nthe MCP tool input. It holds no ids or ownership, so a file moves between\r\ncompanies as it is.",
                "$ref": "#/components/schemas/TaskTemplateDocument"
              }
            },
            "text/json": {
              "schema": {
                "description": "A task template in its one JSON form: the body to create or change one, the export file, the import file, and later\r\nthe MCP tool input. It holds no ids or ownership, so a file moves between\r\ncompanies as it is.",
                "$ref": "#/components/schemas/TaskTemplateDocument"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "A task template in its one JSON form: the body to create or change one, the export file, the import file, and later\r\nthe MCP tool input. It holds no ids or ownership, so a file moves between\r\ncompanies as it is.",
                "$ref": "#/components/schemas/TaskTemplateDocument"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "200 with the template; 400 naming the invalid field; 403 for a global template; 404 when the caller\r\n    may not see it; 412 when an `If-Match` header names a version that is no longer the stored one.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Task templates"
        ],
        "summary": "Archives a template, so the library no longer offers it.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The template.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "204; 403 for a global template; 404 when the caller may not see it."
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/task-templates/{id}/export": {
      "get": {
        "tags": [
          "Task templates"
        ],
        "summary": "Exports a template as its JSON file, which Task&lt;ActionResult&lt;TaskTemplateView&gt;&gt; TaskTemplatesController.Create(Guid tenantId, TaskTemplateDocument document, bool personal, CancellationToken cancellationToken) imports as it is.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The template.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the template's JSON form; 404 when the caller may not see it.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateDocument"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateDocument"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateDocument"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/task-templates/{id}/duplicate": {
      "post": {
        "tags": [
          "Task templates"
        ],
        "summary": "Copies a template, a global one included, into the company's library or the caller's own.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The template to copy.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "personal",
            "in": "query",
            "description": "Whether the copy is personal.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "201 with the copy; 404 when the caller may not see the template.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/task-templates/{id}/promote": {
      "post": {
        "tags": [
          "Task templates"
        ],
        "summary": "Makes a personal template a company template.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The template.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the template; 403 for a global template; 404 when the caller may not see it; 409 when it is\r\n    not personal.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/task-templates/{id}/meet": {
      "post": {
        "tags": [
          "Task templates"
        ],
        "summary": "Opens the template's meet, where its starting content is set up on the real canvases and saved back. The same\r\nmeet comes back each time, unless the template changed elsewhere. The caller also enters it here, with the entry\r\ncookie in the response, so the meet's link opens the workspace without the entry page.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The template.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the meet's code; 400 when the template needs a tool the company's default meet lacks; 403 for\r\n    a global template; 404 when the caller may not see it.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateMeetView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateMeetView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateMeetView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/oauth/token": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Exchanges a client ID and secret for an access token.",
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "allOf": [
                  {
                    "type": "object",
                    "properties": {
                      "grant_type": {
                        "type": "string"
                      }
                    }
                  },
                  {
                    "type": "object",
                    "properties": {
                      "client_id": {
                        "type": "string"
                      }
                    }
                  },
                  {
                    "type": "object",
                    "properties": {
                      "client_secret": {
                        "type": "string"
                      }
                    }
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthTokenResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthTokenResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthTokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthError"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthError"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthError"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthError"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthError"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/attachments": {
      "get": {
        "tags": [
          "Files"
        ],
        "summary": "Lists the files of a template or a candidate.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "ownerKind",
            "in": "query",
            "description": "What the files are attached to: `Template`, `Candidate` or `Meeting`.",
            "schema": {
              "$ref": "#/components/schemas/AttachmentOwnerKind"
            }
          },
          {
            "name": "ownerId",
            "in": "query",
            "description": "The template or candidate.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the files; 404 when the caller may not see the owner; 503 without storage.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AttachmentView"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AttachmentView"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AttachmentView"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Files"
        ],
        "summary": "Attaches a file (a multipart form with `file`, `ownerKind`, `ownerId` and `audience`).",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "allOf": [
                  {
                    "type": "object",
                    "properties": {
                      "file": {
                        "$ref": "#/components/schemas/IFormFile"
                      }
                    }
                  },
                  {
                    "type": "object",
                    "properties": {
                      "ownerKind": {
                        "$ref": "#/components/schemas/AttachmentOwnerKind"
                      }
                    }
                  },
                  {
                    "type": "object",
                    "properties": {
                      "ownerId": {
                        "type": "string",
                        "format": "uuid"
                      }
                    }
                  },
                  {
                    "type": "object",
                    "properties": {
                      "audience": {
                        "$ref": "#/components/schemas/TaskAudience"
                      }
                    }
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "201 with the file; 400 for a missing, empty or not allowed file or owner; 404 when the caller may not\r\n    see the owner; 413 when it is too large; 503 without storage.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/attachments/{id}": {
      "patch": {
        "tags": [
          "Files"
        ],
        "summary": "Changes who may open a file in a meet.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The attachment.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "A new audience for a file: who may open it in a meet.",
                "$ref": "#/components/schemas/AttachmentAudienceChange"
              }
            },
            "text/json": {
              "schema": {
                "description": "A new audience for a file: who may open it in a meet.",
                "$ref": "#/components/schemas/AttachmentAudienceChange"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "A new audience for a file: who may open it in a meet.",
                "$ref": "#/components/schemas/AttachmentAudienceChange"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "200 with the file; 400 for an unknown audience; 404 when the caller may not see it.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentView"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Files"
        ],
        "summary": "Removes a file from its template or candidate.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The attachment.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "204; 404 when the caller may not see it."
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/configurations": {
      "post": {
        "tags": [
          "Configurations"
        ],
        "summary": "Adds a preset.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "A configuration preset as Settings saves it (the request body of `POST configurations` and\r\n`PUT configurations/{id}`): the whole preset, not only what changed.",
                "$ref": "#/components/schemas/ConfigurationChanges"
              }
            },
            "text/json": {
              "schema": {
                "description": "A configuration preset as Settings saves it (the request body of `POST configurations` and\r\n`PUT configurations/{id}`): the whole preset, not only what changed.",
                "$ref": "#/components/schemas/ConfigurationChanges"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "A configuration preset as Settings saves it (the request body of `POST configurations` and\r\n`PUT configurations/{id}`): the whole preset, not only what changed.",
                "$ref": "#/components/schemas/ConfigurationChanges"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "201 with the preset; 400 for an invalid value; 404 when the caller is not an Admin or Recruiter.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationView"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Configurations"
        ],
        "summary": "Lists the company's configuration presets to one of its members.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the presets, the default first; 404 when the caller is not a member.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ConfigurationView"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ConfigurationView"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ConfigurationView"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/configurations/{id}": {
      "put": {
        "tags": [
          "Configurations"
        ],
        "summary": "Replaces a preset.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The preset.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "A configuration preset as Settings saves it (the request body of `POST configurations` and\r\n`PUT configurations/{id}`): the whole preset, not only what changed.",
                "$ref": "#/components/schemas/ConfigurationChanges"
              }
            },
            "text/json": {
              "schema": {
                "description": "A configuration preset as Settings saves it (the request body of `POST configurations` and\r\n`PUT configurations/{id}`): the whole preset, not only what changed.",
                "$ref": "#/components/schemas/ConfigurationChanges"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "A configuration preset as Settings saves it (the request body of `POST configurations` and\r\n`PUT configurations/{id}`): the whole preset, not only what changed.",
                "$ref": "#/components/schemas/ConfigurationChanges"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "200 with the preset; 400 for an invalid value; 404 when there is no such preset or the caller is not an\r\n    Admin or Recruiter.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationView"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Configurations"
        ],
        "summary": "Deletes a preset; meets created from it keep their add-ons.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The preset.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "204; 404 when there is no such preset or the caller is not an Admin or Recruiter; 409 for the\r\n    default."
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/positions": {
      "get": {
        "tags": [
          "Positions"
        ],
        "summary": "Lists the company's positions to one of its members.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the positions by title; 404 when the caller is not a member.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PositionView"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PositionView"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PositionView"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Positions"
        ],
        "summary": "Creates a position.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "A new position, as the New position dialog sends it (the request body of `POST positions`).",
                "$ref": "#/components/schemas/NewPosition"
              }
            },
            "text/json": {
              "schema": {
                "description": "A new position, as the New position dialog sends it (the request body of `POST positions`).",
                "$ref": "#/components/schemas/NewPosition"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "A new position, as the New position dialog sends it (the request body of `POST positions`).",
                "$ref": "#/components/schemas/NewPosition"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "201 with the position; 400 for an invalid value; 404 when the caller is not a member.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/PositionView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PositionView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/PositionView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/meets": {
      "get": {
        "tags": [
          "Meets"
        ],
        "summary": "Lists the meets of one position that the caller may see.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "positionId",
            "in": "query",
            "description": "The position.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the meets, newest first; 404 when the caller is not a member.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CompanyMeetView"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CompanyMeetView"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CompanyMeetView"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Meets"
        ],
        "summary": "Creates a meet, as the Create meet wizard does.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "A new company meet: the request body of `POST meets`, as the Create meet wizard sends it.",
                "$ref": "#/components/schemas/NewCompanyMeet"
              }
            },
            "text/json": {
              "schema": {
                "description": "A new company meet: the request body of `POST meets`, as the Create meet wizard sends it.",
                "$ref": "#/components/schemas/NewCompanyMeet"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "A new company meet: the request body of `POST meets`, as the Create meet wizard sends it.",
                "$ref": "#/components/schemas/NewCompanyMeet"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "201 with the meet; 400 for an invalid value; 404 when the caller is not a member.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/meets/{code}": {
      "get": {
        "tags": [
          "Meets"
        ],
        "summary": "Returns one meet.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "code",
            "in": "path",
            "description": "The meeting code.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the meet; 404 when it is not one of the company's meets the caller may see.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Meets"
        ],
        "summary": "Replaces the whole meet at once, as Meet details' Save changes does: send it as it was read, with the changes.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "code",
            "in": "path",
            "description": "The meeting code.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "A company meet as Meet details saves it with Save changes:\r\nthe whole page, not only what changed. The position and the code never change.",
                "$ref": "#/components/schemas/MeetChanges"
              }
            },
            "text/json": {
              "schema": {
                "description": "A company meet as Meet details saves it with Save changes:\r\nthe whole page, not only what changed. The position and the code never change.",
                "$ref": "#/components/schemas/MeetChanges"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "A company meet as Meet details saves it with Save changes:\r\nthe whole page, not only what changed. The position and the code never change.",
                "$ref": "#/components/schemas/MeetChanges"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "200 with the meet; 400 for an invalid value; 404 when it is not one of the company's meets the caller\r\n    may see; 409 when it has ended, its configuration may no longer change, or a task in use would go.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/meets/{code}/schedule": {
      "put": {
        "tags": [
          "Meets"
        ],
        "summary": "Changes how the meet's time is set.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "code",
            "in": "path",
            "description": "The meeting code.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "How a meet's time is set, as Create meet and the meet's Change schedule send it.",
                "$ref": "#/components/schemas/NewMeetSchedule"
              }
            },
            "text/json": {
              "schema": {
                "description": "How a meet's time is set, as Create meet and the meet's Change schedule send it.",
                "$ref": "#/components/schemas/NewMeetSchedule"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "How a meet's time is set, as Create meet and the meet's Change schedule send it.",
                "$ref": "#/components/schemas/NewMeetSchedule"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "200 with the meet; 400 for an invalid schedule; 404 when it is not one of the company's meets the caller\r\n    may see; 409 when the meet has ended.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/meets/{code}/candidate-code": {
      "post": {
        "tags": [
          "Meets"
        ],
        "summary": "Replaces the candidate's code.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "code",
            "in": "path",
            "description": "The meeting code.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the meet and its new code; 404 when it is not one of the company's meets the caller may\r\n    see.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/meets/{code}/interviewers/{interviewerId}/code": {
      "post": {
        "tags": [
          "Meets"
        ],
        "summary": "Replaces an interviewer's own code, or gives one to an interviewer of an older meet. Admins and\r\nRecruiters may do it for anyone, an interviewer for themselves.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "code",
            "in": "path",
            "description": "The meeting code.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "interviewerId",
            "in": "path",
            "description": "The interviewer whose code changes.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the meet and the new code; 404 when it is not one of the company's meets the caller may see,\r\n    the person is not one of its interviewers, or the caller may not change their code.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/meets/{code}/external-participants/{externalId}/code": {
      "post": {
        "tags": [
          "Meets"
        ],
        "summary": "Replaces the code of someone from outside the company. Admins and Recruiters only.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "code",
            "in": "path",
            "description": "The meeting code.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "externalId",
            "in": "path",
            "description": "The person's invitation id.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the meet and the new code; 404 when it is not one of the company's meets the caller may see,\r\n    there is no such person, or the caller is not an Admin or Recruiter.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyMeetView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/meets/{code}/tasks/{taskId}/save-as-template": {
      "post": {
        "tags": [
          "Meets"
        ],
        "summary": "Saves one of the meet's tasks as a new template in the library.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "code",
            "in": "path",
            "description": "The meeting code.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "taskId",
            "in": "path",
            "description": "One of the meet's tasks.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "personal",
            "in": "query",
            "description": "Whether the template is personal; a company template otherwise.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "201 with the template; 400 naming an invalid field; 404 when the meet or task is not one the caller\r\n    may see.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTemplateView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/company": {
      "get": {
        "tags": [
          "Company and team"
        ],
        "summary": "Returns the company's settings to one of its members. The paid plan is switched with\r\n`PUT /v1/tenants/{tenantId}/plan`.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the settings; 404 when the caller is not a member.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyView"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Company and team"
        ],
        "summary": "Replaces the company's name, address and city.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "A company's new profile. An empty address or city clears it.",
                "$ref": "#/components/schemas/UpdateCompanyRequest"
              }
            },
            "text/json": {
              "schema": {
                "description": "A company's new profile. An empty address or city clears it.",
                "$ref": "#/components/schemas/UpdateCompanyRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "A company's new profile. An empty address or city clears it.",
                "$ref": "#/components/schemas/UpdateCompanyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "200 with the settings; 400 for an invalid value; 404 when the caller is not the company's Admin.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/members": {
      "get": {
        "tags": [
          "Company and team"
        ],
        "summary": "Lists the company's members to one of them.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the members by name; 404 when the caller is not a member.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TenantMember"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TenantMember"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TenantMember"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/members/{userId}": {
      "put": {
        "tags": [
          "Company and team"
        ],
        "summary": "Changes a member's role.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "description": "The member.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "A member's new role.",
                "$ref": "#/components/schemas/ChangeRoleRequest"
              }
            },
            "text/json": {
              "schema": {
                "description": "A member's new role.",
                "$ref": "#/components/schemas/ChangeRoleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "A member's new role.",
                "$ref": "#/components/schemas/ChangeRoleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "204; 400 for an unknown role; 404 when the member or the caller's Admin role is missing; 409\r\n    `last_admin` when the company would have no Admin left."
          }
        }
      },
      "delete": {
        "tags": [
          "Company and team"
        ],
        "summary": "Removes a member from the company.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "description": "The member.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "204; 404 when the member or the caller's Admin role is missing; 409 `last_admin` for the last\r\n    Admin."
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/invitations": {
      "get": {
        "tags": [
          "Company and team"
        ],
        "summary": "Lists the company's pending invitations, expired ones included, to its Admin.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the invitations; 404 when the caller is not the company's Admin.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvitationView"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvitationView"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvitationView"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Company and team"
        ],
        "summary": "Invites an address into the company and e-mails the link. Limited per client address, as it sends e-mail.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "Whom to invite into a company, and as what.",
                "$ref": "#/components/schemas/InviteRequest"
              }
            },
            "text/json": {
              "schema": {
                "description": "Whom to invite into a company, and as what.",
                "$ref": "#/components/schemas/InviteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "Whom to invite into a company, and as what.",
                "$ref": "#/components/schemas/InviteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "201 with the invitation; 400 for an invalid address or role; 404 when the caller is not the company's\r\n    Admin; 409 `already_member`.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/InvitationView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvitationView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvitationView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/invitations/{invitationId}/resend": {
      "post": {
        "tags": [
          "Company and team"
        ],
        "summary": "Sends a pending invitation again with a new link valid 7 more days.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "invitationId",
            "in": "path",
            "description": "The invitation.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the invitation; 404 when it is not pending or the caller is not the company's Admin.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/InvitationView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvitationView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvitationView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/invitations/{invitationId}": {
      "delete": {
        "tags": [
          "Company and team"
        ],
        "summary": "Revokes a pending invitation.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "invitationId",
            "in": "path",
            "description": "The invitation.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "204; 404 when it is not pending or the caller is not the company's Admin."
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/sign-in": {
      "get": {
        "tags": [
          "Branding and sign-in"
        ],
        "summary": "Reads how the company's employees enter its meets, with the caller's own sign-in.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the setting; 404 when the caller is not the company's Admin.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySignInView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySignInView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySignInView"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Branding and sign-in"
        ],
        "summary": "Replaces how the company's employees enter its meets.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "How a company's employees are to enter its meets. Empty values clear the domain or tenant.",
                "$ref": "#/components/schemas/UpdateCompanySignInRequest"
              }
            },
            "text/json": {
              "schema": {
                "description": "How a company's employees are to enter its meets. Empty values clear the domain or tenant.",
                "$ref": "#/components/schemas/UpdateCompanySignInRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "How a company's employees are to enter its meets. Empty values clear the domain or tenant.",
                "$ref": "#/components/schemas/UpdateCompanySignInRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "200 with the setting; 400 naming an invalid value; 404 when the caller is not the company's\r\n    Admin.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySignInView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySignInView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySignInView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/brand": {
      "get": {
        "tags": [
          "Branding and sign-in"
        ],
        "summary": "Returns the company's branding settings to its Admin.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the settings; 404 when the company does not exist or the caller is not its Admin.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Branding and sign-in"
        ],
        "summary": "Replaces the company's accent colour, welcome message and careers link.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "application/json": {
              "schema": {
                "description": "A company's new branding settings. Empty or missing values clear them.",
                "$ref": "#/components/schemas/UpdateCompanyBrandRequest"
              }
            },
            "text/json": {
              "schema": {
                "description": "A company's new branding settings. Empty or missing values clear them.",
                "$ref": "#/components/schemas/UpdateCompanyBrandRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "description": "A company's new branding settings. Empty or missing values clear them.",
                "$ref": "#/components/schemas/UpdateCompanyBrandRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "200 with the settings; 400 for an invalid value; 404 when the caller is not the company's Admin.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/logo": {
      "put": {
        "tags": [
          "Branding and sign-in"
        ],
        "summary": "Replaces the company's logo with an uploaded PNG, JPEG or WebP image of at most 256 KB.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "Cancels the request.",
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "$ref": "#/components/schemas/IFormFile"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "200 with the settings; 400 for a missing, large or unsupported image; 404 when the caller is not the\r\n    company's Admin.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Branding and sign-in"
        ],
        "summary": "Removes the company's logo.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the settings; 404 when the caller is not the company's Admin.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tenants/{tenantId}/domain": {
      "post": {
        "tags": [
          "Branding and sign-in"
        ],
        "summary": "Verifies the domain of the caller's confirmed work address for the company, so candidates see a verified\r\ncheckmark.",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The company.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 with the settings; 400 when the caller's address is a free mail provider; 404 when the caller is\r\n    not the company's Admin.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBrandView"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AttachmentAudienceChange": {
        "required": [
          "audience"
        ],
        "type": "object",
        "properties": {
          "audience": {
            "description": "Everyone, interviewers only (staff), the candidate after the meet, or the organizer only.",
            "$ref": "#/components/schemas/TaskAudience"
          }
        },
        "description": "A new audience for a file: who may open it in a meet."
      },
      "AttachmentOwnerKind": {
        "type": "integer"
      },
      "AttachmentView": {
        "required": [
          "id",
          "ownerKind",
          "ownerId",
          "fileName",
          "contentType",
          "sizeBytes",
          "audience",
          "createdAt",
          "url"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The attachment.",
            "format": "uuid"
          },
          "ownerKind": {
            "description": "What it is attached to.",
            "$ref": "#/components/schemas/AttachmentOwnerKind"
          },
          "ownerId": {
            "type": "string",
            "description": "The template, meet's task or candidate.",
            "format": "uuid"
          },
          "fileName": {
            "type": "string",
            "description": "The file's name."
          },
          "contentType": {
            "type": "string",
            "description": "The file's media type."
          },
          "sizeBytes": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "The file's size in bytes.",
            "format": "int64"
          },
          "audience": {
            "description": "Who may open it in a meet.",
            "$ref": "#/components/schemas/TaskAudience"
          },
          "createdAt": {
            "type": "string",
            "description": "When it was attached, in UTC.",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "description": "A link that opens the file for a few minutes."
          }
        },
        "description": "An attached file, with a short-lived link that opens it."
      },
      "CandidateView": {
        "required": [
          "id",
          "email",
          "firstName",
          "lastName",
          "city"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The candidate, for the files attached to them (such as a CV).",
            "format": "uuid"
          },
          "email": {
            "type": "string",
            "description": "The e-mail address."
          },
          "firstName": {
            "type": "string",
            "description": "The first name."
          },
          "lastName": {
            "type": "string",
            "description": "The last name."
          },
          "city": {
            "type": [
              "null",
              "string"
            ],
            "description": "The city, or `null`."
          }
        },
        "description": "A meet's candidate."
      },
      "ChangeRoleRequest": {
        "required": [
          "role"
        ],
        "type": "object",
        "properties": {
          "role": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The role.",
                "$ref": "#/components/schemas/TenantRole"
              }
            ]
          }
        },
        "description": "A member's new role."
      },
      "CompanyBrandView": {
        "required": [
          "tenantId",
          "isLive",
          "name",
          "verifiedDomain",
          "accentColor",
          "welcomeMessage",
          "careersUrl",
          "logoUrl"
        ],
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "description": "The company.",
            "format": "uuid"
          },
          "isLive": {
            "type": "boolean",
            "description": "Whether candidates see the branding, which needs a paid plan. Without one, the Admin can still\r\n    set it up and preview it."
          },
          "name": {
            "type": "string",
            "description": "The company name."
          },
          "verifiedDomain": {
            "type": [
              "null",
              "string"
            ],
            "description": "The verified e-mail domain, or `null`."
          },
          "accentColor": {
            "type": [
              "null",
              "string"
            ],
            "description": "The brand colour as `#rrggbb`, or `null`."
          },
          "welcomeMessage": {
            "type": [
              "null",
              "string"
            ],
            "description": "The join-screen text, or `null`."
          },
          "careersUrl": {
            "type": [
              "null",
              "string"
            ],
            "description": "The careers link, or `null`."
          },
          "logoUrl": {
            "type": [
              "null",
              "string"
            ],
            "description": "The logo's path on this site, or `null`."
          }
        },
        "description": "A company's branding settings, as its Admin sees them."
      },
      "CompanyMeetTaskView": {
        "required": [
          "id",
          "order",
          "title",
          "durationMinutes",
          "sourceTemplateId",
          "isStarted"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The task.",
            "format": "uuid"
          },
          "order": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "The position in the meet, from one.",
            "format": "int32"
          },
          "title": {
            "type": [
              "null",
              "string"
            ],
            "description": "The title; `null` for a blank task."
          },
          "durationMinutes": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "description": "The planned time in minutes, or `null`.",
            "format": "int32"
          },
          "sourceTemplateId": {
            "type": [
              "null",
              "string"
            ],
            "description": "The template it was copied from, if any.",
            "format": "uuid"
          },
          "isStarted": {
            "type": "boolean",
            "description": "Whether it has run in the meet, so Save changes may neither remove nor move it."
          }
        },
        "description": "One task of a company meet, as Meet details lists it."
      },
      "CompanyMeetView": {
        "required": [
          "code",
          "title",
          "description",
          "state",
          "positionId",
          "plannedMinutes",
          "candidate",
          "candidateCode",
          "interviewers",
          "createdAt",
          "tasks",
          "externalParticipants",
          "schedule",
          "configurationId",
          "addOns",
          "id",
          "access",
          "linkPasscode"
        ],
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "The meeting code; the link is `/{Code}`."
          },
          "title": {
            "type": [
              "null",
              "string"
            ],
            "description": "The title."
          },
          "description": {
            "type": [
              "null",
              "string"
            ],
            "description": "A description for the hiring team, or `null`."
          },
          "state": {
            "description": "Where the meet is in its lifecycle.",
            "$ref": "#/components/schemas/MeetingState"
          },
          "positionId": {
            "type": "string",
            "description": "The position.",
            "format": "uuid"
          },
          "plannedMinutes": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "description": "How long it is planned to take, or `null`.",
            "format": "int32"
          },
          "candidate": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The candidate, or `null` when the row is gone.",
                "$ref": "#/components/schemas/CandidateView"
              }
            ]
          },
          "candidateCode": {
            "type": [
              "null",
              "string"
            ],
            "description": "The code the candidate enters with, or `null`."
          },
          "interviewers": {
            "type": "array",
            "items": {
              "description": "One of a meet's interviewers.",
              "$ref": "#/components/schemas/InterviewerView"
            },
            "description": "The assigned interviewers."
          },
          "createdAt": {
            "type": "string",
            "description": "When it was created, in UTC.",
            "format": "date-time"
          },
          "tasks": {
            "type": "array",
            "items": {
              "description": "One task of a company meet, as Meet details lists it.",
              "$ref": "#/components/schemas/CompanyMeetTaskView"
            },
            "description": "The meet's tasks, in order."
          },
          "externalParticipants": {
            "type": "array",
            "items": {
              "description": "Someone from outside the company invited to a meet.",
              "$ref": "#/components/schemas/ExternalParticipantView"
            },
            "description": "The people from outside the company invited to it."
          },
          "schedule": {
            "description": "How its time is set.",
            "$ref": "#/components/schemas/MeetScheduleView"
          },
          "configurationId": {
            "type": [
              "null",
              "string"
            ],
            "description": "The configuration preset it was created from, or last changed to; `null` for a\r\n    custom meet.",
            "format": "uuid"
          },
          "addOns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Its canvas add-ons, in their order, by catalogue id, such as\r\n    `[\"twilio\", \"monaco\", \"excalidraw\"]`."
          },
          "id": {
            "type": "string",
            "description": "The meeting's id, which its own files are attached to.",
            "format": "uuid"
          },
          "access": {
            "description": "Who may enter: MeetAccess.Link when anyone with the link may join (a company\r\n    Quick meet), MeetAccess.Invited otherwise.",
            "$ref": "#/components/schemas/MeetAccess"
          },
          "linkPasscode": {
            "type": [
              "null",
              "string"
            ],
            "description": "The passcode visitors of a MeetAccess.Link meet type with their name, or\r\n    `null` when it has none and for an invited-people meet. Like CandidateCode, everyone who\r\n    may see the meet sees it."
          }
        },
        "description": "A company meet, as the board's card and Meet details show it."
      },
      "CompanySignInView": {
        "required": [
          "employeeSignIn",
          "googleWorkspaceDomain",
          "microsoftTenantId",
          "yourProvider",
          "yourOrganization"
        ],
        "type": "object",
        "properties": {
          "employeeSignIn": {
            "description": "The setting.",
            "$ref": "#/components/schemas/EmployeeSignIn"
          },
          "googleWorkspaceDomain": {
            "type": [
              "null",
              "string"
            ],
            "description": "The Google Workspace domain whose accounts count as the company's, or\r\n    `null`."
          },
          "microsoftTenantId": {
            "type": [
              "null",
              "string"
            ],
            "description": "The Microsoft Entra tenant id whose accounts count as the company's, or\r\n    `null`."
          },
          "yourProvider": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "How the Admin is signed in right now, so the page can offer their organisation.",
                "$ref": "#/components/schemas/LoginProvider"
              }
            ]
          },
          "yourOrganization": {
            "type": [
              "null",
              "string"
            ],
            "description": "The organisation the Admin's own sign-in belongs to, or `null`."
          }
        },
        "description": "How a company's employees enter its meets, as its Admin sees it."
      },
      "CompanyView": {
        "required": [
          "tenantId",
          "name",
          "address",
          "city",
          "hasPaidPlan",
          "role"
        ],
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "description": "The company.",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "description": "The company name."
          },
          "address": {
            "type": [
              "null",
              "string"
            ],
            "description": "The street address, or `null`."
          },
          "city": {
            "type": [
              "null",
              "string"
            ],
            "description": "The city, or `null`."
          },
          "hasPaidPlan": {
            "type": "boolean",
            "description": "Whether the company has a paid plan: a throwaway stand-in, replaced by an active\r\n    subscription before EB-1 ships."
          },
          "role": {
            "description": "The caller's role, so the page knows whether it may edit.",
            "$ref": "#/components/schemas/TenantRole"
          }
        },
        "description": "A company's settings, as its members see them on Settings · Company."
      },
      "ConfigurationChanges": {
        "required": [
          "name",
          "description",
          "isDefault",
          "addOns"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "null",
              "string"
            ],
            "description": "The name, such as \"Pair programming\"; required."
          },
          "description": {
            "type": [
              "null",
              "string"
            ],
            "description": "What it offers in a few words, or `null`."
          },
          "isDefault": {
            "type": "boolean",
            "description": "Whether Create meet picks it first; making one the default takes it from the others, and\r\n    the default stays the default until another one takes its place."
          },
          "addOns": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "The canvas add-ons it has, in their order, by catalogue id (`GET /v1/add-ons`), such as\r\n    `[\"twilio\", \"monaco\"]`; at least one. The participants and chat panels come with every preset."
          }
        },
        "description": "A configuration preset as Settings saves it (the request body of `POST configurations` and\r\n`PUT configurations/{id}`): the whole preset, not only what changed."
      },
      "ConfigurationView": {
        "required": [
          "id",
          "name",
          "description",
          "isDefault",
          "addOns"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The configuration.",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "description": "The name, such as \"Default\"."
          },
          "description": {
            "type": [
              "null",
              "string"
            ],
            "description": "What it offers in a few words, or `null`."
          },
          "isDefault": {
            "type": "boolean",
            "description": "Whether Create meet picks it first."
          },
          "addOns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The canvas add-ons it has, in their order, by catalogue id, such as\r\n    `[\"twilio\", \"monaco\", \"excalidraw\"]`. The participants and chat panels come with every preset."
          }
        },
        "description": "A configuration preset, as Create meet offers it and Settings edits it."
      },
      "EmployeeSignIn": {
        "type": "integer"
      },
      "ExternalParticipantView": {
        "required": [
          "id",
          "displayName",
          "email",
          "role",
          "code"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Their invitation's id, for <b>New code</b>.",
            "format": "uuid"
          },
          "displayName": {
            "type": "string",
            "description": "Their name."
          },
          "email": {
            "type": "string",
            "description": "Their e-mail address."
          },
          "role": {
            "description": "Interviewer or Observer.",
            "$ref": "#/components/schemas/ParticipantRole"
          },
          "code": {
            "type": [
              "null",
              "string"
            ],
            "description": "Their code, or `null` when the reader may not see it (only Admins and Recruiters may)."
          }
        },
        "description": "Someone from outside the company invited to a meet."
      },
      "IFormFile": {
        "type": "string",
        "format": "binary"
      },
      "InterviewerView": {
        "required": [
          "userId",
          "displayName",
          "code"
        ],
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "The member's user id.",
            "format": "uuid"
          },
          "displayName": {
            "type": "string",
            "description": "The member's name, or an empty string when they have left the company."
          },
          "code": {
            "type": [
              "null",
              "string"
            ],
            "description": "Their own code for a browser where they are not signed in, or `null` when the\r\n    reader may not see it (only Admins, Recruiters and the interviewer themselves may) or the meet predates codes."
          }
        },
        "description": "One of a meet's interviewers."
      },
      "InvitationView": {
        "required": [
          "id",
          "email",
          "role",
          "sentAt",
          "expiresAt",
          "isExpired"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The invitation.",
            "format": "uuid"
          },
          "email": {
            "type": "string",
            "description": "The invited address."
          },
          "role": {
            "description": "The role the person gets on accepting.",
            "$ref": "#/components/schemas/TenantRole"
          },
          "sentAt": {
            "type": "string",
            "description": "When the link was last sent, in UTC.",
            "format": "date-time"
          },
          "expiresAt": {
            "type": "string",
            "description": "When the link stops working, in UTC.",
            "format": "date-time"
          },
          "isExpired": {
            "type": "boolean",
            "description": "Whether the link has stopped working; sending it again renews it."
          }
        },
        "description": "A pending invitation, as the Users page lists it."
      },
      "InviteRequest": {
        "required": [
          "email",
          "role"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": [
              "null",
              "string"
            ],
            "description": "The address to invite."
          },
          "role": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The role the person gets.",
                "$ref": "#/components/schemas/TenantRole"
              }
            ]
          }
        },
        "description": "Whom to invite into a company, and as what."
      },
      "JsonElement": { },
      "LoginProvider": {
        "type": "integer"
      },
      "MeetAccess": {
        "type": "integer",
        "description": "Who may enter a company meet, as Create meet's \"People &amp; access\" sets it. It is fixed\r\nwhen the meet is created."
      },
      "MeetChanges": {
        "required": [
          "configurationId",
          "title",
          "plannedMinutes",
          "description",
          "candidateEmail",
          "candidateFirstName",
          "candidateLastName",
          "candidateCity",
          "interviewerIds",
          "externalParticipants",
          "tasks",
          "schedule"
        ],
        "type": "object",
        "properties": {
          "configurationId": {
            "type": [
              "null",
              "string"
            ],
            "description": "The configuration preset, or `null` for a custom meet made of\r\n    AddOns; either may change only while nobody has entered the meet.",
            "format": "uuid"
          },
          "title": {
            "type": [
              "null",
              "string"
            ],
            "description": "The title; required."
          },
          "plannedMinutes": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "description": "How long the meet is planned to take; informational.",
            "format": "int32"
          },
          "description": {
            "type": [
              "null",
              "string"
            ],
            "description": "A description for the hiring team, or `null`."
          },
          "candidateEmail": {
            "type": [
              "null",
              "string"
            ],
            "description": "The candidate's e-mail address; required unless the meet has no candidate (a company\r\n    Quick meet), which then stays without one. Another address points the meet at that address's candidate; the\r\n    candidate's code stays the same."
          },
          "candidateFirstName": {
            "type": [
              "null",
              "string"
            ],
            "description": "The candidate's first name."
          },
          "candidateLastName": {
            "type": [
              "null",
              "string"
            ],
            "description": "The candidate's last name."
          },
          "candidateCity": {
            "type": [
              "null",
              "string"
            ],
            "description": "The candidate's city, or `null`."
          },
          "interviewerIds": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The interviewers' user ids: one or two company members. Someone left out loses their\r\n    access at once; someone new gets a code."
          },
          "externalParticipants": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "description": "Someone from outside the company as Save changes sends them.",
              "$ref": "#/components/schemas/MeetExternalChange"
            },
            "description": "The people from outside the company, at most three: the ones already invited\r\n    with their Guid? MeetExternalChange.Id, new ones without. Someone left out loses their access at once."
          },
          "tasks": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "description": "One task in the order Save changes sends: exactly one of the two is set.",
              "$ref": "#/components/schemas/MeetTaskChange"
            },
            "description": "The meet's tasks in their new order: tasks it has, and new copies of templates. A task that\r\n    has started, or whose canvas someone opened, stays, and the started ones keep their order. None gives one blank\r\n    task."
          },
          "schedule": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "How the meet's time is set; `null` keeps it.",
                "$ref": "#/components/schemas/NewMeetSchedule"
              }
            ]
          },
          "addOns": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "A custom meet's canvas add-ons, in their order, by catalogue id; ignored when\r\n    ConfigurationId names a preset."
          },
          "linkPasscode": {
            "type": [
              "null",
              "string"
            ],
            "description": "For a meet that anyone with the link may join (MeetAccess.Link), the\r\n    passcode visitors type with their name: trimmed, 4 to 40 characters, or empty for the link alone. Ignored for\r\n    MeetAccess.Invited; the access itself never changes."
          }
        },
        "description": "A company meet as Meet details saves it with Save changes:\r\nthe whole page, not only what changed. The position and the code never change."
      },
      "MeetExternalChange": {
        "required": [
          "id",
          "displayName",
          "email",
          "role"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "Their invitation (Guid ExternalParticipantView.Id) when they are already invited, so they\r\n    keep their code; `null` for someone new.",
            "format": "uuid"
          },
          "displayName": {
            "type": [
              "null",
              "string"
            ],
            "description": "Their name."
          },
          "email": {
            "type": [
              "null",
              "string"
            ],
            "description": "Their e-mail address."
          },
          "role": {
            "description": "Interviewer or Observer.",
            "$ref": "#/components/schemas/ParticipantRole"
          }
        },
        "description": "Someone from outside the company as Save changes sends them."
      },
      "MeetingState": {
        "type": "integer"
      },
      "MeetScheduleView": {
        "required": [
          "mode",
          "startsAt",
          "timeZone"
        ],
        "type": "object",
        "properties": {
          "mode": {
            "description": "The scheduling mode.",
            "$ref": "#/components/schemas/SchedulingMode"
          },
          "startsAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "When the meet is planned to start, in UTC, or `null` unless the mode is\r\n    SchedulingMode.Manual.",
            "format": "date-time"
          },
          "timeZone": {
            "type": [
              "null",
              "string"
            ],
            "description": "The IANA time zone the start was entered in, or `null` without a start."
          }
        },
        "description": "How a meet's time is set, as the board's card and Meet details show it."
      },
      "MeetTaskChange": {
        "required": [
          "taskId",
          "templateId"
        ],
        "type": "object",
        "properties": {
          "taskId": {
            "type": [
              "null",
              "string"
            ],
            "description": "One of the meet's tasks (Guid CompanyMeetTaskView.Id), kept as it is.",
            "format": "uuid"
          },
          "templateId": {
            "type": [
              "null",
              "string"
            ],
            "description": "A template the meet copies as a new task.",
            "format": "uuid"
          }
        },
        "description": "One task in the order Save changes sends: exactly one of the two is set."
      },
      "NewCompanyMeet": {
        "required": [
          "positionId",
          "configurationId",
          "title",
          "plannedMinutes",
          "description",
          "candidateEmail",
          "candidateFirstName",
          "candidateLastName",
          "candidateCity",
          "interviewerIds"
        ],
        "type": "object",
        "properties": {
          "positionId": {
            "type": "string",
            "description": "The position the meet belongs to.",
            "format": "uuid"
          },
          "configurationId": {
            "type": [
              "null",
              "string"
            ],
            "description": "The configuration preset, or `null` for a custom meet made of\r\n    AddOns.",
            "format": "uuid"
          },
          "title": {
            "type": [
              "null",
              "string"
            ],
            "description": "The title; required."
          },
          "plannedMinutes": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "description": "How long the meet is planned to take; informational.",
            "format": "int32"
          },
          "description": {
            "type": [
              "null",
              "string"
            ],
            "description": "A description for the hiring team, or `null`."
          },
          "candidateEmail": {
            "type": [
              "null",
              "string"
            ],
            "description": "The candidate's e-mail address; required for MeetAccess.Invited, ignored\r\n    for MeetAccess.Link."
          },
          "candidateFirstName": {
            "type": [
              "null",
              "string"
            ],
            "description": "The candidate's first name; required for MeetAccess.Invited, ignored\r\n    for MeetAccess.Link."
          },
          "candidateLastName": {
            "type": [
              "null",
              "string"
            ],
            "description": "The candidate's last name; required for MeetAccess.Invited, ignored\r\n    for MeetAccess.Link."
          },
          "candidateCity": {
            "type": [
              "null",
              "string"
            ],
            "description": "The candidate's city, or `null`; ignored for MeetAccess.Link."
          },
          "interviewerIds": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The interviewers' user ids: one or two company members; ignored for\r\n    MeetAccess.Link, whose only team member is its creator."
          },
          "taskTemplateIds": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The task templates the meet copies, in order; none for one blank task.\r\n    The same template may be used twice."
          },
          "externalParticipants": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "description": "Someone from outside the company invited to a meet in Create meet: an agency's client as Observer, a\r\nfreelance interviewer. They enter with their own code only.",
              "$ref": "#/components/schemas/NewExternalParticipant"
            },
            "description": "People from outside the company, at most three, each entering with their own\r\n    code; ignored for MeetAccess.Link."
          },
          "schedule": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "How the meet's time is set; `null` for no scheduled date and time.",
                "$ref": "#/components/schemas/NewMeetSchedule"
              }
            ]
          },
          "addOns": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "A custom meet's canvas add-ons, in their order, by catalogue id, such as\r\n    `[\"monaco\", \"excalidraw\"]`; ignored when ConfigurationId names a preset."
          },
          "interviewerFileNotes": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Who sees what the interviewers write on the meet's files; `Private` when\r\n    left out.",
                "$ref": "#/components/schemas/NoteVisibility"
              }
            ]
          },
          "access": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Who may enter: MeetAccess.Invited when left out, or\r\n    MeetAccess.Link for a company Quick meet that anyone with the link joins as Candidate, with no\r\n    candidate saved. It never changes afterwards.",
                "$ref": "#/components/schemas/MeetAccess"
              }
            ]
          },
          "linkPasscode": {
            "type": [
              "null",
              "string"
            ],
            "description": "For MeetAccess.Link, the passcode the host typed, such as\r\n    `design-chat`, which visitors type with their name: trimmed, 4 to 40 characters, or empty for the link\r\n    alone. Ignored for MeetAccess.Invited."
          }
        },
        "description": "A new company meet: the request body of `POST meets`, as the Create meet wizard sends it."
      },
      "NewExternalParticipant": {
        "required": [
          "displayName",
          "email",
          "role"
        ],
        "type": "object",
        "properties": {
          "displayName": {
            "type": [
              "null",
              "string"
            ],
            "description": "Their name, as the others will see it; required."
          },
          "email": {
            "type": [
              "null",
              "string"
            ],
            "description": "Their e-mail address, for the invitation; required."
          },
          "role": {
            "description": "Interviewer or Observer.",
            "$ref": "#/components/schemas/ParticipantRole"
          }
        },
        "description": "Someone from outside the company invited to a meet in Create meet: an agency's client as Observer, a\r\nfreelance interviewer. They enter with their own code only."
      },
      "NewMeetSchedule": {
        "required": [
          "mode",
          "startsAt",
          "timeZone"
        ],
        "type": "object",
        "properties": {
          "mode": {
            "description": "The scheduling mode.",
            "$ref": "#/components/schemas/SchedulingMode"
          },
          "startsAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "In SchedulingMode.Manual, the start as the clock in TimeZone\r\n    shows it, without an offset (for example `2026-10-29T14:00`); `null` in every other mode. The server turns\r\n    it into UTC with that zone's rules for that day, so summer time is never guessed by the browser.",
            "format": "date-time"
          },
          "timeZone": {
            "type": [
              "null",
              "string"
            ],
            "description": "In SchedulingMode.Manual, the IANA time zone ID, such as\r\n    `Europe/Belgrade`; ignored in every other mode."
          }
        },
        "description": "How a meet's time is set, as Create meet and the meet's Change schedule send it."
      },
      "NewPosition": {
        "required": [
          "title",
          "externalCode",
          "description"
        ],
        "type": "object",
        "properties": {
          "title": {
            "type": [
              "null",
              "string"
            ],
            "description": "The title; required."
          },
          "externalCode": {
            "type": [
              "null",
              "string"
            ],
            "description": "The company's own code for the opening, or `null`."
          },
          "description": {
            "type": [
              "null",
              "string"
            ],
            "description": "A description, or `null`."
          }
        },
        "description": "A new position, as the New position dialog sends it (the request body of `POST positions`)."
      },
      "NoteVisibility": {
        "type": "integer"
      },
      "OAuthError": {
        "required": [
          "error"
        ],
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "The error code, such as `invalid_client`."
          }
        },
        "description": "A failed token request (RFC 6749 §5.2)."
      },
      "OAuthTokenResponse": {
        "required": [
          "access_token",
          "token_type",
          "expires_in"
        ],
        "type": "object",
        "properties": {
          "access_token": {
            "type": "string",
            "description": "The bearer token for the company's endpoints."
          },
          "token_type": {
            "type": "string",
            "description": "Always `Bearer`."
          },
          "expires_in": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Seconds until it expires; then the client asks for a new one.",
            "format": "int32"
          }
        },
        "description": "A successful token response (RFC 6749 §5.1)."
      },
      "ParticipantRole": {
        "type": "integer"
      },
      "PositionView": {
        "required": [
          "id",
          "title",
          "externalCode",
          "description"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The position.",
            "format": "uuid"
          },
          "title": {
            "type": "string",
            "description": "The title."
          },
          "externalCode": {
            "type": [
              "null",
              "string"
            ],
            "description": "The company's own code for the opening, or `null`."
          },
          "description": {
            "type": [
              "null",
              "string"
            ],
            "description": "A description, or `null`."
          }
        },
        "description": "A position, as the dashboard lists it."
      },
      "SchedulingMode": {
        "type": "integer"
      },
      "TaskAudience": {
        "type": "integer"
      },
      "TaskTemplateDocument": {
        "required": [
          "title",
          "summary",
          "description",
          "items",
          "interviewerNotes",
          "milestones",
          "durationMinutes",
          "evaluationGuide",
          "tags",
          "parts"
        ],
        "type": "object",
        "properties": {
          "title": {
            "type": [
              "null",
              "string"
            ],
            "description": "The title; required."
          },
          "summary": {
            "type": [
              "null",
              "string"
            ],
            "description": "One line for the library."
          },
          "description": {
            "type": [
              "null",
              "string"
            ],
            "description": "The full task text in Markdown."
          },
          "items": {
            "type": [
              "null",
              "array"
            ],
            "description": "The goals or questions, in order."
          },
          "interviewerNotes": {
            "type": [
              "null",
              "string"
            ],
            "description": "Notes for interviewers in Markdown."
          },
          "milestones": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "Named moments to mark during the meeting."
          },
          "durationMinutes": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "description": "The planned time in minutes.",
            "format": "int32"
          },
          "evaluationGuide": {
            "type": [
              "null",
              "string"
            ],
            "description": "Free text for the AI helper; empty for no AI."
          },
          "tags": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "Tags for search and filters."
          },
          "parts": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "description": "One add-on part of a task template in its JSON form.",
              "$ref": "#/components/schemas/TaskTemplatePartDocument"
            },
            "description": "The add-on parts, in order."
          }
        },
        "description": "A task template in its one JSON form: the body to create or change one, the export file, the import file, and later\r\nthe MCP tool input. It holds no ids or ownership, so a file moves between\r\ncompanies as it is."
      },
      "TaskTemplatePartDocument": {
        "required": [
          "addOn",
          "addOnVersion",
          "settings",
          "payload"
        ],
        "type": "object",
        "properties": {
          "addOn": {
            "type": [
              "null",
              "string"
            ],
            "description": "The add-on id, such as `monaco` (`GET /v1/add-ons` lists them)."
          },
          "addOnVersion": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "description": "The add-on version the settings and content are written for; the current one when\r\n    omitted.",
            "format": "int32"
          },
          "settings": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The add-on's settings, checked against its settings schema; `{}` when omitted.",
                "$ref": "#/components/schemas/JsonElement"
              }
            ]
          },
          "payload": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The add-on's content in sections, checked against its task schema; `{}` when\r\n    omitted.",
                "$ref": "#/components/schemas/JsonElement"
              }
            ]
          }
        },
        "description": "One add-on part of a task template in its JSON form."
      },
      "TaskTemplateScope": {
        "type": "integer",
        "description": "Whose a task template is."
      },
      "TaskTemplateView": {
        "required": [
          "id",
          "scope",
          "ownerUserId",
          "createdByUserId",
          "sourceTemplateId",
          "dateLastUpdated",
          "template"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The template.",
            "format": "uuid"
          },
          "scope": {
            "description": "Whose it is.",
            "$ref": "#/components/schemas/TaskTemplateScope"
          },
          "ownerUserId": {
            "type": [
              "null",
              "string"
            ],
            "description": "The member whose personal template it is, if it is personal.",
            "format": "uuid"
          },
          "createdByUserId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Who wrote it; `null` for a global template and a company's first task, which\r\n    Rallybeam added.",
            "format": "uuid"
          },
          "sourceTemplateId": {
            "type": [
              "null",
              "string"
            ],
            "description": "The template it was duplicated from, if any.",
            "format": "uuid"
          },
          "dateLastUpdated": {
            "type": "string",
            "description": "When it last changed, in UTC.",
            "format": "date-time"
          },
          "template": {
            "description": "Its content, in the same form as the export file.",
            "$ref": "#/components/schemas/TaskTemplateDocument"
          }
        },
        "description": "A task template as the library shows it."
      },
      "TemplateMeetView": {
        "required": [
          "code"
        ],
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "The meet's code, for its link."
          }
        },
        "description": "A template's meet, as the dashboard opens it."
      },
      "TenantMember": {
        "required": [
          "userId",
          "displayName",
          "email",
          "role",
          "joinedAt",
          "lastSeenAt"
        ],
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "format": "uuid"
          },
          "displayName": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "role": {
            "$ref": "#/components/schemas/TenantRole"
          },
          "joinedAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastSeenAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "TenantRole": {
        "type": "integer"
      },
      "UpdateCompanyBrandRequest": {
        "required": [
          "accentColor",
          "welcomeMessage",
          "careersUrl"
        ],
        "type": "object",
        "properties": {
          "accentColor": {
            "type": [
              "null",
              "string"
            ],
            "description": "The brand colour as `#rrggbb`."
          },
          "welcomeMessage": {
            "type": [
              "null",
              "string"
            ],
            "description": "The join-screen text."
          },
          "careersUrl": {
            "type": [
              "null",
              "string"
            ],
            "description": "An `https` link to the careers page."
          }
        },
        "description": "A company's new branding settings. Empty or missing values clear them."
      },
      "UpdateCompanyRequest": {
        "required": [
          "name",
          "address",
          "city"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "null",
              "string"
            ],
            "description": "The company name."
          },
          "address": {
            "type": [
              "null",
              "string"
            ],
            "description": "The street address."
          },
          "city": {
            "type": [
              "null",
              "string"
            ],
            "description": "The city."
          }
        },
        "description": "A company's new profile. An empty address or city clears it."
      },
      "UpdateCompanySignInRequest": {
        "required": [
          "employeeSignIn",
          "googleWorkspaceDomain",
          "microsoftTenantId"
        ],
        "type": "object",
        "properties": {
          "employeeSignIn": {
            "description": "The setting.",
            "$ref": "#/components/schemas/EmployeeSignIn"
          },
          "googleWorkspaceDomain": {
            "type": [
              "null",
              "string"
            ],
            "description": "The Google Workspace domain whose accounts count as the company's."
          },
          "microsoftTenantId": {
            "type": [
              "null",
              "string"
            ],
            "description": "The Microsoft Entra tenant id whose accounts count as the company's."
          }
        },
        "description": "How a company's employees are to enter its meets. Empty values clear the domain or tenant."
      }
    },
    "securitySchemes": {
      "oauth2": {
        "type": "oauth2",
        "description": "OAuth 2.0 client credentials (RFC 6749 §4.4).",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "/v1/oauth/token",
            "scopes": { }
          }
        }
      }
    }
  },
  "security": [
    {
      "oauth2": [ ]
    }
  ],
  "tags": [
    {
      "name": "Task templates"
    },
    {
      "name": "Authentication"
    },
    {
      "name": "Files"
    },
    {
      "name": "Configurations"
    },
    {
      "name": "Positions"
    },
    {
      "name": "Meets"
    },
    {
      "name": "Company and team"
    },
    {
      "name": "Branding and sign-in"
    }
  ]
}