openapi: "3.0.0"
info:
  title: Influx API Service
  version: 0.1.0
servers:
  - url: /api/v2
paths:
  /signin:
    post:
      operationId: PostSignin
      summary: Exchange basic auth credentials for session
      security:
        - BasicAuth: []
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      responses:
        '204':
          description: Successfully authenticated
        '401':
          description: Unauthorized access
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        '403':
          description: user account is disabled
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unsuccessful authentication
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /signout:
    post:
      operationId: PostSignout
      summary: Expire the current session
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      responses:
        '204':
          description: Session successfully expired
        '401':
          description: Unauthorized access
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unsuccessful session expiry
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /:
    get:
      operationId: GetRoutes
      summary: Map of all top level routes available
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      responses:
        default:
          description: All routes
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Routes"
  /setup:
    get:
      operationId: GetSetup
      tags:
        - Setup
      summary: Check if database has default user, org, bucket
      description: Returns `true` if no default user, organization, or bucket has been created.
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      responses:
        '200':
          description:
            allowed true or false
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IsOnboarding"
    post:
      operationId: PostSetup
      tags:
        - Setup
      summary: Set up initial user, org and bucket
      description: Post an onboarding request to set up initial user, org and bucket.
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      requestBody:
        description: Source to create
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OnboardingRequest"
      responses:
        '201':
          description: Created default user, bucket, org
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OnboardingResponse"
  /documents/templates:
    get:
      operationId: GetDocumentsTemplates
      tags:
        - Templates
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
          - in: query
            name: org
            description: Specifies the name of the organization of the template.
            schema:
              type: string
          - in: query
            name: orgID
            description: Specifies the organization ID of the template.
            schema:
              type: string
      responses:
        '200':
          description: A list of template documents
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Documents"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostDocumentsTemplates
      tags:
        - Templates
      summary: Create a template
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
      requestBody:
        description: Template that will be created
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DocumentCreate"
      responses:
        '201':
          description: Template created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Document"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/documents/templates/{templateID}':
    get:
      operationId: GetDocumentsTemplatesID
      tags:
        - Templates
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: templateID
          schema:
            type: string
          required: true
          description: The template ID.
      responses:
        '200':
          description: The template requested
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Document"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    put:
      operationId: PutDocumentsTemplatesID
      tags:
        - Templates
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: templateID
          schema:
            type: string
          required: true
          description: The template ID.
      requestBody:
        description: Template that will be updated
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DocumentUpdate"
      responses:
        '200':
          description: The newly updated template
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Document"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteDocumentsTemplatesID
      tags:
        - Templates
      summary: Delete a template
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: templateID
          schema:
            type: string
          required: true
          description: The template ID.
      responses:
        '204':
          description: Delete has been accepted
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/documents/templates/{templateID}/labels':
    get:
      operationId: GetDocumentsTemplatesIDLabels
      tags:
        - Templates
      summary: List all labels for a template
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: templateID
          schema:
            type: string
          required: true
          description: The template ID.
      responses:
        '200':
          description: A list of all labels for a template
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelsResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostDocumentsTemplatesIDLabels
      tags:
        - Templates
      summary: Add a label to a template
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: templateID
          schema:
            type: string
          required: true
          description: The template ID.
      requestBody:
        description: Label to add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LabelMapping"
      responses:
        '201':
          description: The label added to the template
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/documents/templates/{templateID}/labels/{labelID}':
    delete:
      operationId: DeleteDocumentsTemplatesIDLabelsID
      tags:
        - Templates
      summary: Delete a label from a template
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: templateID
          schema:
            type: string
          required: true
          description: The template ID.
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The label ID.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Template not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /telegrafs:
    get:
      operationId: GetTelegrafs
      tags:
        - Telegrafs
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
          - in: query
            name: orgID
            description: The organization ID the Telegraf config belongs to.
            schema:
              type: string
      responses:
        '200':
          description: A list of Telegraf configs
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Telegrafs"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostTelegrafs
      tags:
        - Telegrafs
      summary: Create a Telegraf config
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
      requestBody:
        description: Telegraf config to create
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TelegrafRequest"
      responses:
        '201':
          description: Telegraf config created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Telegraf"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/telegrafs/{telegrafID}':
    get:
      operationId: GetTelegrafsID
      tags:
        - Telegrafs
      summary: Retrieve a Telegraf config
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: telegrafID
          schema:
            type: string
          required: true
          description: The Telegraf config ID.
        - in: header
          name: Accept
          required: false
          schema:
            type: string
            default: application/toml
            enum:
              - application/toml
              - application/json
              - application/octet-stream
      responses:
        '200':
          description: Telegraf config details
          content:
            application/toml:
              example: "[agent]\ninterval = \"10s\""
              schema:
                type: string
            application/json:
              schema:
                $ref: "#/components/schemas/Telegraf"
            application/octet-stream:
              example: "[agent]\ninterval = \"10s\""
              schema:
                type: string
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    put:
      operationId: PutTelegrafsID
      tags:
        - Telegrafs
      summary: Update a Telegraf config
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: telegrafID
          schema:
            type: string
          required: true
          description: The Telegraf config ID.
      requestBody:
        description: Telegraf config update to apply
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TelegrafRequest"
      responses:
        '200':
          description: An updated Telegraf config
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Telegraf"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteTelegrafsID
      tags:
        - Telegrafs
      summary: Delete a Telegraf config
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: telegrafID
          schema:
            type: string
          required: true
          description: The Telegraf config ID.
      responses:
        '204':
          description: Delete has been accepted
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/telegrafs/{telegrafID}/labels':
    get:
      operationId: GetTelegrafsIDLabels
      tags:
        - Telegrafs
      summary: List all labels for a Telegraf config
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: telegrafID
          schema:
            type: string
          required: true
          description: The Telegraf config ID.
      responses:
        '200':
          description: A list of all labels for a Telegraf config
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelsResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostTelegrafsIDLabels
      tags:
        - Telegrafs
      summary: Add a label to a Telegraf config
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: telegrafID
          schema:
            type: string
          required: true
          description: The Telegraf config ID.
      requestBody:
        description: Label to add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LabelMapping"
      responses:
        '201':
          description: The label added to the Telegraf config
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/telegrafs/{telegrafID}/labels/{labelID}':
    delete:
      operationId: DeleteTelegrafsIDLabelsID
      tags:
        - Telegrafs
      summary: Delete a label from a Telegraf config
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: telegrafID
          schema:
            type: string
          required: true
          description: The Telegraf config ID.
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The label ID.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Telegraf config not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/telegrafs/{telegrafID}/members':
    get:
      operationId: GetTelegrafsIDMembers
      tags:
        - Users
        - Telegrafs
      summary: List all users with member privileges for a Telegraf config
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: telegrafID
          schema:
            type: string
          required: true
          description: The Telegraf config ID.
      responses:
        '200':
          description: A list of Telegraf config members
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceMembers"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostTelegrafsIDMembers
      tags:
        - Users
        - Telegrafs
      summary: Add a member to a Telegraf config
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: telegrafID
          schema:
            type: string
          required: true
          description: The Telegraf config ID.
      requestBody:
        description: User to add as member
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddResourceMemberRequestBody"
      responses:
        '201':
          description: Member added to Telegraf config
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceMember"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/telegrafs/{telegrafID}/members/{userID}':
    delete:
      operationId: DeleteTelegrafsIDMembersID
      tags:
        - Users
        - Telegrafs
      summary: Remove a member from a Telegraf config
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of the member to remove.
        - in: path
          name: telegrafID
          schema:
            type: string
          required: true
          description: The Telegraf config ID.
      responses:
        '204':
          description: Member removed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/telegrafs/{telegrafID}/owners':
    get:
      operationId: GetTelegrafsIDOwners
      tags:
        - Users
        - Telegrafs
      summary: List all owners of a Telegraf config
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: telegrafID
          schema:
            type: string
          required: true
          description: The Telegraf config ID.
      responses:
        '200':
          description: A list of Telegraf config owners
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceOwners"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostTelegrafsIDOwners
      tags:
        - Users
        - Telegrafs
      summary: Add an owner to a Telegraf config
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: telegrafID
          schema:
            type: string
          required: true
          description: The Telegraf config ID.
      requestBody:
        description: User to add as owner
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddResourceMemberRequestBody"
      responses:
        '201':
          description: Telegraf config owner added
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceOwner"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/telegrafs/{telegrafID}/owners/{userID}':
    delete:
      operationId: DeleteTelegrafsIDOwnersID
      tags:
        - Users
        - Telegrafs
      summary: Remove an owner from a Telegraf config
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of the owner to remove.
        - in: path
          name: telegrafID
          schema:
            type: string
          required: true
          description: The Telegraf config ID.
      responses:
        '204':
          description: Owner removed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /scrapers:
    get:
      operationId: GetScrapers
      tags:
        - ScraperTargets
      summary: Get all scraper targets
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
          - in: query
            name: name
            description: Specifies the name of the scraper target.
            schema:
              type: string
          - in: query
            name: id
            description: List of scraper target IDs to return. If both `id` and `owner` are specified, only `id` is used.
            schema:
              type: array
              items:
                type: string
          - in: query
            name: orgID
            description: Specifies the organization ID of the scraper target.
            schema:
              type: string
          - in: query
            name: org
            description: Specifies the organization name of the scraper target.
            schema:
              type: string
      responses:
        '200':
          description: All scraper targets
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ScraperTargetResponses"
    post:
      operationId: PostScrapers
      summary: Create a scraper target
      tags:
        - ScraperTargets
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      requestBody:
        description: Scraper target to create
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ScraperTargetRequest"
      responses:
        '201':
          description: Scraper target created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ScraperTargetResponse"
        default:
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/scrapers/{scraperTargetID}':
    get:
      operationId: GetScrapersID
      tags:
        - ScraperTargets
      summary: Get a scraper target by ID
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: scraperTargetID
          required: true
          schema:
            type: string
          description: The scraper target ID.
      responses:
        '200':
          description: Scraper target updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ScraperTargetResponse"
        default:
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteScrapersID
      tags:
        - ScraperTargets
      summary: Delete a scraper target
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: scraperTargetID
          required: true
          schema:
            type: string
          description: The scraper target ID.
      responses:
        '204':
          description: Scraper target deleted
        default:
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchScrapersID
      summary: Update a scraper target
      tags:
        - ScraperTargets
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: scraperTargetID
          required: true
          schema:
            type: string
          description: The scraper target ID.
      requestBody:
        description: Scraper target update to apply
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ScraperTargetRequest"
      responses:
        '200':
          description: Scraper target updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ScraperTargetResponse"
        default:
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/scrapers/{scraperTargetID}/labels':
    get:
      operationId: GetScrapersIDLabels
      tags:
        - ScraperTargets
      summary: List all labels for a scraper target
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: scraperTargetID
          schema:
            type: string
          required: true
          description: The scraper target ID.
      responses:
        '200':
          description: A list of all labels for a scraper target
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelsResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostScrapersIDLabels
      tags:
        - ScraperTargets
      summary: Add a label to a scraper target
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: scraperTargetID
          schema:
            type: string
          required: true
          description: The scraper target ID.
      requestBody:
        description: Label to add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LabelMapping"
      responses:
        '201':
          description: The newly added label
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/scrapers/{scraperTargetID}/labels/{labelID}':
    delete:
      operationId: DeleteScrapersIDLabelsID
      tags:
        - ScraperTargets
      summary: Delete a label from a scraper target
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: scraperTargetID
          schema:
            type: string
          required: true
          description: The scraper target ID.
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The label ID.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Scraper target not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchScrapersIDLabelsID
      tags:
        - ScraperTargets
      summary: Update a label on a scraper target
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: scraperTargetID
          schema:
            type: string
          required: true
          description: The scraper target ID.
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The label ID.
      requestBody:
        description: Label update to apply
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Label"
      responses:
        '200':
          description: Updated successfully
        '404':
          description: Scraper target not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/scrapers/{scraperTargetID}/members':
    get:
      operationId: GetScrapersIDMembers
      tags:
        - Users
        - ScraperTargets
      summary: List all users with member privileges for a scraper target
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: scraperTargetID
          schema:
            type: string
          required: true
          description: The scraper target ID.
      responses:
        '200':
          description: A list of scraper target members
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceMembers"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostScrapersIDMembers
      tags:
        - Users
        - ScraperTargets
      summary: Add a member to a scraper target
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: scraperTargetID
          schema:
            type: string
          required: true
          description: The scraper target ID.
      requestBody:
        description: User to add as member
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddResourceMemberRequestBody"
      responses:
        '201':
          description: Member added to scraper targets
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceMember"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/scrapers/{scraperTargetID}/members/{userID}':
    delete:
      operationId: DeleteScrapersIDMembersID
      tags:
        - Users
        - ScraperTargets
      summary: Remove a member from a scraper target
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of member to remove.
        - in: path
          name: scraperTargetID
          schema:
            type: string
          required: true
          description: The scraper target ID.
      responses:
        '204':
          description: Member removed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/scrapers/{scraperTargetID}/owners':
    get:
      operationId: GetScrapersIDOwners
      tags:
        - Users
        - ScraperTargets
      summary: List all owners of a scraper target
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: scraperTargetID
          schema:
            type: string
          required: true
          description: The scraper target ID.
      responses:
        '200':
          description: A list of scraper target owners
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceOwners"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostScrapersIDOwners
      tags:
        - Users
        - ScraperTargets
      summary: Add an owner to a scraper target
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: scraperTargetID
          schema:
            type: string
          required: true
          description: The scraper target ID.
      requestBody:
        description: User to add as owner
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddResourceMemberRequestBody"
      responses:
        '201':
          description: Scraper target owner added
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceOwner"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/scrapers/{scraperTargetID}/owners/{userID}':
    delete:
      operationId: DeleteScrapersIDOwnersID
      tags:
        - Users
        - ScraperTargets
      summary: Remove an owner from a scraper target
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of owner to remove.
        - in: path
          name: scraperTargetID
          schema:
            type: string
          required: true
          description: The scraper target ID.
      responses:
        '204':
          description: Owner removed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /variables:
    get:
      operationId: GetVariables
      tags:
        - Variables
      summary: Get all variables
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: query
          name: org
          description: The organization name.
          schema:
            type: string
        - in: query
          name: orgID
          description: The organization ID.
          schema:
            type: string
      responses:
        '200':
          description: All variables for an organization
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Variables"
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostVariables
      summary: Create a variable
      tags:
        - Variables
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      requestBody:
        description: Variable to create
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Variable"
      responses:
        '201':
          description: Variable created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Variable"
        default:
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/variables/{variableID}':
    get:
      operationId: GetVariablesID
      tags:
        - Variables
      summary: Get a variable
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: variableID
          required: true
          schema:
            type: string
          description: The variable ID.
      responses:
        '200':
          description: Variable found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Variable"
        '404':
          description: Variable not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteVariablesID
      tags:
        - Variables
      summary: Delete a variable
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: variableID
          required: true
          schema:
            type: string
          description: The variable ID.
      responses:
        '204':
          description: Variable deleted
        default:
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchVariablesID
      summary: Update a variable
      tags:
        - Variables
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: variableID
          required: true
          schema:
            type: string
          description: The variable ID.
      requestBody:
        description: Variable update to apply
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Variable"
      responses:
        '200':
          description: Variable updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Variable"
        default:
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    put:
      operationId: PutVariablesID
      summary: Replace a variable
      tags:
        - Variables
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: variableID
          required: true
          schema:
            type: string
          description: The variable ID.
      requestBody:
        description: Variable to replace
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Variable"
      responses:
        '200':
          description: Variable updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Variable"
        default:
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/variables/{variableID}/labels':
    get:
      operationId: GetVariablesIDLabels
      tags:
        - Variables
      summary: List all labels for a variable
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: variableID
          schema:
            type: string
          required: true
          description: The variable ID.
      responses:
        '200':
          description: A list of all labels for a variable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelsResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostVariablesIDLabels
      tags:
        - Variables
      summary: Add a label to a variable
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: variableID
          schema:
            type: string
          required: true
          description: The variable ID.
      requestBody:
        description: Label to add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LabelMapping"
      responses:
        '201':
          description: The newly added label
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/variables/{variableID}/labels/{labelID}':
    delete:
      operationId: DeleteVariablesIDLabelsID
      tags:
        - Variables
      summary: Delete a label from a variable
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: variableID
          schema:
            type: string
          required: true
          description: The variable ID.
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The label ID to delete.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Variable not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /write:
    post:
      operationId: PostWrite
      tags:
        - Write
      summary: Write time series data into InfluxDB
      requestBody:
        description: Line protocol body
        required: true
        content:
          text/plain:
            schema:
              type: string
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: header
          name: Content-Encoding
          description: When present, its value indicates to the database that compression is applied to the line-protocol body.
          schema:
            type: string
            description: Specifies that the line protocol in the body is encoded with gzip or not encoded with identity.
            default: identity
            enum:
              - gzip
              - identity
        - in: header
          name: Content-Type
          description: Content-Type is used to indicate the format of the data sent to the server.
          schema:
            type: string
            description: Text/plain specifies the text line protocol; charset is assumed to be utf-8.
            default: text/plain; charset=utf-8
            enum:
              - text/plain
              - text/plain; charset=utf-8
              - application/vnd.influx.arrow
        - in: header
          name: Content-Length
          description: Content-Length is an entity header is indicating the size of the entity-body, in bytes, sent to the database. If the length is greater than the database max body configuration option, a 413 response is sent.
          schema:
            type: integer
            description: The length in decimal number of octets.
        - in: header
          name: Accept
          description: Specifies the return content format.
          schema:
            type: string
            description: The return format for errors.
            default: application/json
            enum:
              - application/json
        - in: query
          name: org
          description: Specifies the destination organization for writes. Takes either the ID or Name interchangeably. If both `orgID` and `org` are specified, `org` takes precedence.
          required: true
          schema:
            type: string
            description: All points within batch are written to this organization.
        - in: query
          name: orgID
          description: Specifies the ID of the destination organization for writes. If both `orgID` and `org` are specified, `org` takes precedence.
          schema:
            type: string
        - in: query
          name: bucket
          description: The destination bucket for writes.
          required: true
          schema:
            type: string
            description: All points within batch are written to this bucket.
        - in: query
          name: precision
          description: The precision for the unix timestamps within the body line-protocol.
          schema:
            $ref: "#/components/schemas/WritePrecision"
      responses:
        '204':
          description: Write data is correctly formatted and accepted for writing to the bucket.
        '400':
          description: Line protocol poorly formed and no points were written.  Response can be used to determine the first malformed line in the body line-protocol. All data in body was rejected and not written.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LineProtocolError"
        '401':
          description: Token does not have sufficient permissions to write to this organization and bucket or the organization and bucket do not exist.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        '403':
          description: No token was sent and they are required.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        '413':
          description: Write has been rejected because the payload is too large. Error message returns max size supported. All data in body was rejected and not written.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LineProtocolLengthError"
        '429':
          description: Token is temporarily over quota. The Retry-After header describes when to try the write again.
          headers:
            Retry-After:
              description: A non-negative decimal integer indicating the seconds to delay after the response is received.
              schema:
                type: integer
                format: int32
        '503':
          description: Server is temporarily unavailable to accept writes.  The Retry-After header describes when to try the write again.
          headers:
            Retry-After:
              description: A non-negative decimal integer indicating the seconds to delay after the response is received.
              schema:
                type: integer
                format: int32
        default:
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /ready:
    servers:
        - url: /
    get:
      operationId: GetReady
      tags:
        - Ready
      summary: Get the readiness of an instance at startup
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      responses:
        '200':
          description: The instance is ready
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Ready"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /health:
    servers:
        - url: /
    get:
      operationId: GetHealth
      tags:
        - Health
      summary: Get the health of an instance
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      responses:
        '200':
          description: The instance is healthy
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HealthCheck"
        '503':
          description: The instance is unhealthy
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HealthCheck"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /sources:
    post:
      operationId: PostSources
      tags:
        - Sources
      summary: Creates a source
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
      requestBody:
          description: Source to create
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Source"
      responses:
        '201':
          description: Created Source
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Source"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    get:
      operationId: GetSources
      tags:
        - Sources
      summary: Get all sources
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
          - in: query
            name: org
            description: The organization name.
            schema:
              type: string
      responses:
        '200':
          description: All sources
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Sources"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /sources/{sourceID}:
    delete:
      operationId: DeleteSourcesID
      tags:
        - Sources
      summary: Delete a source
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: sourceID
          schema:
            type: string
          required: true
          description: The source ID.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: View not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchSourcesID
      tags:
        - Sources
      summary: Update a Source
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
          - in: path
            name: sourceID
            schema:
              type: string
            required: true
            description: The source ID.
      requestBody:
          description: Source update
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Source"
      responses:
        '200':
          description: Created Source
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Source"
        '404':
          description: Source not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    get:
      operationId: GetSourcesID
      tags:
        - Sources
      summary: Get a source
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
          - in: path
            name: sourceID
            schema:
              type: string
            required: true
            description: The source ID.
      responses:
        '200':
          description: A source
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Source"
        '404':
          description: Source not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /sources/{sourceID}/health:
    get:
      operationId: GetSourcesIDHealth
      tags:
        - Sources
      summary: Get the health of a source
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
          - in: path
            name: sourceID
            schema:
              type: string
            required: true
            description: The source ID.
      responses:
        '200':
          description: The source is healthy
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HealthCheck"
        '503':
          description: The source is not healthy
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HealthCheck"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /sources/{sourceID}/buckets:
    get:
      operationId: GetSourcesIDBuckets
      tags:
        - Sources
        - Buckets
      summary: Get buckets in a source
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
          - in: path
            name: sourceID
            schema:
              type: string
            required: true
            description: The source ID.
          - in: query
            name: org
            description: The organization name.
            schema:
              type: string
      responses:
        '200':
          description: A source
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Buckets"
        '404':
          description: Source not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /labels:
    post:
      operationId: PostLabels
      tags:
        - Labels
      summary: Create a label
      requestBody:
          description: Label to create
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelCreateRequest"
      responses:
        '201':
          description: Added label
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    get:
      operationId: GetLabels
      tags:
        - Labels
      summary: Get all labels
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
          - in: query
            name: orgID
            description: The organization ID.
            schema:
              type: string
      responses:
        '200':
          description: All labels
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelsResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /labels/{labelID}:
    get:
      operationId: GetLabelsID
      tags:
        - Labels
      summary: Get a label
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The ID of the label to update.
      responses:
        '200':
          description: A label
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchLabelsID
      tags:
        - Labels
      summary: Update a label
      requestBody:
          description: Label update
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelUpdate"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The ID of the label to update.
      responses:
        '200':
          description: Updated label
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        '404':
          description: Label not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteLabelsID
      tags:
        - Labels
      summary: Delete a label
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The ID of the label to delete.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Label not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /dashboards:
    post:
      operationId: PostDashboards
      tags:
        - Dashboards
      summary: Create a dashboard
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
      requestBody:
          description: Dashboard to create
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateDashboardRequest"
      responses:
        '201':
          description: Added dashboard
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Dashboard"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    get:
      operationId: GetDashboards
      tags:
        - Dashboards
      summary: Get all dashboards
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
          - in: query
            name: owner
            description: The owner ID.
            schema:
              type: string
          - in: query
            name: sortBy
            description: The column to sort by.
            schema:
              type: string
              enum:
                - "ID"
                - "CreatedAt"
                - "UpdatedAt"
          - in: query
            name: id
            description: List of dashboard IDs to return. If both `id and `owner` are specified, only `id` is used.
            schema:
              type: array
              items:
                type: string
          - in: query
            name: orgID
            description: The organization ID.
            schema:
              type: string
          - in: query
            name: org
            description: The organization name.
            schema:
              type: string
      responses:
        '200':
          description: All dashboards
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Dashboards"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/dashboards/{dashboardID}':
    get:
      operationId: GetDashboardsID
      tags:
        - Dashboards
      summary: Get a Dashboard
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
          - in: path
            name: dashboardID
            schema:
              type: string
            required: true
            description: The ID of the dashboard to update.
      responses:
          '200':
            description: Get a single dashboard
            content:
              application/json:
                schema:
                  $ref: "#/components/schemas/Dashboard"
          '404':
            description: Dashboard not found
            content:
              application/json:
                schema:
                  $ref: "#/components/schemas/Error"
          default:
            description: Unexpected error
            content:
              application/json:
                schema:
                  $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchDashboardsID
      tags:
        - Dashboards
      summary: Update a dashboard
      requestBody:
          description: Patching of a dashboard
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Dashboard"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The ID of the dashboard to update.
      responses:
        '200':
          description: Updated dashboard
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Dashboard"
        '404':
          description: Dashboard not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteDashboardsID
      tags:
        - Dashboards
      summary: Delete a dashboard
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The ID of the dashboard to update.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Dashboard not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/dashboards/{dashboardID}/cells':
    put:
      operationId: PutDashboardsIDCells
      tags:
        - Cells
        - Dashboards
      summary: Replace cells in a dashboard
      description: Replaces all cells in a dashboard. This is used primarily to update the positional information of all cells.
      requestBody:
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Cells"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The ID of the dashboard to update.
      responses:
        '200':
          description: Replaced dashboard cells
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Dashboard"
        '404':
          description: Dashboard not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostDashboardsIDCells
      tags:
        - Cells
        - Dashboards
      summary: Create a dashboard cell
      requestBody:
          description: Cell that will be added
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateCell"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The ID of the dashboard to update.
      responses:
        '201':
          description: Cell successfully added
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Cell"
        '404':
          description: Dashboard not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/dashboards/{dashboardID}/cells/{cellID}':
    patch:
      operationId: PatchDashboardsIDCellsID
      tags:
        - Cells
        - Dashboards
      summary: Update the non-positional information related to a cell
      description: Updates the non positional information related to a cell. Updates to a single cell's positional data could cause grid conflicts.
      requestBody:
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CellUpdate"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The ID of the dashboard to update.
        - in: path
          name: cellID
          schema:
            type: string
          required: true
          description: The ID of the cell to update.
      responses:
        '200':
          description: Updated dashboard cell
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Cell"
        '404':
          description: Cell or dashboard not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteDashboardsIDCellsID
      tags:
        - Cells
        - Dashboards
      summary: Delete a dashboard cell
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The ID of the dashboard to delete.
        - in: path
          name: cellID
          schema:
            type: string
          required: true
          description: The ID of the cell to delete.
      responses:
        '204':
          description: Cell successfully deleted
        '404':
          description: Cell or dashboard not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/dashboards/{dashboardID}/cells/{cellID}/view':
    get:
      operationId: GetDashboardsIDCellsIDView
      tags:
        - Cells
        - Dashboards
        - Views
      summary: Retrieve the view for a cell
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The dashboard ID.
        - in: path
          name: cellID
          schema:
            type: string
          required: true
          description: The cell ID.
      responses:
        '200':
          description: A dashboard cells view
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/View"
        '404':
          description: Cell or dashboard not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchDashboardsIDCellsIDView
      tags:
        - Cells
        - Dashboards
        - Views
      summary: Update the view for a cell
      requestBody:
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/View"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The ID of the dashboard to update.
        - in: path
          name: cellID
          schema:
            type: string
          required: true
          description: The ID of the cell to update.
      responses:
        '200':
          description: Updated cell view
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/View"
        '404':
          description: Cell or dashboard not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/dashboards/{dashboardID}/labels':
    get:
      operationId: GetDashboardsIDLabels
      tags:
        - Dashboards
      summary: list all labels for a dashboard
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The dashboard ID.
      responses:
        '200':
          description: A list of all labels for a dashboard
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelsResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostDashboardsIDLabels
      tags:
        - Dashboards
      summary: Add a label to a dashboard
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The dashboard ID.
      requestBody:
        description: Label to add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LabelMapping"
      responses:
        '201':
          description: The label added to the dashboard
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/dashboards/{dashboardID}/labels/{labelID}':
    delete:
      operationId: DeleteDashboardsIDLabelsID
      tags:
        - Dashboards
      summary: Delete a label from a dashboard
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The dashboard ID.
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The ID of the label to delete.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Dashboard not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/dashboards/{dashboardID}/members':
    get:
      operationId: GetDashboardsIDMembers
      tags:
        - Users
        - Dashboards
      summary: List all dashboard members
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The dashboard ID.
      responses:
        '200':
          description: A list of users who have member privileges for a dashboard
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceMembers"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostDashboardsIDMembers
      tags:
        - Users
        - Dashboards
      summary: Add a member to a dashboard
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The dashboard ID.
      requestBody:
        description: User to add as member
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddResourceMemberRequestBody"
      responses:
        '201':
          description: Added to dashboard members
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceMember"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/dashboards/{dashboardID}/members/{userID}':
    delete:
      operationId: DeleteDashboardsIDMembersID
      tags:
        - Users
        - Dashboards
      summary: Remove a member from a dashboard
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of the member to remove.
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The dashboard ID.
      responses:
        '204':
          description: Member removed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/dashboards/{dashboardID}/owners':
    get:
      operationId: GetDashboardsIDOwners
      tags:
        - Users
        - Dashboards
      summary: List all dashboard owners
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The dashboard ID.
      responses:
        '200':
          description: A list of users who have owner privileges for a dashboard
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceOwners"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostDashboardsIDOwners
      tags:
        - Users
        - Dashboards
      summary: Add an owner to a dashboard
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The dashboard ID.
      requestBody:
        description: User to add as owner
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddResourceMemberRequestBody"
      responses:
        '201':
          description: Added to dashboard owners
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceOwner"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/dashboards/{dashboardID}/owners/{userID}':
    delete:
      operationId: DeleteDashboardsIDOwnersID
      tags:
        - Users
        - Dashboards
      summary: Remove an owner from a dashboard
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of the owner to remove.
        - in: path
          name: dashboardID
          schema:
            type: string
          required: true
          description: The dashboard ID.
      responses:
        '204':
          description: Owner removed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/dashboards/{dashboardID}/logs':
    get:
      operationId: GetDashboardsIDLogs
      tags:
        - Dashboards
        - OperationLogs
      summary: Retrieve operation logs for a dashboard
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - $ref: '#/components/parameters/Offset'
        - $ref: '#/components/parameters/Limit'
        - in: path
          name: dashboardID
          required: true
          description: The dashboard ID.
          schema:
            type: string
      responses:
        '200':
          description: Operation logs for the dashboard
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OperationLogs"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /query/ast:
    post:
      operationId: PostQueryAst
      description: Analyzes flux query and generates a query specification.
      tags:
        - Query
      parameters:
      - $ref: '#/components/parameters/TraceSpan'
      - in: header
        name: Content-Type
        schema:
          type: string
          enum:
            - application/json
      requestBody:
        description: Analyzed Flux query to generate abstract syntax tree.
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LanguageRequest"
      responses:
        '200':
          description: Abstract syntax tree of flux query.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ASTResponse"
        default:
          description: Any response other than 200 is an internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /query/suggestions:
    get:
      operationId: GetQuerySuggestions
      tags:
        - Query
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      responses:
        '200':
          description: Suggestions for next functions in call chain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FluxSuggestions"
        default:
          description: Any response other than 200 is an internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/query/suggestions/{name}':
    get:
      operationId: GetQuerySuggestionsName
      tags:
        - Query
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: name
          schema:
            type: string
          required: true
          description: The name of the branching suggestion.
      responses:
        '200':
          description: Suggestions for next functions in call chain
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FluxSuggestion"
        default:
          description: Any response other than 200 is an internal server error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /authorizations:
    get:
      operationId: GetAuthorizations
      tags:
        - Authorizations
      summary: List all authorizations
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: query
          name: userID
          schema:
            type: string
          description: Only show authorizations that belong to a user ID.
        - in: query
          name: user
          schema:
            type: string
          description: Only show authorizations that belong to a user name.
        - in: query
          name: orgID
          schema:
            type: string
          description: Only show authorizations that belong to an organization ID.
        - in: query
          name: org
          schema:
            type: string
          description: Only show authorizations that belong to a organization name.
      responses:
        '200':
          description: A list of authorizations
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Authorizations"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostAuthorizations
      tags:
        - Authorizations
      summary: Create an authorization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      requestBody:
        description: Authorization to create
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Authorization"
      responses:
        '201':
          description: Authorization created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Authorization"
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /authorizations/{authID}:
    get:
      operationId: GetAuthorizationsID
      tags:
        - Authorizations
      summary: Retrieve an authorization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: authID
          schema:
            type: string
          required: true
          description: The ID of the authorization to get.
      responses:
        '200':
          description: Authorization details
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Authorization"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchAuthorizationsID
      tags:
        - Authorizations
      summary: Update an authorization to be active or inactive
      requestBody:
        description: Authorization to update
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AuthorizationUpdateRequest"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: authID
          schema:
            type: string
          required: true
          description: The ID of the authorization to update.
      responses:
        '200':
          description: The active or inactie authorization
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Authorization"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteAuthorizationsID
      tags:
        - Authorizations
      summary: Delete a authorization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: authID
          schema:
            type: string
          required: true
          description: The ID of the authorization to delete.
      responses:
        '204':
          description: Authorization deleted
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /query/analyze:
    post:
      operationId: PostQueryAnalyze
      tags:
        - Query
      summary: Analyze an InfluxQL or Flux query
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: header
          name: Content-Type
          schema:
            type: string
            enum:
              - application/json
      requestBody:
          description: Flux or InfluxQL query to analyze
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Query"
      responses:
          '200':
            description: Query analyze results. Errors will be empty if the query is valid.
            content:
              application/json:
                schema:
                  $ref: "#/components/schemas/AnalyzeQueryResponse"
          default:
            description: Internal server error
            headers:
              X-Influx-Error:
                description: Error string describing the problem
                schema:
                  type: string
              X-Influx-Reference:
                description: Reference code unique to the error type
                schema:
                  type: integer
            content:
              application/json:
                schema:
                  $ref: "#/components/schemas/Error"
  /query:
    post:
      operationId: PostQuery
      tags:
        - Query
      summary: Query InfluxDB
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: header
          name: Accept-Encoding
          description: The Accept-Encoding request HTTP header advertises which content encoding, usually a compression algorithm, the client is able to understand.
          schema:
            type: string
            description: Specifies that the query response in the body should be encoded with gzip or not encoded with identity.
            default: identity
            enum:
              - gzip
              - identity
        - in: header
          name: Content-Type
          schema:
            type: string
            enum:
              - application/json
              - application/vnd.flux
        - in: query
          name: org
          description: Specifies the name of the organization executing the query. Takes either the ID or Name interchangeably. If both `orgID` and `org` are specified, `org` takes precedence.
          schema:
            type: string
        - in: query
          name: orgID
          description: Specifies the ID of the organization executing the query. If both `orgID` and `org` are specified, `org` takes precedence.
          schema:
            type: string
      requestBody:
          description: Flux query or specification to execute
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Query"
            application/vnd.flux:
              schema:
                type: string
      responses:
          '200':
            description: Query results
            headers:
              Content-Encoding:
                description: The Content-Encoding entity header is used to compress the media-type.  When present, its value indicates which encodings were applied to the entity-body
                schema:
                    type: string
                    description: Specifies that the response in the body is encoded with gzip or not encoded with identity.
                    default: identity
                    enum:
                    - gzip
                    - identity
            content:
              text/csv:
                schema:
                  type: string
                  example: >
                    result,table,_start,_stop,_time,region,host,_value
                    mean,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,east,A,15.43
                    mean,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,east,B,59.25
                    mean,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,east,C,52.62
              application/vnd.influx.arrow:
                schema:
                  type: string
                  format: binary
          '429':
            description: Token is temporarily over quota. The Retry-After header describes when to try the read again.
            headers:
              Retry-After:
                description: A non-negative decimal integer indicating the seconds to delay after the response is received.
                schema:
                  type: integer
                  format: int32
          default:
            description: Error processing query
            content:
              application/json:
                schema:
                  $ref: "#/components/schemas/Error"
  /buckets:
    get:
      operationId: GetBuckets
      tags:
        - Buckets
      summary: List all buckets
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
          - $ref: "#/components/parameters/Offset"
          - $ref: "#/components/parameters/Limit"
          - in: query
            name: org
            description: The organization name.
            schema:
              type: string
          - in: query
            name: orgID
            description: The organization ID.
            schema:
              type: string
          - in: query
            name: name
            description: Only returns buckets with a specific name.
            schema:
              type: string
      responses:
        '200':
          description: A list of buckets
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Buckets"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostBuckets
      tags:
        - Buckets
      summary: Create a bucket
      parameters:
          - $ref: '#/components/parameters/TraceSpan'
      requestBody:
        description: Bucket to create
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Bucket"
      responses:
        '201':
          description: Bucket created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Bucket"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/buckets/{bucketID}':
    get:
      operationId: GetBucketsID
      tags:
        - Buckets
      summary: Retrieve a bucket
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: bucketID
          schema:
            type: string
          required: true
          description: The bucket ID.
      responses:
        '200':
          description: Bucket details
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Bucket"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchBucketsID
      tags:
        - Buckets
      summary: Update a bucket
      requestBody:
        description: Bucket update to apply
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Bucket"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: bucketID
          schema:
            type: string
          required: true
          description: The bucket ID.
      responses:
        '200':
          description: An updated bucket
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Bucket"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteBucketsID
      tags:
        - Buckets
      summary: Delete a bucket
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: bucketID
          schema:
            type: string
          required: true
          description: The ID of the bucket to delete.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Bucket not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/buckets/{bucketID}/labels':
    get:
      operationId: GetBucketsIDLabels
      tags:
        - Buckets
      summary: List all labels for a bucket
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: bucketID
          schema:
            type: string
          required: true
          description: The bucket ID.
      responses:
        '200':
          description: A list of all labels for a bucket
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelsResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostBucketsIDLabels
      tags:
        - Buckets
      summary: Add a label to a bucket
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: bucketID
          schema:
            type: string
          required: true
          description: The bucket ID.
      requestBody:
        description: Label to add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LabelMapping"
      responses:
        '201':
          description: The newly added label
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/buckets/{bucketID}/labels/{labelID}':
    delete:
      operationId: DeleteBucketsIDLabelsID
      tags:
        - Buckets
      summary: delete a label from a bucket
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: bucketID
          schema:
            type: string
          required: true
          description: The bucket ID.
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The ID of the label to delete.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Bucket not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/buckets/{bucketID}/members':
    get:
      operationId: GetBucketsIDMembers
      tags:
        - Users
        - Buckets
      summary: List all users with member privileges for a bucket
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: bucketID
          schema:
            type: string
          required: true
          description: The bucket ID.
      responses:
        '200':
          description: A list of bucket members
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceMembers"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostBucketsIDMembers
      tags:
        - Users
        - Buckets
      summary: Add a member to a bucket
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: bucketID
          schema:
            type: string
          required: true
          description: The bucket ID.
      requestBody:
        description: User to add as member
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddResourceMemberRequestBody"
      responses:
        '201':
          description: Member added to bucket
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceMember"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/buckets/{bucketID}/members/{userID}':
    delete:
      operationId: DeleteBucketsIDMembersID
      tags:
        - Users
        - Buckets
      summary: Remove a member from a bucket
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of the member to remove.
        - in: path
          name: bucketID
          schema:
            type: string
          required: true
          description: The bucket ID.
      responses:
        '204':
          description: Member removed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/buckets/{bucketID}/owners':
    get:
      operationId: GetBucketsIDOwners
      tags:
        - Users
        - Buckets
      summary: List all owners of a bucket
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: bucketID
          schema:
            type: string
          required: true
          description: The bucket ID.
      responses:
        '200':
          description: A list of bucket owners
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceOwners"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostBucketsIDOwners
      tags:
        - Users
        - Buckets
      summary: Add an owner to a bucket
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: bucketID
          schema:
            type: string
          required: true
          description: The bucket ID.
      requestBody:
        description: User to add as owner
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddResourceMemberRequestBody"
      responses:
        '201':
          description: Bucket owner added
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceOwner"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/buckets/{bucketID}/owners/{userID}':
    delete:
      operationId: DeleteBucketsIDOwnersID
      tags:
        - Users
        - Buckets
      summary: Remove an owner from a bucket
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of the owner to remove.
        - in: path
          name: bucketID
          schema:
            type: string
          required: true
          description: The bucket ID.
      responses:
        '204':
          description: Owner removed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/buckets/{bucketID}/logs':
    get:
      operationId: GetBucketsIDLogs
      tags:
        - Buckets
        - OperationLogs
      summary: Retrieve operation logs for a bucket
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - $ref: '#/components/parameters/Offset'
        - $ref: '#/components/parameters/Limit'
        - in: path
          name: bucketID
          required: true
          description: The bucket ID.
          schema:
            type: string
      responses:
        '200':
          description: Operation logs for the bucket
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OperationLogs"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /orgs:
    get:
      operationId: GetOrgs
      tags:
        - Organizations
      summary: List all organizations
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: query
          name: org
          schema:
            type: string
          description: Filter organizations to a specific organization name.
        - in: query
          name: orgID
          schema:
            type: string
          description: Filter organizations to a specific organization ID.
      responses:
        '200':
          description: A list of organizations
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Organizations"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostOrgs
      tags:
        - Organizations
      summary: Create an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      requestBody:
        description: Organization to create
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Organization"
      responses:
        '201':
          description: Organization created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Organization"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/orgs/{orgID}':
    get:
      operationId: GetOrgsID
      tags:
        - Organizations
      summary: Retrieve an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The ID of the organization to get.
      responses:
        '200':
          description: Organization details
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Organization"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchOrgsID
      tags:
        - Organizations
      summary: Update an organization
      requestBody:
        description: Organization update to apply
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Organization"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The ID of the organization to get.
      responses:
        '200':
          description: Organization updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Organization"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteOrgsID
      tags:
        - Organizations
      summary: Delete an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The ID of the organization to delete.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Organization not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/orgs/{orgID}/labels':
    get:
      operationId: GetOrgsIDLabels
      tags:
        - Organizations
      summary: List all labels for a organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The organization ID.
      responses:
        '200':
          description: A list of all labels for an organization
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelsResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostOrgsIDLabels
      tags:
        - Organizations
      summary: Add a label to an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The organization ID.
      requestBody:
        description: Label to add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LabelMapping"
      responses:
        '201':
          description: Returns the created label
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/orgs/{orgID}/labels/{labelID}':
    delete:
      operationId: DeleteOrgsIDLabelsID
      tags:
        - Organizations
      summary: Delete a label from an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The organization ID.
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The label ID.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Organization not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/orgs/{orgID}/secrets':
    get:
      operationId: GetOrgsIDSecrets
      tags:
        - Secrets
        - Organizations
      summary: List all secret keys for an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The organization ID.
      responses:
        '200':
          description: A list of all secret keys
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SecretKeysResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchOrgsIDSecrets
      tags:
        - Secrets
        - Organizations
      summary: Update secrets in an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The organization ID.
      requestBody:
        description: Secret key value pairs to update/add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Secrets"
      responses:
        '204':
          description: Keys successfully patched
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/orgs/{orgID}/secrets/delete': # had to make this because swagger wouldn't let me have a request body with a DELETE
    post:
      operationId: PostOrgsIDSecrets
      tags:
        - Secrets
        - Organizations
      summary: Delete secrets from an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The organization ID.
      requestBody:
        description: Secret key to delete
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SecretKeys"
      responses:
        '204':
          description: Keys successfully patched
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/orgs/{orgID}/members':
    get:
      operationId: GetOrgsIDMembers
      tags:
        - Users
        - Organizations
      summary: List all members of an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The organization ID.
      responses:
        '200':
          description: A list of organization members
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceMembers"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostOrgsIDMembers
      tags:
        - Users
        - Organizations
      summary: Add a member to an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The organization ID.
      requestBody:
        description: User to add as member
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddResourceMemberRequestBody"
      responses:
        '201':
          description: Added to organization created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceMember"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/orgs/{orgID}/members/{userID}':
    delete:
      operationId: DeleteOrgsIDMembersID
      tags:
        - Users
        - Organizations
      summary: Remove a member from an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of the member to remove.
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The organization ID.
      responses:
        '204':
          description: Member removed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/orgs/{orgID}/owners':
    get:
      operationId: GetOrgsIDOwners
      tags:
        - Users
        - Organizations
      summary: List all owners of an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The organization ID.
      responses:
        '200':
          description: A list of organization owners
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceOwners"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostOrgsIDOwners
      tags:
        - Users
        - Organizations
      summary: Add an owner to an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The organization ID.
      requestBody:
        description: User to add as owner
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddResourceMemberRequestBody"
      responses:
        '201':
          description: Organization owner added
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceOwner"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/orgs/{orgID}/owners/{userID}':
    delete:
      operationId: DeleteOrgsIDOwnersID
      tags:
        - Users
        - Organizations
      summary: Remove an owner from an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of the owner to remove.
        - in: path
          name: orgID
          schema:
            type: string
          required: true
          description: The organization ID.
      responses:
        '204':
          description: Owner removed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/orgs/{orgID}/logs':
    get:
      operationId: GetOrgsIDLogs
      tags:
        - Organizations
        - OperationLogs
      summary: Retrieve operation logs for an organization
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - $ref: '#/components/parameters/Offset'
        - $ref: '#/components/parameters/Limit'
        - in: path
          name: orgID
          required: true
          description: The organization ID.
          schema:
            type: string
      responses:
        '200':
          description: Operation logs for the organization
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OperationLogs"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /tasks:
    get:
      operationId: GetTasks
      tags:
        - Tasks
      summary: List all tasks
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: query
          name: name
          description: Returns task with a specific name.
          schema:
            type: string
        - in: query
          name: after
          schema:
            type: string
          description: Return tasks after a specified ID.
        - in: query
          name: user
          schema:
            type: string
          description: Filter tasks to a specific user ID.
        - in: query
          name: org
          schema:
            type: string
          description: Filter tasks to a specific organization name.
        - in: query
          name: orgID
          schema:
            type: string
          description: Filter tasks to a specific organization ID.
        - in: query
          name: limit
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 100
          description: The number of tasks to return
      responses:
        '200':
          description: A list of tasks
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Tasks"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostTasks
      tags:
        - Tasks
      summary: Create a new task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      requestBody:
        description: Task to create
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TaskCreateRequest"
      responses:
        '201':
          description: Task created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Task"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/tasks/{taskID}':
    get:
      operationId: GetTasksID
      tags:
        - Tasks
      summary: Retrieve a task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
      responses:
        '200':
          description: Task details
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Task"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchTasksID
      tags:
        - Tasks
      summary: Update a task
      description: Update a task. This will cancel all queued runs.
      requestBody:
        description: Task update to apply
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TaskUpdateRequest"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
      responses:
        '200':
          description: Task updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Task"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteTasksID
      tags:
        - Tasks
      summary: Delete a task
      description: Deletes a task and all associated records
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The ID of the task to delete.
      responses:
        '204':
          description: Task deleted
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/tasks/{taskID}/runs':
    get:
      operationId: GetTasksIDRuns
      tags:
        - Tasks
      summary: List runs for a task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The ID of the task to get runs for.
        - in: query
          name: after
          schema:
            type: string
          description: Returns runs after a specific ID.
        - in: query
          name: limit
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 100
          description: The number of runs to return
        - in: query
          name: afterTime
          schema:
            type: string
            format: date-time
          description: Filter runs to those scheduled after this time, RFC3339
        - in: query
          name: beforeTime
          schema:
            type: string
            format: date-time
          description: Filter runs to those scheduled before this time, RFC3339
      responses:
        '200':
          description: A list of task runs
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Runs"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostTasksIDRuns
      tags:
        - Tasks
      summary: Manually start a task run, overriding the current schedule
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RunManually"
      responses:
        '201':
          description: Run scheduled to start
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Run"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/tasks/{taskID}/runs/{runID}':
    get:
      operationId: GetTasksIDRunsID
      tags:
        - Tasks
      summary: Retrieve a single run for a task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
        - in: path
          name: runID
          schema:
            type: string
          required: true
          description: The run ID.
      responses:
        '200':
          description: The run record
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Run"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteTasksIDRunsID
      tags:
        - Tasks
      summary: Cancel a running task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
        - in: path
          name: runID
          schema:
            type: string
          required: true
          description: The run ID.
      responses:
        '204':
          description: Delete has been accepted
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/tasks/{taskID}/runs/{runID}/retry':
    post:
      operationId: PostTasksIDRunsIDRetry
      tags:
        - Tasks
      summary: Retry a task run
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
        - in: path
          name: runID
          schema:
            type: string
          required: true
          description: The run ID.
      responses:
        '200':
          description: Run that has been queued
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Run"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/tasks/{taskID}/logs':
    get:
      operationId: GetTasksIDLogs
      tags:
        - Tasks
      summary: Retrieve all logs for a task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
      responses:
        '200':
          description: All logs for a task
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Logs"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/tasks/{taskID}/runs/{runID}/logs':
    get:
      operationId: GetTasksIDRunsIDLogs
      tags:
        - Tasks
      summary: Retrieve all logs for a run
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: ID of task to get logs for.
        - in: path
          name: runID
          schema:
            type: string
          required: true
          description: ID of run to get logs for.
      responses:
        '200':
          description: All logs for a run
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Logs"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/tasks/{taskID}/labels':
    get:
      operationId: GetTasksIDLabels
      tags:
        - Tasks
      summary: List all labels for a task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
      responses:
        '200':
          description: A list of all labels for a task
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelsResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostTasksIDLabels
      tags:
        - Tasks
      summary: Add a label to a task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
      requestBody:
        description: Label to add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LabelMapping"
      responses:
        '200':
          description: A list of all labels for a task
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/tasks/{taskID}/labels/{labelID}':
    delete:
      operationId: DeleteTasksIDLabelsID
      tags:
        - Tasks
      summary: Delete a label from a task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The label ID.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Task not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /me:
    get:
      operationId: GetMe
      tags:
        - Users
      summary: Return the current authenticated user
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      responses:
        '200':
          description: Currently authenticated user
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /me/password:
    put:
      operationId: PutMePassword
      tags:
        - Users
      summary: Update a password
      security:
        - BasicAuth: []
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      requestBody:
        description: New password
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PasswordResetBody"
      responses:
        '204':
          description: Password successfully updated
        default:
          description: Unsuccessful authentication
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/tasks/{taskID}/members':
    get:
      operationId: GetTasksIDMembers
      tags:
        - Users
        - Tasks
      summary: List all task members
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
      responses:
        '200':
          description: A list of users who have member privileges for a task
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceMembers"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostTasksIDMembers
      tags:
        - Users
        - Tasks
      summary: Add a member to a task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
      requestBody:
        description: User to add as member
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddResourceMemberRequestBody"
      responses:
        '201':
          description: Added to task members
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceMember"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/tasks/{taskID}/members/{userID}':
    delete:
      operationId: DeleteTasksIDMembersID
      tags:
        - Users
        - Tasks
      summary: Remove a member from a task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of the member to remove.
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
      responses:
        '204':
          description: Member removed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/tasks/{taskID}/owners':
    get:
      operationId: GetTasksIDOwners
      tags:
        - Users
        - Tasks
      summary: List all owners of a task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
      responses:
        '200':
          description: A list of users who have owner privileges for a task
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceOwners"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostTasksIDOwners
      tags:
        - Users
        - Tasks
      summary: Add an owner to a task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
      requestBody:
        description: User to add as owner
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddResourceMemberRequestBody"
      responses:
        '201':
          description: Added to task owners
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResourceOwner"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/tasks/{taskID}/owners/{userID}':
    delete:
      operationId: DeleteTasksIDOwnersID
      tags:
        - Users
        - Tasks
      summary: Remove an owner from a task
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of the owner to remove.
        - in: path
          name: taskID
          schema:
            type: string
          required: true
          description: The task ID.
      responses:
        '204':
          description: Owner removed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /users:
    get:
      operationId: GetUsers
      tags:
        - Users
      summary: List all users
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      responses:
        '200':
          description: A list of users
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Users"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostUsers
      tags:
        - Users
      summary: Create a user
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
      requestBody:
        description: User to create
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/User"
      responses:
        '201':
          description: User created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/users/{userID}':
    get:
      operationId: GetUsersID
      tags:
        - Users
      summary: Retrieve a user
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The user ID.
      responses:
        '200':
          description: User details
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchUsersID
      tags:
        - Users
      summary: Update a user
      requestBody:
        description: User update to apply
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/User"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of the user to update.
      responses:
        '200':
          description: User updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteUsersID
      tags:
        - Users
      summary: Delete a user
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The ID of the user to delete.
      responses:
        '204':
          description: User deleted
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/users/{userID}/password':
    put:
      operationId: PutUsersIDPassword
      tags:
        - Users
      summary: Update a password
      security:
        - BasicAuth: []
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: userID
          schema:
            type: string
          required: true
          description: The user ID.
      requestBody:
        description: New password
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PasswordResetBody"
      responses:
        '204':
          description: Password successfully updated
        default:
          description: Unsuccessful authentication
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/users/{userID}/logs':
    get:
      operationId: GetUsersIDLogs
      tags:
        - Users
        - OperationLogs
      summary: Retrieve operation logs for a user
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - $ref: '#/components/parameters/Offset'
        - $ref: '#/components/parameters/Limit'
        - in: path
          name: userID
          required: true
          description: The user ID.
          schema:
            type: string
      responses:
        '200':
          description: Operation logs for the user
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OperationLogs"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /checks:
    get:
      operationId: GetChecks
      tags:
          - Checks
      summary: Get all checks
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - $ref: '#/components/parameters/Offset'
        - $ref: '#/components/parameters/Limit'
        - in: query
          name: orgID
          required: true
          description: Only show checks that belong to a specific organization ID.
          schema:
            type: string
      responses:
        '200':
          description: A list of checks
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Checks"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                  $ref: "#/components/schemas/Error"
    post:
      operationId: CreateCheck
      tags:
        - Checks
      summary: Add new check
      requestBody:
        description: Check to create
        required: true
        content:
          application/json:
            schema:
                $ref: "#/components/schemas/Check"
      responses:
        '201':
          description: Check created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Check"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/checks/{checkID}':
    get:
      operationId: GetChecksID
      tags:
        - Checks
      summary: Get a check
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: checkID
          schema:
            type: string
          required: true
          description: The check ID.
      responses:
        '200':
          description: The check requested
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Check"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    put:
      operationId: PutChecksID
      tags:
        - Checks
      summary: Update a check
      requestBody:
        description: Check update to apply
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Check"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: checkID
          schema:
            type: string
          required: true
          description: The check ID.
      responses:
        '200':
          description: An updated check
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Check"
        '404':
          description: The check was not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchChecksID
      tags:
        - Checks
      summary: Update a check
      requestBody:
        description: Check update to apply
        required: true
        content:
          application/json:
            schema:
                $ref: "#/components/schemas/CheckPatch"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: checkID
          schema:
            type: string
          required: true
          description: The check ID.
      responses:
        '200':
          description: An updated check
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Check"
        '404':
          description: The check was not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteChecksID
      tags:
        - Checks
      summary: Delete a check
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: checkID
          schema:
            type: string
          required: true
          description: The check ID.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: The check was not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/checks/{checkID}/labels':
    get:
      operationId: GetChecksIDLabels
      tags:
        - Checks
      summary: List all labels for a check
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: checkID
          schema:
            type: string
          required: true
          description: The check ID.
      responses:
        '200':
          description: A list of all labels for a check
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelsResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostChecksIDLabels
      tags:
        - Checks
      summary: Add a label to a check
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: checkID
          schema:
            type: string
          required: true
          description: The check ID.
      requestBody:
        description: Label to add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LabelMapping"
      responses:
        '201':
          description: The label was added to the check
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/checks/{checkID}/labels/{labelID}':
    delete:
      operationId: DeleteChecksIDLabelsID
      tags:
        - Checks
      summary: Delete label from a check
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: checkID
          schema:
            type: string
          required: true
          description: The check ID.
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The ID of the label to delete.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Check or label not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /notificationRules:
    get:
      operationId: GetNotificationRules
      tags:
          - NotificationRules
      summary: Get all notification rules
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - $ref: '#/components/parameters/Offset'
        - $ref: '#/components/parameters/Limit'
        - in: query
          name: orgID
          required: true
          description: Only show notification rules that belong to a specific organization ID.
          schema:
            type: string
        - in: query
          name: checkID
          description: Only show notifications that belong to the specific check ID.
          schema:
            type: string
        - in: query
          name: tag
          description: Only show notification rules that match a tag pair. Uses `AND` to specify multiple tags.
          schema:
            type: string
            pattern: ^[a-zA-Z0-9_]+:[a-zA-Z0-9_]+$
            example: env:prod
      responses:
        '200':
          description: A list of notification rules
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationRules"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                  $ref: "#/components/schemas/Error"
    post:
      operationId: CreateNotificationRule
      tags:
        - NotificationRules
      summary: Add a notification rule
      requestBody:
        description: Notification rule to create
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NotificationRule"
      responses:
        '201':
          description: Notification rule created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationRule"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/checks/{checkID}/query':
    get:
      operationId: GetChecksIDQuery
      tags:
        - Checks
      summary: Get a check query
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: checkID
          schema:
            type: string
          required: true
          description: The check ID.
      responses:
        '200':
          description: The check query requested
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FluxResponse"
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        '404':
          description: Check not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/notificationRules/{ruleID}':
    get:
      operationId: GetNotificationRulesID
      tags:
        - NotificationRules
      summary: Get a notification rule
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: ruleID
          schema:
            type: string
          required: true
          description: The notification rule ID.
      responses:
        '200':
          description: The notification rule requested
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationRule"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    put:
      operationId: PutNotificationRulesID
      tags:
        - NotificationRules
      summary: Update a notification rule
      requestBody:
        description: Notification rule update to apply
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NotificationRule"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: ruleID
          schema:
            type: string
          required: true
          description: The notification rule ID.
      responses:
        '200':
          description: An updated notification rule
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationRule"
        '404':
          description: The notification rule was not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchNotificationRulesID
      tags:
        - NotificationRules
      summary: Update a notification rule
      requestBody:
        description: Notification rule update to apply
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NotificationRuleUpdate"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: ruleID
          schema:
            type: string
          required: true
          description: The notification rule ID.
      responses:
        '200':
          description: An updated notification rule
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationRule"
        '404':
          description: The notification rule was not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteNotificationRulesID
      tags:
        - NotificationRules
      summary: Delete a notification rule
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: ruleID
          schema:
            type: string
          required: true
          description: The notification rule ID.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: The check was not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/notificationRules/{ruleID}/labels':
    get:
      operationId: GetNotificationRulesIDLabels
      tags:
        - NotificationRules
      summary: List all labels for a notification rule
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: ruleID
          schema:
            type: string
          required: true
          description: The notification rule ID.
      responses:
        '200':
          description: A list of all labels for a notification rule
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelsResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostNotificationRuleIDLabels
      tags:
        - NotificationRules
      summary: Add a label to a notification rule
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: ruleID
          schema:
            type: string
          required: true
          description: The notification rule ID.
      requestBody:
        description: Label to add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LabelMapping"
      responses:
        '201':
          description: The label was added to the notification rule
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/notificationRules/{ruleID}/labels/{labelID}':
    delete:
      operationId: DeleteNotificationRulesIDLabelsID
      tags:
        - NotificationRules
      summary: Delete label from a notification rule
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: ruleID
          schema:
            type: string
          required: true
          description: The notification rule ID.
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The ID of the label to delete.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Rule or label not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/notificationRules/{ruleID}/query':
    get:
      operationId: GetNotificationRulesIDQuery
      tags:
        - Rules
      summary: Get a notification rule query
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: ruleID
          schema:
            type: string
          required: true
          description: The notification rule ID.
      responses:
        '200':
          description: The notification rule query requested
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FluxResponse"
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        '404':
          description: Notification rule not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /notificationEndpoints:
    get:
      operationId: GetNotificationEndpoints
      tags:
          - NotificationEndpoints
      summary: Get all notification endpoints
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - $ref: '#/components/parameters/Offset'
        - $ref: '#/components/parameters/Limit'
        - in: query
          name: orgID
          required: true
          description: Only show notification endpoints that belong to specific organization ID.
          schema:
            type: string
      responses:
        '200':
          description: A list of notification endpoints
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationEndpoints"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                  $ref: "#/components/schemas/Error"
    post:
      operationId: CreateNotificationEndpoint
      tags:
        - NotificationEndpoints
      summary: Add a notification endpoint
      requestBody:
        description: Notification endpoint to create
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NotificationEndpoint"
      responses:
        '201':
          description: Notification endpoint created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationEndpoint"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/notificationEndpoints/{endpointID}':
    get:
      operationId: GetNotificationEndpointsID
      tags:
        - NotificationEndpoints
      summary: Get a notification endpoint
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: endpointID
          schema:
            type: string
          required: true
          description: The notification endpoint ID.
      responses:
        '200':
          description: The notification endpoint requested
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationEndpoint"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    put:
      operationId: PutNotificationEndpointsID
      tags:
        - NotificationEndpoints
      summary: Update a notification endpoint
      requestBody:
        description: A new notification endpoint to replace the existing endpoint with
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NotificationEndpoint"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: endpointID
          schema:
            type: string
          required: true
          description: The notification endpoint ID.
      responses:
        '200':
          description: An updated notification endpoint
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationEndpoint"
        '404':
          description: The notification endpoint was not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      operationId: PatchNotificationEndpointsID
      tags:
        - NotificationEndpoints
      summary: Update a notification endpoint
      requestBody:
        description: Check update to apply
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NotificationEndpointUpdate"
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: endpointID
          schema:
            type: string
          required: true
          description: The notification endpoint ID.
      responses:
        '200':
          description: An updated notification endpoint
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationEndpoint"
        '404':
          description: The notification endpoint was not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      operationId: DeleteNotificationEndpointsID
      tags:
        - NotificationEndpoints
      summary: Delete a notification endpoint
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: endpointID
          schema:
            type: string
          required: true
          description: The notification endpoint ID.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: The endpoint was not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/notificationEndpoints/{endpointID}/labels':
    get:
      operationId: GetNotificationEndpointsIDLabels
      tags:
        - NotificationEndpoints
      summary: List all labels for a notification endpoint
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: endpointID
          schema:
            type: string
          required: true
          description: The notification endpoint ID.
      responses:
        '200':
          description: A list of all labels for a notification endpoint
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelsResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      operationId: PostNotificationEndpointIDLabels
      tags:
        - NotificationEndpoints
      summary: Add a label to a notification endpoint
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: endpointID
          schema:
            type: string
          required: true
          description: The notification endpoint ID.
      requestBody:
        description: Label to add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LabelMapping"
      responses:
        '201':
          description: The label was added to the notification endpoint
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelResponse"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  '/notificationEndpoints/{endpointID}/labels/{labelID}':
    delete:
      operationId: DeleteNotificationEndpointsIDLabelsID
      tags:
        - NotificationEndpoints
      summary: Delete a label from a notification endpoint
      parameters:
        - $ref: '#/components/parameters/TraceSpan'
        - in: path
          name: endpointID
          schema:
            type: string
          required: true
          description: The notification endpoint ID.
        - in: path
          name: labelID
          schema:
            type: string
          required: true
          description: The ID of the label to delete.
      responses:
        '204':
          description: Delete has been accepted
        '404':
          description: Endpoint or label not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
components:
  parameters:
    Offset:
      in: query
      name: offset
      required: false
      schema:
        type: integer
        minimum: 0
    Limit:
      in: query
      name: limit
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
    Descending:
      in: query
      name: descending
      required: false
      schema:
        type: boolean
        default: false
    SortBy:
      in: query
      name: sortBy
      required: false
      schema:
        type: string
    TraceSpan:
      in: header
      name: Zap-Trace-Span
      description: OpenTracing span context
      example:
        trace_id: '1'
        span_id: '1'
        baggage:
          key: value
      required: false
      schema:
        type: string
  schemas:
    LanguageRequest:
      description: Flux query to be analyzed.
      type: object
      required:
        - query
      properties:
        query:
          description: Flux query script to be analyzed
          type: string
    Query:
      description: Query influx with specific return formatting.
      type: object
      required:
        - query
      properties:
        extern:
          $ref: "#/components/schemas/File"
        query:
          description: Query script to execute.
          type: string
        type:
          description: The type of query.
          type: string
          default: flux
          enum:
            - flux
            - influxql
        db:
          description: Required for `influxql` type queries.
          type: string
        rp:
          description: Required for `influxql` type queries.
          type: string
        cluster:
          description: Required for `influxql` type queries.
          type: string
        dialect:
          $ref: "#/components/schemas/Dialect"
    Package:
      description: Represents a complete package source tree.
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        path:
          description: Package import path
          type: string
        package:
          description: Package name
          type: string
        files:
          description: Package files
          type: array
          items:
            $ref: "#/components/schemas/File"
    File:
      description: Represents a source from a single file
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        name:
          description: The name of the file.
          type: string
        package:
          $ref: "#/components/schemas/PackageClause"
        imports:
          description: A list of package imports
          type: array
          items:
            $ref: "#/components/schemas/ImportDeclaration"
        body:
          description: List of Flux statements
          type: array
          items:
            $ref: "#/components/schemas/Statement"
    PackageClause:
      description: Defines a package identifier
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        name:
          $ref: "#/components/schemas/Identifier"
    ImportDeclaration:
      description: Declares a package import
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        as:
          $ref: "#/components/schemas/Identifier"
        path:
          $ref: "#/components/schemas/StringLiteral"
    Node:
      oneOf:
        - $ref: "#/components/schemas/Expression"
        - $ref: "#/components/schemas/Block"
    Block:
      description: A set of statements
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        body:
          description: Block body
          type: array
          items:
            $ref: "#/components/schemas/Statement"
    Statement:
      oneOf:
        - $ref: "#/components/schemas/BadStatement"
        - $ref: "#/components/schemas/VariableAssignment"
        - $ref: "#/components/schemas/MemberAssignment"
        - $ref: "#/components/schemas/ExpressionStatement"
        - $ref: "#/components/schemas/ReturnStatement"
        - $ref: "#/components/schemas/OptionStatement"
        - $ref: "#/components/schemas/BuiltinStatement"
        - $ref: "#/components/schemas/TestStatement"
    BadStatement:
      description: A placeholder for statements for which no correct statement nodes can be created
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        text:
          description: Raw source text
          type: string
    VariableAssignment:
      description: Represents the declaration of a variable
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        id:
          $ref: "#/components/schemas/Identifier"
        init:
          $ref: "#/components/schemas/Expression"
    MemberAssignment:
      description: Object property assignment
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        member:
          $ref: "#/components/schemas/MemberExpression"
        init:
          $ref: "#/components/schemas/Expression"
    ExpressionStatement:
      description: May consist of an expression that does not return a value and is executed solely for its side-effects
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        expression:
          $ref: "#/components/schemas/Expression"
    ReturnStatement:
      description: Defines an expression to return
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        argument:
          $ref: "#/components/schemas/Expression"
    OptionStatement:
      description: A single variable declaration
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        assignment:
          oneOf:
            - $ref: "#/components/schemas/VariableAssignment"
            - $ref: "#/components/schemas/MemberAssignment"
    BuiltinStatement:
      description: Declares a builtin identifier and its type
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        id:
          $ref: "#/components/schemas/Identifier"
    TestStatement:
      description: Declares a Flux test case
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        assignment:
          $ref: "#/components/schemas/VariableAssignment"
    Expression:
      oneOf:
        - $ref: "#/components/schemas/ArrayExpression"
        - $ref: "#/components/schemas/FunctionExpression"
        - $ref: "#/components/schemas/BinaryExpression"
        - $ref: "#/components/schemas/CallExpression"
        - $ref: "#/components/schemas/ConditionalExpression"
        - $ref: "#/components/schemas/LogicalExpression"
        - $ref: "#/components/schemas/MemberExpression"
        - $ref: "#/components/schemas/IndexExpression"
        - $ref: "#/components/schemas/ObjectExpression"
        - $ref: "#/components/schemas/ParenExpression"
        - $ref: "#/components/schemas/PipeExpression"
        - $ref: "#/components/schemas/UnaryExpression"
        - $ref: "#/components/schemas/BooleanLiteral"
        - $ref: "#/components/schemas/DateTimeLiteral"
        - $ref: "#/components/schemas/DurationLiteral"
        - $ref: "#/components/schemas/FloatLiteral"
        - $ref: "#/components/schemas/IntegerLiteral"
        - $ref: "#/components/schemas/PipeLiteral"
        - $ref: "#/components/schemas/RegexpLiteral"
        - $ref: "#/components/schemas/StringLiteral"
        - $ref: "#/components/schemas/UnsignedIntegerLiteral"
        - $ref: "#/components/schemas/Identifier"
    ArrayExpression:
      description: Used to create and directly specify the elements of an array object
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        elements:
          description: Elements of the array
          type: array
          items:
            $ref: "#/components/schemas/Expression"
    FunctionExpression:
      description: Function expression
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        params:
          description: Function parameters
          type: array
          items:
            $ref: "#/components/schemas/Property"
        body:
          $ref: "#/components/schemas/Node"
    BinaryExpression:
      description:  uses binary operators to act on two operands in an expression
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        operator:
          type: string
        left:
          $ref: "#/components/schemas/Expression"
        right:
          $ref: "#/components/schemas/Expression"
    CallExpression:
      description: Represents a function call
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        callee:
          $ref: "#/components/schemas/Expression"
        arguments:
          description: Function arguments
          type: array
          items:
            $ref: "#/components/schemas/Expression"
    ConditionalExpression:
      description: Selects one of two expressions, `Alternate` or `Consequent`, depending on a third boolean expression, `Test`
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        test:
          $ref: "#/components/schemas/Expression"
        alternate:
          $ref: "#/components/schemas/Expression"
        consequent:
          $ref: "#/components/schemas/Expression"
    LogicalExpression:
      description: Represents the rule conditions that collectively evaluate to either true or false
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        operator:
          type: string
        left:
          $ref: "#/components/schemas/Expression"
        right:
          $ref: "#/components/schemas/Expression"
    MemberExpression:
      description: Represents accessing a property of an object
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        object:
          $ref: "#/components/schemas/Expression"
        property:
          $ref: "#/components/schemas/PropertyKey"
    IndexExpression:
      description: Represents indexing into an array
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        array:
          $ref: "#/components/schemas/Expression"
        index:
          $ref: "#/components/schemas/Expression"
    ObjectExpression:
      description: Allows the declaration of an anonymous object within a declaration
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        properties:
          description: Object properties
          type: array
          items:
            $ref: "#/components/schemas/Property"
    ParenExpression:
      description: Represents an expression wrapped in parenthesis
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        expression:
          $ref: "#/components/schemas/Expression"
    PipeExpression:
      description: Call expression with pipe argument
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        argument:
          $ref: "#/components/schemas/Expression"
        call:
          $ref: "#/components/schemas/CallExpression"
    UnaryExpression:
      description: Uses operators to act on a single operand in an expression
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        operator:
          type: string
        argument:
          $ref: "#/components/schemas/Expression"
    BooleanLiteral:
      description: Represents boolean values
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        value:
          type: boolean
    DateTimeLiteral:
      description: Represents an instant in time with nanosecond precision using the syntax of golang's RFC3339 Nanosecond variant
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        value:
          type: string
    DurationLiteral:
      description: Represents the elapsed time between two instants as an int64 nanosecond count with syntax of golang's time.Duration
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        values:
          description: Duration values
          type: array
          items:
            $ref: "#/components/schemas/Duration"
    FloatLiteral:
      description: Represents floating point numbers according to the double representations defined by the IEEE-754-1985
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        value:
          type: number
    IntegerLiteral:
      description: Represents integer numbers
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        value:
          type: string
    PipeLiteral:
      description: Represents a specialized literal value, indicating the left hand value of a pipe expression
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
    RegexpLiteral:
      description: Expressions begin and end with `/` and are regular expressions with syntax accepted by RE2
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        value:
          type: string
    StringLiteral:
      description: Expressions begin and end with double quote marks
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        value:
          type: string
    UnsignedIntegerLiteral:
      description: Represents integer numbers
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        value:
          type: string
    Duration:
      description: A pair consisting of length of time and the unit of time measured. It is the atomic unit from which all duration literals are composed.
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        magnitude:
          type: integer
        unit:
          type: string
    Property:
      description: The value associated with a key
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        key:
          $ref: "#/components/schemas/PropertyKey"
        value:
          $ref: "#/components/schemas/Expression"
    PropertyKey:
      oneOf:
        - $ref: "#/components/schemas/Identifier"
        - $ref: "#/components/schemas/StringLiteral"
    Identifier:
      description: A valid Flux identifier
      type: object
      properties:
        type:
          $ref: "#/components/schemas/NodeType"
        name:
          type: string
    NodeType:
      description: Type of AST node
      type: string
    Dialect:
          description: Dialect are options to change the default CSV output format; https://www.w3.org/TR/2015/REC-tabular-metadata-20151217/#dialect-descriptions
          type: object
          properties:
            header:
              description: If true, the results will contain a header row
              type: boolean
              default: true
            delimiter:
              description: Separator between cells; the default is ,
              type: string
              default: ","
              maxLength: 1
              minLength: 1
            annotations:
              description: Https://www.w3.org/TR/2015/REC-tabular-data-model-20151217/#columns
              type: array
              items:
                type: string
                enum:
                  - "group"
                  - "datatype"
                  - "default"
                uniqueItems: true
            commentPrefix:
              description: Character prefixed to comment strings
              type: string
              default: "#"
              maxLength: 1
              minLength: 0
            dateTimeFormat:
              description: Format of timestamps
              type: string
              default: "RFC3339"
              enum:
                - RFC3339
                - RFC3339Nano
    Permission:
      required: [action, resource]
      properties:
        action:
          type: string
          enum:
            - read
            - write
        resource:
          type: object
          required: [type]
          properties:
            type:
              type: string
              enum:
                - authorizations
                - buckets
                - dashboards
                - orgs
                - sources
                - tasks
                - telegrafs
                - users
                - variables
                - scrapers
                - secrets
                - labels
                - views
                - documents
                - notificationRules
                - notificationEndpoints
                - checks
            id:
              type: string
              nullable: true
              description: If ID is set that is a permission for a specific resource. if it is not set it is a permission for all resources of that resource type.
            name:
              type: string
              nullable: true
              description: Optional name of the resource if the resource has a name field.
            orgID:
              type: string
              nullable: true
              description: If orgID is set that is a permission for all resources owned my that org. if it is not set it is a permission for all resources of that resource type.
            org:
              type: string
              nullable: true
              description: Optional name of the organization of the organization with orgID.
    AuthorizationUpdateRequest:
      properties:
        status:
          description: If inactive the token is inactive and requests using the token will be rejected.
          default: active
          type: string
          enum:
            - active
            - inactive
        description:
          type: string
          description: A description of the token.
    Authorization:
      required: [orgID, permissions]
      allOf:
        - $ref: "#/components/schemas/AuthorizationUpdateRequest"
        - type: object
          properties:
            orgID:
              type: string
              description: ID of org that authorization is scoped to.
            permissions:
              type: array
              minLength: 1
              description: List of permissions for an auth.  An auth must have at least one Permission.
              items:
                $ref: "#/components/schemas/Permission"
            id:
              readOnly: true
              type: string
            token:
              readOnly: true
              type: string
              description: Passed via the Authorization Header and Token Authentication type.
            userID:
              readOnly: true
              type: string
              description: ID of user that created and owns the token.
            user:
              readOnly: true
              type: string
              description: Name of user that created and owns the token.
            org:
              readOnly: true
              type: string
              description: Name of the org token is scoped to.
            links:
              type: object
              readOnly: true
              example:
                self: "/api/v2/authorizations/1"
                user: "/api/v2/users/12"
              properties:
                self:
                  readOnly: true
                  $ref: "#/components/schemas/Link"
                user:
                  readOnly: true
                  $ref: "#/components/schemas/Link"
    Authorizations:
      type: object
      properties:
        links:
          readOnly: true
          $ref: "#/components/schemas/Links"
        authorizations:
          type: array
          items:
            $ref: "#/components/schemas/Authorization"
    Bucket:
      properties:
        links:
          type: object
          readOnly: true
          example:
            labels: "/api/v2/buckets/1/labels"
            logs: "/api/v2/buckets/1/logs"
            members: "/api/v2/buckets/1/members"
            org: "/api/v2/orgs/2"
            owners: "/api/v2/buckets/1/owners"
            self: "/api/v2/buckets/1"
            write: "/api/v2/write?org=2&bucket=1"
          properties:
            labels:
              description: URL to retrieve labels for this bucket
              $ref: "#/components/schemas/Link"
            logs:
              description: URL to retrieve operation logs for this bucket
              $ref: "#/components/schemas/Link"
            members:
              description: URL to retrieve members that can read this bucket
              $ref: "#/components/schemas/Link"
            org:
              description: URL to retrieve parent organization for this bucket
              $ref: "#/components/schemas/Link"
            owners:
              description: URL to retrieve owners that can read and write to this bucket.
              $ref: "#/components/schemas/Link"
            self:
              description: URL for this bucket
              $ref: "#/components/schemas/Link"
            write:
              description: URL to write line protocol for this bucket
              $ref: "#/components/schemas/Link"
        id:
          readOnly: true
          type: string
        type:
          readOnly: true
          type: string
          default: user
          enum:
            - user
            - system
        name:
          type: string
        description:
          type: string
        orgID:
          type: string
        rp:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
        retentionRules:
          type: array
          description: Rules to expire or retain data.  No rules means data never expires.
          items:
            type: object
            properties:
              type:
                type: string
                default: expire
                enum:
                  - expire
              everySeconds:
                type: integer
                description: Duration in seconds for how long data will be kept in the database.
                example: 86400
                minimum: 1
            required: [type, everySeconds]
        labels:
          $ref: "#/components/schemas/Labels"
      required: [name, retentionRules]
    Buckets:
      type: object
      properties:
        links:
          readOnly: true
          $ref: "#/components/schemas/Links"
        buckets:
          type: array
          items:
            $ref: "#/components/schemas/Bucket"
    Link:
      type: string
      format: uri
      readOnly: true
      description: URI of resource.
    Links:
      type: object
      properties:
        next:
          $ref: "#/components/schemas/Link"
        self:
          $ref: "#/components/schemas/Link"
        prev:
          $ref: "#/components/schemas/Link"
      required: [self]
    Logs:
      type: object
      properties:
        events:
          readOnly: true
          type: array
          items:
            $ref: "#/components/schemas/LogEvent"
    LogEvent:
      type: object
      properties:
        time:
          readOnly: true
          description: Time event occurred, RFC3339Nano.
          type: string
          format: date-time
        message:
          readOnly: true
          description: A description of the event that occurred.
          type: string
          example: Halt and catch fire
    OperationLog:
      type: object
      readOnly: true
      properties:
        description:
          type: string
          description: A description of the event that occurred.
          example: Bucket Created
        time:
          type: string
          description: Time event occurred, RFC3339Nano.
          format: date-time
        userID:
          type: string
          description: ID of the user who operated the event.
        links:
          type: object
          properties:
            user:
              $ref: "#/components/schemas/Link"
    OperationLogs:
      type: object
      properties:
        logs:
          type: array
          items:
            $ref: "#/components/schemas/OperationLog"
        links:
          $ref: "#/components/schemas/Links"
    Organization:
      properties:
        links:
          type: object
          readOnly: true
          example:
            self: "/api/v2/orgs/1"
            members: "/api/v2/orgs/1/members"
            owners: "/api/v2/orgs/1/owners"
            labels: "/api/v2/orgs/1/labels"
            secrets: "/api/v2/orgs/1/secrets"
            buckets: "/api/v2/buckets?org=myorg"
            tasks: "/api/v2/tasks?org=myorg"
            dashboards: "/api/v2/dashboards?org=myorg"
            logs: "/api/v2/orgs/1/logs"
          properties:
            self:
              $ref: "#/components/schemas/Link"
            members:
              $ref: "#/components/schemas/Link"
            owners:
              $ref: "#/components/schemas/Link"
            labels:
              $ref: "#/components/schemas/Link"
            secrets:
              $ref: "#/components/schemas/Link"
            buckets:
              $ref: "#/components/schemas/Link"
            tasks:
              $ref: "#/components/schemas/Link"
            dashboards:
              $ref: "#/components/schemas/Link"
            logs:
              $ref: "#/components/schemas/Link"
        id:
          readOnly: true
          type: string
        name:
          type: string
        description:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
        status:
          description: If inactive the organization is inactive.
          default: active
          type: string
          enum:
            - active
            - inactive
      required: [name]
    Organizations:
      type: object
      properties:
        links:
          $ref: "#/components/schemas/Links"
        orgs:
          type: array
          items:
            $ref: "#/components/schemas/Organization"
    Runs:
      type: object
      properties:
        links:
          readOnly: true
          $ref: "#/components/schemas/Links"
        runs:
          type: array
          items:
            $ref: "#/components/schemas/Run"
    Run:
      properties:
        id:
          readOnly: true
          type: string
        taskID:
          readOnly: true
          type: string
        status:
          readOnly: true
          type: string
          enum:
            - scheduled
            - started
            - failed
            - success
            - canceled
        scheduledFor:
          description: Time used for run's "now" option, RFC3339.
          type: string
          format: date-time
        log:
          description: An array of logs associated with the run.
          type: array
          readOnly: true
          items:
            type: object
            properties:
              runID:
                type: string
              time:
                type: string
              message:
                type: string
        startedAt:
          readOnly: true
          description: Time run started executing, RFC3339Nano.
          type: string
          format: date-time
        finishedAt:
          readOnly: true
          description: Time run finished executing, RFC3339Nano.
          type: string
          format: date-time
        requestedAt:
          readOnly: true
          description: Time run was manually requested, RFC3339Nano.
          type: string
          format: date-time
        links:
          type: object
          readOnly: true
          example:
            self: "/api/v2/tasks/1/runs/1"
            task: "/api/v2/tasks/1"
            retry: "/api/v2/tasks/1/runs/1/retry"
            logs: "/api/v2/tasks/1/runs/1/logs"
          properties:
            self:
              type: string
              format: uri
            task:
              type: string
              format: uri
            logs:
              type: string
              format: uri
            retry:
              type: string
              format: uri
    RunManually:
      properties:
        scheduledFor:
          nullable: true
          description: Time used for run's "now" option, RFC3339.  Default is the server's now time.
          type: string
          format: date-time
    Tasks:
      type: object
      properties:
        links:
          readOnly: true
          $ref: "#/components/schemas/Links"
        tasks:
          type: array
          items:
            $ref: "#/components/schemas/Task"
    Task:
      type: object
      properties:
        id:
          readOnly: true
          type: string
        type:
          description: The type of task, this can be used for filtering tasks on list actions.
          type: string
        orgID:
          description: The ID of the organization that owns this Task.
          type: string
        org:
          description: The name of the organization that owns this Task.
          type: string
        name:
          description: The name of the task.
          type: string
        description:
          description: An optional description of the task.
          type: string
        status:
          $ref: "#/components/schemas/TaskStatusType"
        labels:
          $ref: "#/components/schemas/Labels"
        authorizationID:
          description: The ID of the authorization used when this task communicates with the query engine.
          type: string
        flux:
          description: The Flux script to run for this task.
          type: string
        every:
          description: A simple task repetition schedule; parsed from Flux.
          type: string
        cron:
          description: A task repetition schedule in the form '* * * * * *'; parsed from Flux.
          type: string
        offset:
          description: Duration to delay after the schedule, before executing the task; parsed from flux, if set to zero it will remove this option and use 0 as the default.
          type: string
        latestCompleted:
          description: Timestamp of latest scheduled, completed run, RFC3339.
          type: string
          format: date-time
          readOnly: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
        links:
          type: object
          readOnly: true
          example:
            self: "/api/v2/tasks/1"
            owners: "/api/v2/tasks/1/owners"
            members: "/api/v2/tasks/1/members"
            labels: "/api/v2/tasks/1/labels"
            runs: "/api/v2/tasks/1/runs"
            logs: "/api/v2/tasks/1/logs"
          properties:
            self:
              $ref: "#/components/schemas/Link"
            owners:
              $ref: "#/components/schemas/Link"
            members:
              $ref: "#/components/schemas/Link"
            runs:
              $ref: "#/components/schemas/Link"
            logs:
              $ref: "#/components/schemas/Link"
            labels:
              $ref: "#/components/schemas/Link"
      required: [id, name, orgID, flux]
    TaskStatusType:
      type: string
      enum: [active, inactive]
    User:
      properties:
        id:
          readOnly: true
          type: string
        oauthID:
          type: string
        name:
          type: string
        status:
          description: If inactive the user is inactive.
          default: active
          type: string
          enum:
            - active
            - inactive
        links:
          type: object
          readOnly: true
          example:
            self: "/api/v2/users/1"
            logs: "/api/v2/users/1/logs"
          properties:
            self:
              type: string
              format: uri
            logs:
              type: string
              format: uri
      required: [name]
    Users:
      type: object
      properties:
        links:
          type: object
          properties:
            self:
              type: string
              format: uri
        users:
          type: array
          items:
            $ref: "#/components/schemas/User"
    ResourceMember:
      allOf:
        - $ref: "#/components/schemas/User"
        - type: object
          properties:
            role:
              type: string
              default: member
              enum:
                - member
    ResourceMembers:
      type: object
      properties:
        links:
          type: object
          properties:
            self:
              type: string
              format: uri
        users:
          type: array
          items:
            $ref: "#/components/schemas/ResourceMember"
    ResourceOwner:
      allOf:
        - $ref: "#/components/schemas/User"
        - type: object
          properties:
            role:
              type: string
              default: owner
              enum:
                - owner
    ResourceOwners:
      type: object
      properties:
        links:
          type: object
          properties:
            self:
              type: string
              format: uri
        users:
          type: array
          items:
            $ref: "#/components/schemas/ResourceOwner"
    FluxSuggestions:
      type: object
      properties:
        funcs:
          type: array
          items:
            $ref: "#/components/schemas/FluxSuggestion"
    FluxSuggestion:
      type: object
      properties:
        name:
          type: string
        params:
          type: object
          additionalProperties:
            type: string
    Routes:
      properties:
        authorizations:
          type: string
          format: uri
        buckets:
          type: string
          format: uri
        dashboards:
          type: string
          format: uri
        external:
          type: object
          properties:
            statusFeed:
              type: string
              format: uri
        variables:
          type: string
          format: uri
        me:
          type: string
          format: uri
        orgs:
          type: string
          format: uri
        query:
          type: object
          properties:
            self:
              type: string
              format: uri
            ast:
              type: string
              format: uri
            analyze:
              type: string
              format: uri
            suggestions:
              type: string
              format: uri
        setup:
          type: string
          format: uri
        signin:
          type: string
          format: uri
        signout:
          type: string
          format: uri
        sources:
          type: string
          format: uri
        system:
          type: object
          properties:
            metrics:
              type: string
              format: uri
            debug:
              type: string
              format: uri
            health:
              type: string
              format: uri
        tasks:
          type: string
          format: uri
        telegrafs:
          type: string
          format: uri
        users:
          type: string
          format: uri
        write:
          type: string
          format: uri
    Error:
      properties:
        code:
          description: Code is the machine-readable error code.
          readOnly: true
          type: string
          # This set of enumerations must remain in sync with the constants defined in errors.go
          enum:
            - internal error
            - not found
            - conflict
            - invalid
            - unprocessable entity
            - empty value
            - unavailable
            - forbidden
            - too many requests
            - unauthorized
            - method not allowed
        message:
          readOnly: true
          description: Message is a human-readable message.
          type: string
      required: [code, message]
    LineProtocolError:
      properties:
        code:
          description: Code is the machine-readable error code.
          readOnly: true
          type: string
          enum:
            - internal error
            - not found
            - conflict
            - invalid
            - empty value
            - unavailable
        message:
          readOnly: true
          description: Message is a human-readable message.
          type: string
        op:
          readOnly: true
          description: Op describes the logical code operation during error. Useful for debugging.
          type: string
        err:
          readOnly: true
          description: Err is a stack of errors that occurred during processing of the request. Useful for debugging.
          type: string
        line:
          readOnly: true
          description: First line within sent body containing malformed data
          type: integer
          format: int32
      required: [code, message, op, err]
    LineProtocolLengthError:
      properties:
        code:
          description: Code is the machine-readable error code.
          readOnly: true
          type: string
          enum:
            - invalid
        message:
          readOnly: true
          description: Message is a human-readable message.
          type: string
        maxLength:
          readOnly: true
          description: Max length in bytes for a body of line-protocol.
          type: integer
          format: int32
      required: [code, message, maxLength]
    Field:
      type: object
      properties:
        value:
          description: >-
            value is the value of the field.  Meaning of the value is implied by
            the `type` key
          type: string
        type:
          description: >-
            `type` describes the field type. `func` is a function. `field` is a field reference.
          type: string
          enum:
            - func
            - field
            - integer
            - number
            - regex
            - wildcard
        alias:
          description: >-
            Alias overrides the field name in the returned response.  Applies only
            if type is `func`
          type: string
        args:
          description: Args are the arguments to the function
          type: array
          items:
            $ref: '#/components/schemas/Field'
    BuilderConfig:
      type: object
      properties:
        buckets:
          type: array
          items:
            type: string
        tags:
          type: array
          items:
            $ref: '#/components/schemas/BuilderTagsType'
        functions:
          type: array
          items:
            $ref: '#/components/schemas/BuilderFunctionsType'
        aggregateWindow:
          type: object
          properties:
            period:
              type: string
    BuilderTagsType:
      type: object
      properties:
        key:
          type: string
        values:
          type: array
          items:
            type: string
    BuilderFunctionsType:
      type: object
      properties:
        name:
          type: string
    DashboardQuery:
      type: object
      properties:
        text:
          type: string
          description: The text of the Flux query.
        editMode:
          $ref: '#/components/schemas/QueryEditMode'
        name:
          type: string
        builderConfig:
          $ref: '#/components/schemas/BuilderConfig'
    QueryEditMode:
      type: string
      enum: ['builder', 'advanced']
    Axis:
      type: object
      description: The description of a particular axis for a visualization.
      properties:
        bounds:
          type: array
          minItems: 0
          maxItems: 2
          description: >-
            The extents of an axis in the form [lower, upper]. Clients determine
            whether bounds are to be inclusive or exclusive of their limits
          items:
            type: string
        label:
          description: Label is a description of this Axis
          type: string
        prefix:
          description: Prefix represents a label prefix for formatting axis values.
          type: string
        suffix:
          description: Suffix represents a label suffix for formatting axis values.
          type: string
        base:
          description: Base represents the radix for formatting axis values.
          type: string
          enum: ['', '2', '10']
        scale:
          $ref: '#/components/schemas/AxisScale'
    AxisScale:
      description: 'Scale is the axis formatting scale. Supported: "log", "linear"'
      type: string
      enum: ['log', 'linear']
    DashboardColor:
      type: object
      description: Defines an encoding of data value into color space.
      required: [id, type, hex, name, value]
      properties:
        id:
          description: The unique ID of the view color.
          type: string
        type:
          description: Type is how the color is used.
          type: string
          enum:
            - min
            - max
            - threshold
            - scale
            - text
            - background
        hex:
          description: The hex number of the color
          type: string
          maxLength: 7
          minLength: 7
        name:
          description: The user-facing name of the hex color.
          type: string
        value:
          description: The data value mapped to this color.
          type: number
          format: float
    RenamableField:
      description: Describes a field that can be renamed and made visible or invisible.
      type: object
      properties:
        internalName:
          description: The calculated name of a field.
          readOnly: true
          type: string
        displayName:
          description: The name that a field is renamed to by the user.
          type: string
        visible:
          description: Indicates whether this field should be visible on the table.
          type: boolean
    XYViewProperties:
      type: object
      required:
        - type
        - geom
        - queries
        - shape
        - axes
        - colors
        - legend
        - note
        - showNoteWhenEmpty
      properties:
        type:
          type: string
          enum: [xy]
        queries:
          type: array
          items:
            $ref: "#/components/schemas/DashboardQuery"
        colors:
          description: Colors define color encoding of data into a visualization
          type: array
          items:
            $ref: "#/components/schemas/DashboardColor"
        shape:
          type: string
          enum: ['chronograf-v2']
        note:
          type: string
        showNoteWhenEmpty:
          description: If true, will display note when empty
          type: boolean
        axes:
          $ref: '#/components/schemas/Axes'
        legend:
          $ref: '#/components/schemas/Legend'
        xColumn:
          type: string
        yColumn:
          type: string
        shadeBelow:
          type: boolean
        geom:
          $ref: '#/components/schemas/XYGeom'
    XYGeom:
      type: string
      enum: [line, step, stacked, bar, monotoneX]
    LinePlusSingleStatProperties:
      type: object
      required:
        - type
        - queries
        - shape
        - axes
        - colors
        - legend
        - note
        - showNoteWhenEmpty
        - prefix
        - suffix
        - decimalPlaces
      properties:
        type:
          type: string
          enum: [line-plus-single-stat]
        queries:
          type: array
          items:
            $ref: "#/components/schemas/DashboardQuery"
        colors:
          description: Colors define color encoding of data into a visualization
          type: array
          items:
            $ref: "#/components/schemas/DashboardColor"
        shape:
          type: string
          enum: ['chronograf-v2']
        note:
          type: string
        showNoteWhenEmpty:
          description: If true, will display note when empty
          type: boolean
        axes:
          $ref: '#/components/schemas/Axes'
        legend:
          $ref: '#/components/schemas/Legend'
        xColumn:
          type: string
        yColumn:
          type: string
        shadeBelow:
          type: boolean
        prefix:
          type: string
        suffix:
          type: string
        decimalPlaces:
          $ref: '#/components/schemas/DecimalPlaces'
    ScatterViewProperties:
      type: object
      required:
        - type
        - queries
        - colors
        - shape
        - note
        - showNoteWhenEmpty
        - xColumn
        - yColumn
        - fillColumns
        - symbolColumns
        - xDomain
        - yDomain
        - xAxisLabel
        - yAxisLabel
        - xPrefix
        - yPrefix
        - xSuffix
        - ySuffix
      properties:
        type:
          type: string
          enum: [scatter]
        queries:
          type: array
          items:
            $ref: "#/components/schemas/DashboardQuery"
        colors:
          description: Colors define color encoding of data into a visualization
          type: array
          items:
            type: string
        shape:
          type: string
          enum: ['chronograf-v2']
        note:
          type: string
        showNoteWhenEmpty:
          description: If true, will display note when empty
          type: boolean
        xColumn:
          type: string
        yColumn:
          type: string
        fillColumns:
          type: array
          items:
            type: string
        symbolColumns:
          type: array
          items:
            type: string
        xDomain:
          type: array
          items:
            type: number
          maxItems: 2
        yDomain:
          type: array
          items:
            type: number
          maxItems: 2
        xAxisLabel:
          type: string
        yAxisLabel:
          type: string
        xPrefix:
          type: string
        xSuffix:
          type: string
        yPrefix:
          type: string
        ySuffix:
          type: string
    HeatmapViewProperties:
      type: object
      required:
        - type
        - queries
        - colors
        - shape
        - note
        - showNoteWhenEmpty
        - xColumn
        - yColumn
        - xDomain
        - yDomain
        - xAxisLabel
        - yAxisLabel
        - xPrefix
        - yPrefix
        - xSuffix
        - ySuffix
        - binSize
      properties:
        type:
          type: string
          enum: [heatmap]
        queries:
          type: array
          items:
            $ref: "#/components/schemas/DashboardQuery"
        colors:
          description: Colors define color encoding of data into a visualization
          type: array
          items:
            type: string
        shape:
          type: string
          enum: ['chronograf-v2']
        note:
          type: string
        showNoteWhenEmpty:
          description: If true, will display note when empty
          type: boolean
        xColumn:
          type: string
        yColumn:
          type: string
        xDomain:
          type: array
          items:
            type: number
          maxItems: 2
        yDomain:
          type: array
          items:
            type: number
          maxItems: 2
        xAxisLabel:
          type: string
        yAxisLabel:
          type: string
        xPrefix:
          type: string
        xSuffix:
          type: string
        yPrefix:
          type: string
        ySuffix:
          type: string
        binSize:
          type: number
    SingleStatViewProperties:
      type: object
      required:
        - type
        - queries
        - colors
        - shape
        - note
        - showNoteWhenEmpty
        - prefix
        - suffix
        - legend
        - decimalPlaces
      properties:
        type:
          type: string
          enum: [single-stat]
        queries:
          type: array
          items:
            $ref: "#/components/schemas/DashboardQuery"
        colors:
          description: Colors define color encoding of data into a visualization
          type: array
          items:
            $ref: "#/components/schemas/DashboardColor"
        shape:
          type: string
          enum: ['chronograf-v2']
        note:
          type: string
        showNoteWhenEmpty:
          description: If true, will display note when empty
          type: boolean
        prefix:
          type: string
        suffix:
          type: string
        legend:
          $ref: '#/components/schemas/Legend'
        decimalPlaces:
          $ref: "#/components/schemas/DecimalPlaces"
    HistogramViewProperties:
      type: object
      required:
        - type
        - queries
        - colors
        - shape
        - note
        - showNoteWhenEmpty
        - xColumn
        - fillColumns
        - xDomain
        - xAxisLabel
        - position
        - binCount
      properties:
        type:
          type: string
          enum: [histogram]
        queries:
          type: array
          items:
            $ref: "#/components/schemas/DashboardQuery"
        colors:
          description: Colors define color encoding of data into a visualization
          type: array
          items:
            $ref: "#/components/schemas/DashboardColor"
        shape:
          type: string
          enum: ['chronograf-v2']
        note:
          type: string
        showNoteWhenEmpty:
          description: If true, will display note when empty
          type: boolean
        xColumn:
          type: string
        fillColumns:
          type: array
          items:
            type: string
        xDomain:
          type: array
          items:
            type: number
            format: float
        xAxisLabel:
          type: string
        position:
          type: string
          enum: [overlaid, stacked]
        binCount:
          type: integer
    GaugeViewProperties:
      type: object
      required:
        - type
        - queries
        - colors
        - shape
        - note
        - showNoteWhenEmpty
        - prefix
        - suffix
        - legend
        - decimalPlaces
      properties:
        type:
          type: string
          enum: [gauge]
        queries:
          type: array
          items:
            $ref: "#/components/schemas/DashboardQuery"
        colors:
          description: Colors define color encoding of data into a visualization
          type: array
          items:
            $ref: "#/components/schemas/DashboardColor"
        shape:
          type: string
          enum: ['chronograf-v2']
        note:
          type: string
        showNoteWhenEmpty:
          description: If true, will display note when empty
          type: boolean
        prefix:
          type: string
        suffix:
          type: string
        legend:
          $ref: '#/components/schemas/Legend'
        decimalPlaces:
          $ref: "#/components/schemas/DecimalPlaces"
    TableViewProperties:
      type: object
      required:
        - type
        - queries
        - colors
        - shape
        - note
        - showNoteWhenEmpty
        - tableOptions
        - fieldOptions
        - timeFormat
        - decimalPlaces
      properties:
        type:
          type: string
          enum: [table]
        queries:
          type: array
          items:
            $ref: "#/components/schemas/DashboardQuery"
        colors:
          description: Colors define color encoding of data into a visualization
          type: array
          items:
            $ref: "#/components/schemas/DashboardColor"
        shape:
          type: string
          enum: ['chronograf-v2']
        note:
          type: string
        showNoteWhenEmpty:
          description: If true, will display note when empty
          type: boolean
        tableOptions:
          properties:
            verticalTimeAxis:
              description: >-
                verticalTimeAxis describes the orientation of the table by
                indicating whether the time axis will be displayed vertically
              type: boolean
            sortBy:
              $ref: "#/components/schemas/RenamableField"
            wrapping:
              description: Wrapping describes the text wrapping style to be used in table views
              type: string
              enum:
                - truncate
                - wrap
                - single-line
            fixFirstColumn:
              description: >-
                fixFirstColumn indicates whether the first column of the table
                should be locked
              type: boolean
        fieldOptions:
          description: >-
            fieldOptions represent the fields retrieved by the query with
            customization options
          type: array
          items:
            $ref: '#/components/schemas/RenamableField'
        timeFormat:
          description: >-
            timeFormat describes the display format for time values according to
            moment.js date formatting
          type: string
        decimalPlaces:
          $ref: '#/components/schemas/DecimalPlaces'
    MarkdownViewProperties:
      type: object
      required:
        - type
        - shape
        - note
      properties:
        type:
          type: string
          enum: [markdown]
        shape:
          type: string
          enum: ['chronograf-v2']
        note:
          type: string
    CheckViewProperties:
      type: object
      required:
        - type
        - shape
        - checkID
        - queries
        - colors
      properties:
        type:
          type: string
          enum: [check]
        shape:
          type: string
          enum: ['chronograf-v2']
        checkID:
          type: string
        check:
          $ref: '#/components/schemas/Check'
        queries:
          type: array
          items:
            $ref: "#/components/schemas/DashboardQuery"
        colors:
          description: Colors define color encoding of data into a visualization
          type: array
          items:
            type: string
    Axes:
      description: The viewport for a View's visualizations
      type: object
      required: ['x', 'y']
      properties:
        x:
          $ref: '#/components/schemas/Axis'
        "y": # Quoted to prevent YAML parser from interpreting y as shorthand for true.
          $ref: '#/components/schemas/Axis'
    Legend:
      description: Legend define encoding of data into a view's legend
      type: object
      properties:
        type:
          description: The style of the legend.
          type: string
          enum:
            - static
        orientation:
          description: >-
            orientation is the location of the legend with respect to the view
            graph
          type: string
          enum:
            - top
            - bottom
            - left
            - right
    DecimalPlaces:
      description: Indicates whether decimal places should be enforced, and how many digits it should show.
      type: object
      properties:
        isEnforced:
          description: Indicates whether decimal point setting should be enforced
          type: boolean
        digits:
          description: The number of digits after decimal to display
          type: integer
          format: int32
    ConstantVariableProperties:
      properties:
        type:
          type: string
          enum: [constant]
        values:
          type: array
          items:
            type: string
    MapVariableProperties:
      properties:
        type:
          type: string
          enum: [map]
        values:
          type: object
          additionalProperties:
            type: string
    QueryVariableProperties:
      properties:
        type:
          type: string
          enum: [query]
        values:
          type: object
          properties:
            query:
              type: string
            language:
              type: string
    Variable:
      type: object
      required:
        - name
        - orgID
        - arguments
      properties:
        links:
          type: object
          readOnly: true
          properties:
            self:
              type: string
              format: uri
            org:
              type: string
              format: uri
            labels:
              type: string
              format: uri
        id:
          readOnly: true
          type: string
        orgID:
          type: string
        name:
          type: string
        description:
          type: string
        selected:
          type: array
          items:
            type: string
        labels:
          $ref: "#/components/schemas/Labels"
        arguments:
          type: object
          oneOf:
            - $ref: "#/components/schemas/QueryVariableProperties"
            - $ref: "#/components/schemas/ConstantVariableProperties"
            - $ref: "#/components/schemas/MapVariableProperties"
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Variables:
      type: object
      example:
        variables:
        - id: '1221432'
          name: ":ok:"
          selected:
          - hello
          arguments:
            type: constant
            values:
            - howdy
            - hello
            - hi
            - yo
            - oy
        - id: '1221432'
          name: ":ok:"
          selected:
          - c
          arguments:
            type: map
            values:
              a: fdjaklfdjkldsfjlkjdsa
              b: dfaksjfkljekfajekdljfas
              c: fdjksajfdkfeawfeea
        - id: '1221432'
          name: ":ok:"
          selected:
          - host
          arguments:
            type: query
            query: 'from(bucket: "foo") |> showMeasurements()'
            language: flux
      properties:
        variables:
          type: array
          items:
            $ref: "#/components/schemas/Variable"
    ViewProperties:
      oneOf:
        - $ref: "#/components/schemas/LinePlusSingleStatProperties"
        - $ref: "#/components/schemas/XYViewProperties"
        - $ref: "#/components/schemas/SingleStatViewProperties"
        - $ref: "#/components/schemas/HistogramViewProperties"
        - $ref: "#/components/schemas/GaugeViewProperties"
        - $ref: "#/components/schemas/TableViewProperties"
        - $ref: "#/components/schemas/MarkdownViewProperties"
        - $ref: "#/components/schemas/CheckViewProperties"
        - $ref: "#/components/schemas/ScatterViewProperties"
        - $ref: "#/components/schemas/HeatmapViewProperties"
    View:
      required:
        - name
        - properties
      properties:
        links:
          type: object
          readOnly: true
          properties:
            self:
              type: string
        id:
          readOnly: true
          type: string
        name:
          type: string
        properties:
          $ref: '#/components/schemas/ViewProperties'
    Views:
      type: object
      properties:
        links:
          type: object
          properties:
            self:
              type: string
        views:
          type: array
          items:
            $ref: "#/components/schemas/View"
    CellUpdate:
      type: object
      properties:
        x:
          type: integer
          format: int32
        "y": # Quoted to prevent YAML parser from interpreting y as shorthand for true.
          type: integer
          format: int32
        w:
          type: integer
          format: int32
        h:
          type: integer
          format: int32
    CreateCell:
      type: object
      properties:
        name:
          type: string
        x:
          type: integer
          format: int32
        "y": # Quoted to prevent YAML parser from interpreting y as shorthand for true.
          type: integer
          format: int32
        w:
          type: integer
          format: int32
        h:
          type: integer
          format: int32
        usingView:
          type: string
          description: Makes a copy of the provided view.
    AnalyzeQueryResponse:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              line:
                type: integer
              column:
                type: integer
              character:
                type: integer
              message:
                type: string
    Cell:
      type: object
      properties:
        id:
          type: string
        links:
          type: object
          properties:
            self:
              type: string
            view:
              type: string
        x:
          type: integer
          format: int32
        "y": # Quoted to prevent YAML parser from interpreting y as shorthand for true.
          type: integer
          format: int32
        w:
          type: integer
          format: int32
        h:
          type: integer
          format: int32
        viewID:
          type: string
          description: The reference to a view from the views API.
    Cells:
      type: array
      items:
        $ref: "#/components/schemas/Cell"
    Secrets:
      additionalProperties:
        type: string
      example:
        apikey: abc123xyz
    SecretKeys:
      type: object
      properties:
        secrets:
          type: array
          items:
            type: string
    SecretKeysResponse:
      allOf:
        - $ref: "#/components/schemas/SecretKeys"
        - type: object
          properties:
            links:
              readOnly: true
              type: object
              properties:
                self:
                  type: string
                org:
                  type: string
    CreateDashboardRequest:
      properties:
        orgID:
          type: string
          description: The ID of the organization that owns the dashboard.
        name:
          type: string
          description: The user-facing name of the dashboard.
        description:
          type: string
          description: The user-facing description of the dashboard.
      required:
        - orgID
        - name
    Dashboard:
      type: object
      allOf:
        - $ref: "#/components/schemas/CreateDashboardRequest"
        - type: object
          properties:
            links:
              type: object
              example:
                self: "/api/v2/dashboards/1"
                cells: "/api/v2/dashboards/1/cells"
                owners: "/api/v2/dashboards/1/owners"
                members: "/api/v2/dashboards/1/members"
                logs: "/api/v2/dashboards/1/logs"
                labels: "/api/v2/dashboards/1/labels"
                org: "/api/v2/labels/1"
              properties:
                self:
                  $ref: "#/components/schemas/Link"
                cells:
                  $ref: "#/components/schemas/Link"
                members:
                  $ref: "#/components/schemas/Link"
                owners:
                  $ref: "#/components/schemas/Link"
                logs:
                  $ref: "#/components/schemas/Link"
                labels:
                  $ref: "#/components/schemas/Link"
                org:
                  $ref: "#/components/schemas/Link"
            id:
              readOnly: true
              type: string
            meta:
              type: object
              properties:
                createdAt:
                  type: string
                  format: date-time
                updatedAt:
                  type: string
                  format: date-time
            cells:
                $ref: "#/components/schemas/Cells"
            labels:
              $ref: "#/components/schemas/Labels"
    Dashboards:
      type: object
      properties:
        links:
          $ref: "#/components/schemas/Links"
        dashboards:
          type: array
          items:
            $ref: "#/components/schemas/Dashboard"
    Source:
      type: object
      properties:
        links:
          type: object
          properties:
            self:
              type: string
            query:
              type: string
            health:
              type: string
            buckets:
              type: string
        id:
          type: string
        orgID:
          type: string
        default:
          type: boolean
        name:
          type: string
        type:
          type: string
          enum: ["v1","v2","self"]
        url:
          type: string
          format: uri
        insecureSkipVerify:
          type: boolean
        telegraf:
          type: string
        token:
          type: string
        username:
          type: string
        password:
          type: string
        sharedSecret:
          type: string
        metaUrl:
          type: string
          format: uri
        defaultRP:
          type: string
        languages:
          type: array
          readOnly: true
          items:
            type: string
            enum:
              - flux
              - influxql
    Sources:
      type: object
      properties:
        links:
          type: object
          properties:
            self:
              type: string
              format: uri
        sources:
          type: array
          items:
            $ref: "#/components/schemas/Source"
    ScraperTargetRequest:
      type: object
      properties:
        name:
          type: string
          description: The name of the scraper target.
        type:
          type: string
          description: The type of the metrics to be parsed.
          enum: [prometheus]
        url:
          type: string
          description: The URL of the metrics endpoint.
          example:  http://localhost:9090/metrics
        orgID:
          type: string
          description: The organization ID.
        bucketID:
          type: string
          description: The ID of the bucket to write to.
    ScraperTargetResponse:
      type: object
      allOf:
        - $ref: "#/components/schemas/ScraperTargetRequest"
        - type: object
          properties:
            id:
              type: string
              readOnly: true
            org:
              type: string
              description: The organization name.
            bucket:
              type: string
              description: The bucket name.
            links:
              type: object
              readOnly: true
              example:
                self: "/api/v2/scrapers/1"
                owners: "/api/v2/scrapers/1/owners"
                members: "/api/v2/scrapers/1/members"
                bucket: "/api/v2/buckets/1"
                organization: "/api/v2/orgs/1"
              properties:
                self:
                  $ref: "#/components/schemas/Link"
                members:
                  $ref: "#/components/schemas/Link"
                owners:
                  $ref: "#/components/schemas/Link"
                bucket:
                  $ref: "#/components/schemas/Link"
                organization:
                  $ref: "#/components/schemas/Link"
    ScraperTargetResponses:
      type: object
      properties:
        configurations:
          type: array
          items:
            $ref: "#/components/schemas/ScraperTargetResponse"
    DocumentMeta:
      type: object
      properties:
        name:
          type: string
        type:
          type: string
        templateID:
          type: string
        description:
          type: string
        version:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - name
        - version
    Document:
      type: object
      properties:
        id:
          type: string
          readOnly: true
        meta:
          $ref: "#/components/schemas/DocumentMeta"
        content:
          type: object
        labels:
          $ref: "#/components/schemas/Labels"
        links:
          type: object
          readOnly: true
          example:
            self: "/api/v2/documents/templates/1"
          properties:
            self:
              description: The document URL.
              $ref: "#/components/schemas/Link"
      required:
        - id
        - meta
        - content
    DocumentCreate:
      type: object
      properties:
        meta:
          $ref: "#/components/schemas/DocumentMeta"
        content:
          type: object
        org:
          type: string
          description: The organization Name. Specify either `orgID` or `org`.
        orgID:
          type: string
          description: The organization Name. Specify either `orgID` or `org`.
        labels:
          type: array
          description: An array of label IDs to be added as labels to the document.
          items:
            type: string
      required:
        - meta
        - content
    DocumentUpdate:
      type: object
      properties:
        meta:
          $ref: "#/components/schemas/DocumentMeta"
        content:
          type: object
    DocumentListEntry:
      type: object
      properties:
        id:
          type: string
          readOnly: true
        meta:
          $ref: "#/components/schemas/DocumentMeta"
        labels:
          $ref: "#/components/schemas/Labels"
        links:
          type: object
          readOnly: true
          example:
            self: "/api/v2/documents/templates/1"
          properties:
            self:
              description: The document URL.
              $ref: "#/components/schemas/Link"
      required:
        - id
        - meta
    Documents:
      type: object
      properties:
        documents:
          type: array
          items:
            $ref: "#/components/schemas/DocumentListEntry"
    TelegrafRequest:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        agent:
          type: object
          properties:
            collectionInterval:
              type: integer
        plugins:
          type: array
          items:
            $ref: "#/components/schemas/TelegrafRequestPlugin"
        orgID:
          type: string
    TelegrafRequestPlugin:
        oneOf:
        - $ref: '#/components/schemas/TelegrafPluginInputCpu'
        - $ref: '#/components/schemas/TelegrafPluginInputDisk'
        - $ref: '#/components/schemas/TelegrafPluginInputDiskio'
        - $ref: '#/components/schemas/TelegrafPluginInputDocker'
        - $ref: '#/components/schemas/TelegrafPluginInputFile'
        - $ref: '#/components/schemas/TelegrafPluginInputKubernetes'
        - $ref: '#/components/schemas/TelegrafPluginInputLogParser'
        - $ref: '#/components/schemas/TelegrafPluginInputProcstat'
        - $ref: '#/components/schemas/TelegrafPluginInputPrometheus'
        - $ref: '#/components/schemas/TelegrafPluginInputRedis'
        - $ref: '#/components/schemas/TelegrafPluginInputSyslog'
        - $ref: '#/components/schemas/TelegrafPluginOutputFile'
        - $ref: '#/components/schemas/TelegrafPluginOutputInfluxDBV2'
    TelegrafPluginInputCpu:
      type: object
      required:
        - name
        - type
      properties:
        name:
          type: string
          enum: ["cpu"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
    TelegrafPluginInputDisk:
      type: object
      required:
        - name
        - type
      properties:
        name:
          type: string
          enum: ["disk"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
    TelegrafPluginInputDiskio:
      type:
        object
      required:
        - name
        - type
      properties:
        name:
          type: string
          enum: ["diskio"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
    TelegrafPluginInputDocker:
      type:
        object
      required:
        - name
        - type
        - config
      properties:
        name:
          type: string
          enum: ["docker"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
        config:
          $ref: '#/components/schemas/TelegrafPluginInputDockerConfig'
    TelegrafPluginInputFile:
      type:
        object
      required:
        - name
        - type
        - config
      properties:
        name:
          type: string
          enum: ["file"]
        type:
          type: string
          enum: [input]
        comment:
          type: string
        config:
          $ref: '#/components/schemas/TelegrafPluginInputFileConfig'
    TelegrafPluginInputKernel:
      type:
        object
      required:
        - name
        - type
      properties:
        name:
          type: string
          enum: ["kernel"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
    TelegrafPluginInputKubernetes:
      type:
        object
      required:
        - name
        - type
        - config
      properties:
        name:
          type: string
          enum: ["kubernetes"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
        config:
          $ref: '#/components/schemas/TelegrafPluginInputKubernetesConfig'
    TelegrafPluginInputLogParser:
      type:
        object
      required:
        - name
        - type
        - config
      properties:
        name:
          type: string
          enum: ["logparser"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
        config:
          $ref: '#/components/schemas/TelegrafPluginInputLogParserConfig'
    TelegrafPluginInputMem:
      type:
        object
      required:
        - name
        - type
      properties:
        name:
          type: string
          enum: ["mem"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
    TelegrafPluginInputNetResponse:
      type:
        object
      required:
        - name
        - type
      properties:
        name:
          type: string
          enum: ["net_response"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
    TelegrafPluginInputNet:
      type:
        object
      required:
        - name
        - type
      properties:
        name:
          type: string
          enum: ["net"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
    TelegrafPluginInputNginx:
      type:
        object
      required:
        - name
        - type
      properties:
        name:
          type: string
          enum: ["nginx"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
    TelegrafPluginInputProcesses:
      type:
        object
      required:
        - name
        - type
      properties:
        name:
          type: string
          enum: ["processes"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
    TelegrafPluginInputProcstat:
      type:
        object
      required:
        - name
        - type
        - config
      properties:
        name:
          type: string
          enum: ["procstat"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
        config:
          $ref: '#/components/schemas/TelegrafPluginInputProcstatConfig'
    TelegrafPluginInputPrometheus:
      type:
        object
      required:
        - name
        - type
        - config
      properties:
        name:
          type: string
          enum: ["prometheus"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
        config:
          $ref: '#/components/schemas/TelegrafPluginInputPrometheusConfig'
    TelegrafPluginInputRedis:
      type:
        object
      required:
        - name
        - type
        - config
      properties:
        name:
          type: string
          enum: ["redis"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
        config:
          $ref: '#/components/schemas/TelegrafPluginInputRedisConfig'
    TelegrafPluginInputSyslog:
      type:
        object
      required:
        - name
        - type
        - config
      properties:
        name:
          type: string
          enum: ["syslog"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
        config:
          $ref: '#/components/schemas/TelegrafPluginInputSyslogConfig'
    TelegrafPluginInputSwap:
      type:
        object
      required:
        - name
        - type
      properties:
        name:
          type: string
          enum: ["swap"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
    TelegrafPluginInputSystem:
      type:
        object
      required:
        - name
        - type
      properties:
        name:
          type: string
          enum: ["system"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
    TelegrafPluginInputTail:
      type:
        object
      required:
        - name
        - type
      properties:
        name:
          type: string
          enum: ["tail"]
        type:
          type: string
          enum: ["input"]
        comment:
          type: string
    TelegrafPluginOutputFile:
      type:
        object
      required:
        - name
        - type
        - config
      properties:
        name:
          type: string
          enum: ["file"]
        type:
          type: string
          enum: ["output"]
        comment:
          type: string
        config:
          $ref: '#/components/schemas/TelegrafPluginOutputFileConfig'
    TelegrafPluginOutputInfluxDBV2:
      type:
        object
      required:
        - name
        - type
        - config
      properties:
        name:
          type: string
          enum: ["influxdb_v2"]
        type:
          type: string
          enum: ["output"]
        comment:
          type: string
        config:
          $ref: '#/components/schemas/TelegrafPluginOutputInfluxDBV2Config'
    Telegraf:
      type: object
      allOf:
        - $ref: "#/components/schemas/TelegrafRequest"
        - type: object
          properties:
            id:
              type: string
              readOnly: true
            links:
              type: object
              readOnly: true
              example:
                self: "/api/v2/telegrafs/1"
                lables: "/api/v2/telegrafs/1/labels"
                owners: "/api/v2/telegrafs/1/owners"
                members: "/api/v2/telegrafs/1/members"
              properties:
                self:
                  $ref: "#/components/schemas/Link"
                labels:
                  $ref: "#/components/schemas/Link"
                members:
                  $ref: "#/components/schemas/Link"
                owners:
                  $ref: "#/components/schemas/Link"
            labels:
              readOnly: true
              $ref: "#/components/schemas/Labels"
    Telegrafs:
      type: object
      properties:
        configurations:
          type: array
          items:
            $ref: "#/components/schemas/Telegraf"
    TelegrafPluginInputDockerConfig:
      type: object
      required:
        - endpoint
      properties:
        endpoint:
          type: string
    TelegrafPluginInputFileConfig:
      type: object
      properties:
        files:
          type: array
          items:
            type: string
    TelegrafPluginInputKubernetesConfig:
      type: object
      properties:
        url:
          type: string
          format: uri
    TelegrafPluginInputLogParserConfig:
      type: object
      properties:
        files:
          type: array
          items:
            type: string
    TelegrafPluginInputProcstatConfig:
      type: object
      properties:
        exe:
          type: string
    TelegrafPluginInputPrometheusConfig:
      type: object
      properties:
        urls:
          type: array
          items:
            type: string
            format: uri
    TelegrafPluginInputRedisConfig:
      type: object
      properties:
        servers:
          type: array
          items:
            type: string
        password:
          type: string
    TelegrafPluginInputSyslogConfig:
      type: object
      properties:
        server:
          type: string
    TelegrafPluginOutputFileConfig:
      type: object
      required:
        - files
      properties:
        files:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                enum: [stdout, path]
              path:
                type: string
    TelegrafPluginOutputInfluxDBV2Config:
      type: object
      required:
        - urls
        - token
        - organization
        - bucket
      properties:
        urls:
          type: array
          items:
            type: string
            format: uri
        token:
          type: string
        organization:
          type: string
        bucket:
          type: string
    IsOnboarding:
      type: object
      properties:
        allowed:
          description: True means that the influxdb instance has NOT had initial setup; false means that the database has been setup.
          type: boolean
    OnboardingRequest:
      type: object
      properties:
        username:
          type: string
        password:
          type: string
        org:
          type: string
        bucket:
          type: string
        retentionPeriodHrs:
          type: integer
      required:
        - username
        - password
        - org
        - bucket
    OnboardingResponse:
      type: object
      properties:
        user:
          $ref: "#/components/schemas/User"
        org:
          $ref: "#/components/schemas/Organization"
        bucket:
          $ref: "#/components/schemas/Bucket"
        auth:
          $ref: "#/components/schemas/Authorization"
    PasswordResetBody:
      properties:
        password:
          type: string
      required:
        - password
    AddResourceMemberRequestBody:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
      required:
        - id
    Ready:
      type: object
      properties:
        status:
          type: string
          enum:
            - ready
        started:
          type: string
          format: date-time
          example: "2019-03-13T10:09:33.891196-04:00"
        up:
          type: string
          example: "14m45.911966424s"
    HealthCheck:
      type: object
      required:
        - name
        - status
      properties:
        name:
          type: string
        message:
          type: string
        checks:
          type: array
          items:
            $ref: "#/components/schemas/HealthCheck"
        status:
          type: string
          enum:
            - pass
            - fail
    Labels:
      type: array
      items:
        $ref: "#/components/schemas/Label"
    Label:
      type: object
      properties:
        id:
          readOnly: true
          type: string
        orgID:
          readOnly: true
          type: string
        name:
          type: string
        properties:
          type: object
          additionalProperties:
            type: string
          description: Key/Value pairs associated with this label. Keys can be removed by sending an update with an empty value.
          example: {"color": "ffb3b3", "description": "this is a description"}
    LabelCreateRequest:
      type: object
      required: [orgID]
      properties:
        orgID:
          type: string
        name:
          type: string
        properties:
          type: object
          additionalProperties:
            type: string
          description: Key/Value pairs associated with this label. Keys can be removed by sending an update with an empty value.
          example: {"color": "ffb3b3", "description": "this is a description"}
    LabelUpdate:
      type: object
      properties:
        name:
          type: string
        properties:
          type: object
          description: Key/Value pairs associated with this label. Keys can be removed by sending an update with an empty value.
          example: {"color": "ffb3b3", "description": "this is a description"}
    LabelMapping:
      type: object
      properties:
        labelID:
          type: string
    LabelsResponse:
      type: object
      properties:
        labels:
          $ref: "#/components/schemas/Labels"
        links:
          $ref: "#/components/schemas/Links"
    LabelResponse:
      type: object
      properties:
        label:
          $ref: "#/components/schemas/Label"
        links:
          $ref: "#/components/schemas/Links"
    ASTResponse:
      description: Contains the AST for the supplied Flux query
      type: object
      properties:
        ast:
          $ref: "#/components/schemas/Package"
    WritePrecision:
      type: string
      enum:
        - ms
        - s
        - us
        - ns
    TaskCreateRequest:
      type: object
      properties:
        type:
          description: The type of task, this can be used for filtering tasks on list actions.
          type: string
        orgID:
          description: The ID of the organization that owns this Task.
          type: string
        org:
          description: The name of the organization that owns this Task.
          type: string
        status:
          $ref: "#/components/schemas/TaskStatusType"
        flux:
          description: The Flux script to run for this task.
          type: string
        description:
          description: An optional description of the task.
          type: string
      required: [flux]
    TaskUpdateRequest:
      type: object
      properties:
        status:
          $ref: "#/components/schemas/TaskStatusType"
        flux:
          description: The Flux script to run for this task.
          type: string
        name:
          description: Override the 'name' option in the flux script.
          type: string
        every:
          description: Override the 'every' option in the flux script.
          type: string
        cron:
          description: Override the 'cron' option in the flux script.
          type: string
        offset:
          description: Override the 'offset' option in the flux script.
          type: string
        description:
          description: An optional description of the task.
          type: string
    FluxResponse:
      description: Rendered flux that backs the check or notification.
      properties:
        flux:
          type: string
    CheckPatch:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        status:
          type: string
          enum:
            - active
            - inactive
    Check:
      oneOf:
        - $ref: "#/components/schemas/DeadmanCheck"
        - $ref: "#/components/schemas/ThresholdCheck"
      discriminator:
        propertyName: type
        mapping:
          deadman:  "#/components/schemas/DeadmanCheck"
          threshold: "#/components/schemas/ThresholdCheck"
    Checks:
      properties:
        checks:
          type: array
          items:
            $ref: "#/components/schemas/Check"
        links:
          $ref: "#/components/schemas/Links"
    CheckBase:
      properties:
        id:
          readOnly: true
          type: string
        name:
          type: string
        orgID:
          description: The ID of the organization that owns this check.
          type: string
        ownerID:
          description: The ID of creator used to create this check.
          type: string
          readOnly: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
        query:
          $ref: "#/components/schemas/DashboardQuery"
        status:
          $ref: "#/components/schemas/TaskStatusType"
        every:
          description: Check repetition interval.
          type: string
        offset:
          description: Duration to delay after the schedule, before executing check.
          type: string
        tags:
          description: List of tags to write to each status.
          type: array
          items:
            type: object
            properties:
              key:
                type: string
              value:
                type: string
        description:
          description: An optional description of the check.
          type: string
        statusMessageTemplate:
          description: The template used to generate and write a status message.
          type: string
        labels:
          $ref: "#/components/schemas/Labels"
        links:
          type: object
          readOnly: true
          example:
            self: "/api/v2/checks/1"
            labels: "/api/v2/checks/1/labels"
            members: "/api/v2/checks/1/members"
            owners: "/api/v2/checks/1/owners"
          properties:
            self:
              description: URL for this check
              $ref: "#/components/schemas/Link"
            labels:
              description: URL to retrieve labels for this check
              $ref: "#/components/schemas/Link"
            members:
              description: URL to retrieve members for this check
              $ref: "#/components/schemas/Link"
            owners:
              description: URL to retrieve owners for this check
              $ref: "#/components/schemas/Link"
      required: [name, type, orgID, query]
    ThresholdCheck:
      allOf:
        - $ref: "#/components/schemas/CheckBase"
        - type: object
          properties:
            type:
              type: string
              enum: [threshold]
            thresholds:
              type: array
              items:
                $ref: "#/components/schemas/Threshold"
    Threshold:
      oneOf:
        - $ref: "#/components/schemas/GreaterThreshold"
        - $ref: "#/components/schemas/LesserThreshold"
        - $ref: "#/components/schemas/RangeThreshold"
      discriminator:
        propertyName: type
        mapping:
          greater: "#/components/schemas/GreaterThreshold"
          lesser:  "#/components/schemas/LesserThreshold"
          range: "#/components/schemas/RangeThreshold"
    DeadmanCheck:
      allOf:
        - $ref: "#/components/schemas/CheckBase"
        - type: object
          properties:
            type:
              type: string
              enum: [deadman]
            timeSince:
              description: String duration before deadman triggers.
              type: string
            staleTime:
              description: String duration for time that a series is considered stale and should not trigger deadman.
              type: string
            reportZero:
              description: If only zero values reported since time, trigger an alert
              type: boolean
            level:
              $ref: "#/components/schemas/CheckStatusLevel"
    ThresholdBase:
      properties:
        level:
         $ref: "#/components/schemas/CheckStatusLevel"
        allValues:
          description: If true, only alert if all values meet threshold.
          type: boolean
    GreaterThreshold:
      allOf:
        - $ref: "#/components/schemas/ThresholdBase"
        - type: object
          required: [type, value]
          properties:
            type:
              type: string
              enum: [greater]
            value:
              type: number
              format: float
    LesserThreshold:
      allOf:
        - $ref: "#/components/schemas/ThresholdBase"
        - type: object
          required: [type, value]
          properties:
            type:
              type: string
              enum: [lesser]
            value:
              type: number
              format: float
    RangeThreshold:
      allOf:
        - $ref: "#/components/schemas/ThresholdBase"
        - type: object
          required: [type, min, max, within]
          properties:
            type:
              type: string
              enum: [range]
            min:
              type: number
              format: float
            max:
              type: number
              format: float
            within:
              type: boolean
    CheckStatusLevel:
      description: The state to record if check matches a criteria.
      type: string
      enum: ["UNKNOWN", "OK", "INFO", "CRIT", "WARN"]
    RuleStatusLevel:
      description: The state to record if check matches a criteria.
      type: string
      enum: ["UNKNOWN", "OK", "INFO", "CRIT", "WARN", "ANY"]
    NotificationRuleUpdate:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        status:
          type: string
          enum:
            - active
            - inactive
    NotificationRule:
      oneOf:
        - $ref: "#/components/schemas/SlackNotificationRule"
        - $ref: "#/components/schemas/SMTPNotificationRule"
        - $ref: "#/components/schemas/PagerDutyNotificationRule"
        - $ref: "#/components/schemas/HTTPNotificationRule"
      discriminator:
        propertyName: type
        mapping:
          slack: "#/components/schemas/SlackNotificationRule"
          smtp: "#/components/schemas/SMTPNotificationRule"
          pagerduty: "#/components/schemas/PagerDutyNotificationRule"
          http: "#/components/schemas/HTTPNotificationRule"
    NotificationRules:
      properties:
        notificationRules:
          type: array
          items:
            $ref: "#/components/schemas/NotificationRule"
        links:
          $ref: "#/components/schemas/Links"
    NotificationRuleBase:
      type: object
      required:
        - id
        - orgID
        - status
        - name
        - tagRules
        - statusRules
        - endpointID
      properties:
        id:
          readOnly: true
          type: string
        endpointID:
          type: string
        orgID:
          description: The ID of the organization that owns this notification rule.
          type: string
        ownerID:
          description: The ID of creator used to create this notification rule.
          type: string
          readOnly: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
        status:
          $ref: "#/components/schemas/TaskStatusType"
        name:
          description: Human-readable name describing the notification rule.
          type: string
        sleepUntil:
          type: string
        every:
          description: The notification repetition interval.
          type: string
        offset:
          description: Duration to delay after the schedule, before executing check.
          type: string
        runbookLink:
          type: string
        limitEvery:
          description: Don't notify me more than <limit> times every <limitEvery> seconds. If set, limit cannot be empty.
          type: integer
        limit:
          description: Don't notify me more than <limit> times every <limitEvery> seconds. If set, limitEvery cannot be empty.
          type: integer
        tagRules:
          description: List of tag rules the notification rule attempts to match.
          type: array
          items:
            $ref: "#/components/schemas/TagRule"
        description:
          description: An optional description of the notification rule.
          type: string
        statusRules:
          description: List of status rules the notification rule attempts to match.
          type: array
          minItems: 1
          items:
            $ref: "#/components/schemas/StatusRule"
        labels:
          $ref: "#/components/schemas/Labels"
        links:
          type: object
          readOnly: true
          example:
            self: "/api/v2/notificationRules/1"
            labels: "/api/v2/notificationRules/1/labels"
            members: "/api/v2/notificationRules/1/members"
            owners: "/api/v2/notificationRules/1/owners"
          properties:
            self:
              description: URL for this endpoint.
              $ref: "#/components/schemas/Link"
            labels:
              description: URL to retrieve labels for this notification rule.
              $ref: "#/components/schemas/Link"
            members:
              description: URL to retrieve members for this notification rule.
              $ref: "#/components/schemas/Link"
            owners:
              description: URL to retrieve owners for this notification rule.
              $ref: "#/components/schemas/Link"
    TagRule:
      type: object
      properties:
        key:
          type: string
        value:
          type: string
        operator:
          type: string
          enum: ["equal", "notequal", "equalregex","notequalregex"]
    StatusRule:
      type: object
      properties:
        currentLevel:
          $ref: "#/components/schemas/RuleStatusLevel"
        previousLevel:
          $ref: "#/components/schemas/RuleStatusLevel"
        count:
          type: integer
        period:
          type: string
    HTTPNotificationRuleBase:
      type: object
      required: [type, url]
      properties:
        type:
          type: string
          enum: [http]
        url:
          type: string
    HTTPNotificationRule:
      allOf:
        - $ref: "#/components/schemas/NotificationRuleBase"
        - $ref: "#/components/schemas/HTTPNotificationRuleBase"
    SlackNotificationRuleBase:
      type: object
      required: [type, messageTemplate]
      properties:
        type:
          type: string
          enum: [slack]
        channel:
          type: string
        messageTemplate:
          type: string
    SlackNotificationRule:
      allOf:
        - $ref: "#/components/schemas/NotificationRuleBase"
        - $ref: "#/components/schemas/SlackNotificationRuleBase"
    SMTPNotificationRule:
      allOf:
        - $ref: "#/components/schemas/NotificationRuleBase"
        - $ref: "#/components/schemas/SMTPNotificationRuleBase"
    SMTPNotificationRuleBase:
      type: object
      required: [type, subjectTemplate, to]
      properties:
        type:
          type: string
          enum: [smtp]
        subjectTemplate:
          type: string
        bodyTemplate:
          type: string
        to:
          type: string
    PagerDutyNotificationRule:
      allOf:
        - $ref: "#/components/schemas/NotificationRuleBase"
        - $ref: "#/components/schemas/PagerDutyNotificationRuleBase"
    PagerDutyNotificationRuleBase:
      type: object
      required: [type, messageTemplate]
      properties:
        type:
          type: string
          enum: [pagerduty]
        messageTemplate:
          type: string
    NotificationEndpointUpdate:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        status:
          type: string
          enum:
            - active
            - inactive
    NotificationEndpoint:
      oneOf:
        - $ref: "#/components/schemas/SlackNotificationEndpoint"
        - $ref: "#/components/schemas/PagerDutyNotificationEndpoint"
        - $ref: "#/components/schemas/HTTPNotificationEndpoint"
      discriminator:
        propertyName: type
        mapping:
          slack: "#/components/schemas/SlackNotificationEndpoint"
          pagerduty:  "#/components/schemas/PagerDutyNotificationEndpoint"
          http: "#/components/schemas/HTTPNotificationEndpoint"
    NotificationEndpoints:
      properties:
        notificationEndpoints:
          type: array
          items:
            $ref: "#/components/schemas/NotificationEndpoint"
        links:
          $ref: "#/components/schemas/Links"
    NotificationEndpointBase:
      type: object
      required: [type, name]
      properties:
        id:
          type: string
        orgID:
          type: string
        userID:
          type: string
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
        description:
          description: An optional description of the notification endpoint.
          type: string
        name:
          type: string
        status:
          description: The status of the endpoint.
          default: active
          type: string
          enum: ["active", "inactive"]
        labels:
          $ref: "#/components/schemas/Labels"
        links:
          type: object
          readOnly: true
          example:
            self: "/api/v2/notificationEndpoints/1"
            labels: "/api/v2/notificationEndpoints/1/labels"
            members: "/api/v2/notificationEndpoints/1/members"
            owners: "/api/v2/notificationEndpoints/1/owners"
          properties:
            self:
              description: URL for this endpoint.
              $ref: "#/components/schemas/Link"
            labels:
              description: URL to retrieve labels for this endpoint.
              $ref: "#/components/schemas/Link"
            members:
              description: URL to retrieve members for this endpoint.
              $ref: "#/components/schemas/Link"
            owners:
              description: URL to retrieve owners for this endpoint.
              $ref: "#/components/schemas/Link"
        type:
          $ref: "#/components/schemas/NotificationEndpointType"
    SlackNotificationEndpoint:
      type: object
      allOf:
        - $ref: "#/components/schemas/NotificationEndpointBase"
        - type: object
          properties:
            url:
              description: Specifies the URL of the Slack endpoint. Specify either `URL` or `Token`.
              type: string
            token:
              description: Specifies the API token string. Specify either `URL` or `Token`.
              type: string
    PagerDutyNotificationEndpoint:
      type: object
      allOf:
        - $ref: "#/components/schemas/NotificationEndpointBase"
        - type: object
          required: [clientURL, routingKey]
          properties:
            clientURL:
              type: string
            routingKey:
              type: string
    HTTPNotificationEndpoint:
      type: object
      allOf:
        - $ref: "#/components/schemas/NotificationEndpointBase"
        - type: object
          required: [url, authMethod, method]
          properties:
            url:
              type: string
            username:
              type: string
            password:
              type: string
            token:
              type: string
            method:
              type: string
              enum: ['POST', 'GET', 'PUT']
            authMethod:
              type: string
              enum: ['none', 'basic', 'bearer']
            contentTemplate:
              type: string
            headers:
              type: object
              description: Customized headers.
              additionalProperties:
                type: string
    NotificationEndpointType:
      type: string
      enum: ['slack', 'pagerduty', 'http']
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
