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

# List monitors

> Lists the organization's monitors, newest first by default. `row_count` counts every monitor matching the request, not just the page returned. Requires `monitors:read`.



## OpenAPI

````yaml https://api.select.dev/v2/openapi.json get /monitors
openapi: 3.1.0
info:
  title: SELECT API (v2)
  version: 0.1.0
servers:
  - url: https://api.select.dev/v2
    description: SELECT API v2
security: []
tags:
  - name: metrics
    description: >-
      Query cost and usage data across Snowflake, BigQuery, Databricks and
      Tableau. Each route is `POST /v2/metrics/<model>/query` for one semantic
      model. Every route takes the same body shape and returns the same response
      shape. Each route page gives guidance on when to use the route, and worked
      examples.


      ## Body shape


      | Field | Meaning |

      | --- | --- |

      | `measures` | Aggregates to compute, for example `sum_spend`. |

      | `dimensions` | Fields to group by. Each one is returned on every row. |

      | `filter_expression` | An `and`/`or` tree of filters on dimensions,
      applied before aggregation. |

      | `measure_filters` | Filters on measures, applied after aggregation. |

      | `sort` | The order of the rows: `[{"field": "sum_spend", "direction":
      "desc"}]`. |

      | `limit` | The maximum number of rows. Results are not paginated: `limit`
      cuts the result short, and there is no next page. Omit `limit` to get all
      rows. |

      | `aggregate` | Set `false` to list the rows with no grouping. See
      "Listing rows". |


      v2 accepts only `filter_expression`. The body refuses the legacy `filters`
      list.


      ## Filter on dates


      Filter on the `day` field. Use two filters (both bounds are inclusive):


      ```json

      {"operator": "and", "filters": [
        {"field": "day", "operator": ">=", "value": "2026-08-01"},
        {"field": "day", "operator": "<=", "value": "2026-08-31"}], "limit": 1000}
      ```


      Or use one relative filter: `{"field": "day", "operator": "in range",
      "value": "30D"}`. The values are `{N}D` and `{N}M` (the last N days or
      months, today included), `WTD`, `MTD`, `QTD`, `YTD`, and `LMTD` (the whole
      previous calendar month).


      - Do not filter on `hour`, `week`, `month` or `quarter` to bound a range.
      Filter on `day`, and use the coarser fields as dimensions.

      - A timestamp such as `start_time <= "2026-08-31"` compares to midnight
      and drops most of that day. Use `day`, or `start_time < "2026-09-01"`.

      - A snapshot route (for example `snowflake-storage-summary`) describes the
      current state, and a `day` filter does not bound its size and cost fields.
      On routes that join the snapshot to activity, `day` bounds only the
      activity fields. Each route page says which fields these are.


      ## Which measure is cost


      - `sum_spend` (or `spend`, or `cost` on some routes) is the dollar cost in
      the filtered period. Use it for "how much did we spend".

      - `*_annualized` measures extend the spend of the filtered period to a
      year: a `7D` range gives that week's spend times 365 / 7. They are
      projections, not spend.

      - On snapshot routes, `annual_cost`, `*_monthly_cost` and `*_annual_cost`
      are the current rate extended to a month or a year. A date range does not
      bound them.

      - Do not present any of these run-rates as spend in a period.

      - Databricks routes also give DBUs (for example `sum_task_usage`). DBUs
      are not dollars.


      The `spend` route is the consolidated cost of every platform. Use it for
      totals, trends and breakdowns by service. Use a platform route to explain
      what inside the platform caused the cost.


      ## Text values are case-sensitive


      Filter values must match the stored case. A value in the wrong case
      matches no rows, with no error. For example:


      - On `spend`, `connection_type` is `Snowflake`, `Bigquery` or
      `Databricks`, and `"snowflake"` matches nothing.

      - On `search`, `data-freshness` and `workload-metadata-suggestions`,
      `connection_type` is lowercase: `snowflake`, `bigquery`, `databricks`.

      - On `snowflake-workloads`, most `resource_type` values are lowercase keys
      (`query_pattern`, `dbt`), but the AI types are title case (`Cortex
      Analyst`).


      ## Usage groups


      A usage group set divides cost into named groups, such as departments or
      teams. To group by the groups of one set, name the set in `path`:


      ```json

      {"dimensions": [{"field": "usage_group", "path": ["Department"]}],
      "limit": 1000}

      ```


      `path[0]` is the name of the set, not its ID. A plain `"usage_group"`
      dimension groups by every set at once. The same `{"field": ..., "path":
      [...]}` form reads keys of other semi-structured fields, for example
      workload metadata.


      ## Period over period


      Some routes publish `<measure>_previous_period`, `change_<measure>` and
      `percent_change_<measure>`. These measures need one bounded date range on
      `day`, at the top level of `filter_expression`:


      - Use two bounds on `day`, or one `in range` filter. Do not mix the two
      forms.

      - Do not nest the date filter in a sub-expression, and do not bound the
      range with `month` or `quarter`.

      - The previous period is the same number of days, just before the range.
      For `QTD` on 2026-09-28 (2026-07-01 to 2026-09-28, 90 days), the previous
      period is 2026-04-02 to 2026-06-30, not the previous calendar quarter.


      ## Listing rows


      Set `"aggregate": false` and name only `dimensions` to get the rows as
      they are, for example the individual queries that ran longer than ten
      minutes. If the body also names `measures` or `measure_filters`, the route
      aggregates, with no error. Always set a `limit` on a listing.


      ## Default scoping filters


      Some tables hold more than one kind of row, and the SELECT app filters to
      one kind by default. Each route page names these filters. For example:


      - `snowflake-query-patterns`: `{"field": "resource_type", "operator":
      "in", "values": ["query_pattern"]}`. `bigquery-query-patterns` filters
      `workload_type` to `bigquery_query_pattern`, and
      `databricks-query-patterns` filters `resource_type` to
      `databricks_query_pattern`.

      - `snowflake-dbt`: `{"field": "dbt_node_resource_type", "operator": "=",
      "value": "model"}`. Without it, tests, seeds and snapshots rank with
      models. The same filter applies to `bigquery-dbt-queries` and
      `databricks-dbt-queries`.


      ## Teams


      Send `X-Team-Id` to evaluate a query as a team you belong to. The rows are
      then limited to what the team's roles can reach.


      ## Which route answers which question


      | Question | Route |

      | --- | --- |

      | Total spend, spend trend, spend by platform, service or usage group |
      `spend` |

      | Most expensive Snowflake warehouses | `snowflake-workloads` (or
      `snowflake-warehouses` for metering spend) |

      | Warehouse utilization, idle spend, cluster usage |
      `snowflake-warehouses`, `snowflake-warehouse-clusters` |

      | Query latency, spillage and bytes scanned on a warehouse |
      `snowflake-warehouse-query-performance` |

      | Most expensive recurring queries | `snowflake-query-patterns` |

      | Individual queries | `snowflake-queries` |

      | Cost of dbt models, and of dbt runs | `snowflake-dbt`,
      `snowflake-dbt-invocations` |

      | Cost of tasks, stored procedures, dynamic tables | `snowflake-tasks`,
      `snowflake-stored-procedures`, `snowflake-dynamic-tables` |

      | Cost of BI tools (Looker, Mode, Hex, Sigma, Periscope, Tableau) |
      `snowflake-looker`, `snowflake-mode`, `snowflake-hex`, `snowflake-sigma`,
      `snowflake-periscope`, `tableau-queries` |

      | Cost of Fivetran, and of workloads defined by query tags |
      `snowflake-fivetran`, `snowflake-custom-workloads` |

      | Serverless, automatic clustering and Snowpipe cost |
      `snowflake-serverless`, `snowflake-automatic-clustering`,
      `snowflake-snowpipe` |

      | Storage cost in a period | `snowflake-storage`, `bigquery-storage-spend`
      |

      | Largest or unused tables now | `snowflake-storage-summary`,
      `bigquery-storage-summary` |

      | Which workloads read or write a table | `lineage-workloads`,
      `lineage-tables`, `lineage-edges` |

      | BigQuery cost by project, job or query pattern | `bigquery-projects`,
      `bigquery-jobs`, `bigquery-query-patterns` |

      | BigQuery reservations and commitments | `bigquery-reservation-timeline`,
      `bigquery-commitments`, `bigquery-commitment-scopes` |

      | Databricks cost by job, query, SQL warehouse or cluster |
      `databricks-jobs`, `databricks-queries`, `databricks-sql-warehouses`,
      `databricks-clusters` |

      | Savings from SELECT actions | `action-realized-savings` |

      | How current the data is | `data-freshness` |
paths:
  /monitors:
    get:
      tags:
        - monitors
      summary: List monitors
      description: >-
        Lists the organization's monitors, newest first by default. `row_count`
        counts every monitor matching the request, not just the page returned.
        Requires `monitors:read`.
      operationId: list_monitors_route_monitors_get
      parameters:
        - name: sort_by
          in: query
          required: false
          schema:
            enum:
              - create_time
              - update_time
              - name
              - last_run_finish_time
            type: string
            description: >-
              Field to sort by. Defaults to `create_time`. Under
              `last_run_finish_time`, monitors that have never run sort as the
              oldest.
            default: create_time
            title: Sort By
          description: >-
            Field to sort by. Defaults to `create_time`. Under
            `last_run_finish_time`, monitors that have never run sort as the
            oldest.
        - name: sort_order
          in: query
          required: false
          schema:
            enum:
              - asc
              - desc
            type: string
            description: '`asc` or `desc` (default).'
            default: desc
            title: Sort Order
          description: '`asc` or `desc` (default).'
        - name: page_token
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Opaque cursor from a previous response. Omit on the first call.
            title: Page Token
          description: Opaque cursor from a previous response. Omit on the first call.
        - name: max_results
          in: query
          required: false
          schema:
            type: integer
            default: 50
            title: Max Results
        - name: name__ilike
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Name  Ilike
        - name: name__not_ilike
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Name  Not Ilike
        - name: id__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Id  In
        - name: id__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Id  Not In
        - name: team_id__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Team Id  In
        - name: team_id__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Team Id  Not In
        - name: team_id__isnull
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: 'null'
            title: Team Id  Isnull
        - name: team_name__ilike
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Team Name  Ilike
        - name: team_name__not_ilike
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Team Name  Not Ilike
        - name: budget_id__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Budget Id  In
        - name: budget_id__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Budget Id  Not In
        - name: budget_id__isnull
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: 'null'
            title: Budget Id  Isnull
        - name: snowflake_account_id__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Snowflake Account Id  In
        - name: snowflake_account_id__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Snowflake Account Id  Not In
        - name: snowflake_account_id__isnull
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: 'null'
            title: Snowflake Account Id  Isnull
        - name: data_source__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Data Source  In
        - name: data_source__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Data Source  Not In
        - name: schedule__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Schedule  In
        - name: schedule__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Schedule  Not In
        - name: state__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: State  In
        - name: state__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: State  Not In
        - name: type__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Type  In
        - name: type__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Type  Not In
        - name: display_in_feed
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: 'null'
            title: Display In Feed
        - name: status__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Status  In
        - name: status__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Status  Not In
        - name: last_run_status__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Last Run Status  In
        - name: last_run_status__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Last Run Status  Not In
        - name: last_run_status__isnull
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: 'null'
            title: Last Run Status  Isnull
        - name: latest_run_status__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Latest Run Status  In
        - name: latest_run_status__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Latest Run Status  Not In
        - name: latest_run_trigger_status__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Latest Run Trigger Status  In
        - name: latest_run_trigger_status__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Latest Run Trigger Status  Not In
        - name: created_by__in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Created By  In
        - name: created_by__not_in
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Created By  Not In
        - name: created_by__isnull
          in: query
          required: false
          schema:
            anyOf:
              - type: boolean
              - type: 'null'
            title: Created By  Isnull
        - name: create_time__gt
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                format: date-time
              - type: 'null'
            title: Create Time  Gt
        - name: create_time__lt
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                format: date-time
              - type: 'null'
            title: Create Time  Lt
        - name: create_time__gte
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                format: date-time
              - type: 'null'
            title: Create Time  Gte
        - name: create_time__lte
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                format: date-time
              - type: 'null'
            title: Create Time  Lte
        - name: update_time__gt
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                format: date-time
              - type: 'null'
            title: Update Time  Gt
        - name: update_time__lt
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                format: date-time
              - type: 'null'
            title: Update Time  Lt
        - name: update_time__gte
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                format: date-time
              - type: 'null'
            title: Update Time  Gte
        - name: update_time__lte
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                format: date-time
              - type: 'null'
            title: Update Time  Lte
        - name: x-tenant-id
          in: header
          required: true
          schema:
            type: string
            description: The organization ID the request is scoped to.
            title: X-Tenant-Id
          description: The organization ID the request is scoped to.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListResponse_MonitorV2_'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '408':
          $ref: '#/components/responses/RequestTimeout'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      security:
        - HTTPBearer: []
components:
  schemas:
    ListResponse_MonitorV2_:
      properties:
        items:
          items:
            $ref: '#/components/schemas/MonitorV2'
          type: array
          title: Items
        page_token:
          anyOf:
            - type: string
            - type: 'null'
          title: Page Token
          description: Opaque cursor for the next page; empty/absent on the last page.
        row_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Row Count
          description: >-
            Best-effort total for the filtered result set; may be null when
            expensive.
      type: object
      required:
        - items
      title: ListResponse[MonitorV2]
    MonitorV2:
      properties:
        id:
          type: string
          title: Id
          description: The unique identifier of the monitor.
          readOnly: true
          x-terraform-computed: true
        name:
          type: string
          title: Name
          description: The monitor's name, as it appears in the feed.
        data_source:
          type: string
          enum:
            - account_spend
            - organization_spend
            - warehouse
            - account_usage_group
            - organization_usage_group
            - workload
            - custom
            - insights
            - storage
            - select_org_spend
            - databricks_workload
            - databricks_query
            - bigquery_workload
            - bigquery_query
            - bigquery_projects
            - bigquery_reservation
            - bigquery_storage
            - budget
          title: Data Source
          description: The data the monitor reads. `custom` runs the monitor's own SQL.
        state:
          type: string
          enum:
            - enabled
            - disabled
            - snoozed
          title: State
          description: >-
            Whether the monitor runs. A `disabled` or `snoozed` monitor is not
            scheduled and has no next run.
        schedule:
          type: string
          enum:
            - hourly
            - daily
            - weekly
            - monthly
            - cron
          title: Schedule
          description: How often the monitor runs. `cron` reads `cron` for the schedule.
        cron:
          anyOf:
            - type: string
            - type: 'null'
          title: Cron
          description: >-
            The cron expression the monitor runs on, in UTC. Set only when
            `schedule` is `cron`.
        display_in_feed:
          type: boolean
          title: Display In Feed
          description: Whether the monitor's runs appear in the monitors feed.
        team_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Team Id
          description: >-
            The team that owns this monitor. Null means no team owns it — it
            belongs to the organization, or, for a monitor running its own SQL,
            to one connection.
        budget_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Budget Id
          description: >-
            The budget this monitor watches. Null on a monitor that watches
            something other than a budget.
        snowflake_account_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Snowflake Account Id
          description: >-
            The Snowflake account this monitor reads, as listed by
            `/v2/snowflake-accounts`. Set on a monitor running its own SQL. Null
            on a monitor that reads the organization as a whole.
        type:
          type: string
          enum:
            - digest
            - condition
            - anomaly_prophet
            - anomaly_percentile
            - budget_threshold
          title: Type
          description: >-
            What kind of check the monitor runs. The same value as
            `trigger_config.type`, lifted out so it can be filtered and read
            without parsing the configuration.
          readOnly: true
          x-terraform-computed: true
        trigger_config:
          oneOf:
            - $ref: '#/components/schemas/DigestTrigger'
            - $ref: '#/components/schemas/ConditionTrigger-Output'
            - $ref: '#/components/schemas/AnomalyProphetTrigger-Output'
            - $ref: '#/components/schemas/AnomalyPercentileTrigger-Output'
            - $ref: '#/components/schemas/BudgetThresholdTrigger-Output'
          title: Trigger Config
          description: What the monitor checks, and the condition that makes it fire.
          discriminator:
            propertyName: type
            mapping:
              anomaly_percentile:
                $ref: '#/components/schemas/AnomalyPercentileTrigger-Output'
              anomaly_prophet:
                $ref: '#/components/schemas/AnomalyProphetTrigger-Output'
              budget_threshold:
                $ref: '#/components/schemas/BudgetThresholdTrigger-Output'
              condition:
                $ref: '#/components/schemas/ConditionTrigger-Output'
              digest:
                $ref: '#/components/schemas/DigestTrigger'
        message_config:
          $ref: '#/components/schemas/MonitorMessageConfig-Output'
        partition_config:
          anyOf:
            - $ref: '#/components/schemas/PartitionConfig'
            - type: 'null'
          description: >-
            Splits the monitor into an independent check per distinct value of
            these columns. Null checks the data as a whole.
        notification_frequency_config:
          oneOf:
            - $ref: '#/components/schemas/MonitorNotificationFrequencyOnTrigger'
            - $ref: '#/components/schemas/MonitorNotificationFrequencyOnStatusChange'
            - $ref: >-
                #/components/schemas/MonitorNotificationFrequencyLimitInTimePeriod
          title: Notification Frequency Config
          description: How often a firing monitor is allowed to notify.
          discriminator:
            propertyName: frequency_type
            mapping:
              limit_x_days:
                $ref: >-
                  #/components/schemas/MonitorNotificationFrequencyLimitInTimePeriod
              limit_x_hours:
                $ref: >-
                  #/components/schemas/MonitorNotificationFrequencyLimitInTimePeriod
              limit_x_months:
                $ref: >-
                  #/components/schemas/MonitorNotificationFrequencyLimitInTimePeriod
              limit_x_weeks:
                $ref: >-
                  #/components/schemas/MonitorNotificationFrequencyLimitInTimePeriod
              on_status_change:
                $ref: >-
                  #/components/schemas/MonitorNotificationFrequencyOnStatusChange
              on_trigger:
                $ref: '#/components/schemas/MonitorNotificationFrequencyOnTrigger'
        destination_ids:
          items:
            type: string
          type: array
          title: Destination Ids
          description: >-
            The alert destinations the monitor notifies when it fires, in
            ascending order.
        status:
          type: string
          enum:
            - new
            - success
            - failure
            - triggered
            - skipped
            - snoozed
            - unknown
            - disabled
          title: Status
          description: >-
            What the monitor is doing now. `disabled` or `snoozed` when its
            `state` stops it running; otherwise how its most recent run ended,
            or `new` when it has not run yet.
          readOnly: true
          x-terraform-computed: true
        last_run_status:
          anyOf:
            - type: string
              enum:
                - new
                - success
                - failure
                - triggered
                - skipped
                - snoozed
                - unknown
            - type: 'null'
          title: Last Run Status
          description: >-
            How the monitor's most recent finished run ended, as the monitor
            itself recorded it. Null on a monitor that has never finished a run.
          readOnly: true
          x-terraform-computed: true
        latest_run_status:
          type: string
          enum:
            - new
            - success
            - failure
            - triggered
            - skipped
            - snoozed
            - unknown
          title: Latest Run Status
          description: >-
            How the most recent run in the monitor's run history ended. This
            ignores `state`, so a disabled monitor still reports the run it last
            completed, which `status` would report as `disabled`. A monitor with
            no run history reports `new` while enabled and `unknown` otherwise.
          readOnly: true
          x-terraform-computed: true
        latest_run_error_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Latest Run Error Message
          description: >-
            Why the most recent run failed. Null when that run succeeded, or
            when the monitor has not run.
          readOnly: true
          x-terraform-computed: true
        latest_notification_send_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Latest Notification Send Time
          description: >-
            RFC 3339 UTC timestamp of the last run that actually sent a
            notification. Null if the monitor has never notified.
          readOnly: true
          x-terraform-computed: true
        latest_run_trigger_status:
          anyOf:
            - type: string
              enum:
                - triggered
                - not_triggered
                - skipped
                - snoozed
                - unknown
            - type: 'null'
          title: Latest Run Trigger Status
          description: >-
            Whether the most recent run's trigger fired. Null until the monitor
            has run.
          readOnly: true
          x-terraform-computed: true
        last_run_finish_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Last Run Finish Time
          description: >-
            RFC 3339 UTC timestamp of when the most recent run finished. Null
            until the monitor has run.
          readOnly: true
          x-terraform-computed: true
        next_run_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Next Run Time
          description: >-
            RFC 3339 UTC timestamp of when the monitor's schedule next comes
            due. The run itself starts once the data for that period has
            finished loading, which can be later. Null while the monitor is
            disabled or snoozed.
          readOnly: true
          x-terraform-computed: true
        dismiss_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Dismiss Time
          description: >-
            RFC 3339 UTC timestamp of when the monitor was dismissed from the
            feed. Null while it is not dismissed.
          readOnly: true
          x-terraform-computed: true
        dismissed_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Dismissed By
          description: Who dismissed the monitor from the feed.
          readOnly: true
          x-doit-confidentiality: customer-data
          x-doit-pii: true
          x-terraform-computed: true
        dismissed_partitions:
          anyOf:
            - items:
                $ref: '#/components/schemas/MonitorPartitionDismissal'
              type: array
            - type: 'null'
          title: Dismissed Partitions
          description: >-
            The partitions dismissed from the feed individually. Null on a
            monitor with no partitions dismissed.
          readOnly: true
          x-terraform-computed: true
        created_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Created By
          description: Who created the monitor.
          readOnly: true
          x-doit-confidentiality: customer-data
          x-doit-pii: true
          x-terraform-computed: true
        updated_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Updated By
          description: >-
            Who last changed the monitor. Null if no one has since it was
            created.
          readOnly: true
          x-doit-confidentiality: customer-data
          x-doit-pii: true
          x-terraform-computed: true
        create_time:
          type: string
          title: Create Time
          description: RFC 3339 UTC creation timestamp.
          readOnly: true
          x-terraform-computed: true
        update_time:
          type: string
          title: Update Time
          description: RFC 3339 UTC last-update timestamp.
          readOnly: true
          x-terraform-computed: true
        etag:
          type: string
          title: Etag
          description: Opaque strong ETag.
          readOnly: true
          x-terraform-computed: true
      type: object
      required:
        - id
        - name
        - data_source
        - state
        - schedule
        - display_in_feed
        - type
        - trigger_config
        - message_config
        - notification_frequency_config
        - destination_ids
        - status
        - latest_run_status
        - create_time
        - update_time
        - etag
      title: Monitor
      description: >-
        A scheduled check over the organization's data, and what it reports.


        A monitor runs its `trigger_config` on `schedule`; when the trigger
        fires it

        renders `message_config` and sends it, as often as

        `notification_frequency_config` allows. `partition_config` splits one
        monitor

        into an independent check per partition, each of which triggers and is

        dismissed on its own.
    ProblemDetail:
      additionalProperties: true
      description: >-
        RFC 9457-style error payload, served as ``application/problem+json``.


        ``code`` is the stable, machine-readable identifier — consumers branch
        on it,

        never on ``title``. ``type`` stays ``about:blank``: we keep no per-error

        documentation pages. There is no ``instance``/request-id member (we
        don't run

        access logs). See the flat error-code catalogue in §4 of the standards
        doc.
      properties:
        type:
          default: about:blank
          title: Type
          type: string
        title:
          type: string
          title: Title
        status:
          title: Status
          type: integer
        detail:
          title: Detail
          type: string
        code:
          title: Code
          type: string
        retryable:
          title: Retryable
          type: boolean
        details:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          default: null
          title: Details
      required:
        - title
        - status
        - detail
        - code
        - retryable
      title: ProblemDetail
      type: object
    DigestTrigger:
      properties:
        type:
          type: string
          const: digest
          title: Type
          default: digest
        skip_if_empty:
          type: boolean
          title: Skip If Empty
      type: object
      required:
        - skip_if_empty
      title: DigestTrigger
    ConditionTrigger-Output:
      properties:
        type:
          type: string
          const: condition
          title: Type
          default: condition
        query:
          $ref: '#/components/schemas/MonitorQuery-Output'
        operator:
          type: string
          enum:
            - '>'
            - '>='
            - <
            - <=
            - '=='
            - '!='
          title: Operator
        threshold:
          type: number
          title: Threshold
        trigger:
          type: string
          enum:
            - always
            - on_condition_met
            - on_status_change
          title: Trigger
      type: object
      required:
        - query
        - operator
        - threshold
        - trigger
      title: ConditionTrigger
    AnomalyProphetTrigger-Output:
      properties:
        type:
          type: string
          const: anomaly_prophet
          title: Type
          default: anomaly_prophet
        query:
          $ref: '#/components/schemas/MonitorQuery-Output'
        sensitivity:
          type: number
          maximum: 50
          minimum: 0
          title: Sensitivity
          description: Sensitivity level for anomaly detection (0-50)
        trigger_on_upper_band:
          type: boolean
          title: Trigger On Upper Band
          default: true
        trigger_on_lower_band:
          type: boolean
          title: Trigger On Lower Band
          default: true
        minimum_threshold:
          anyOf:
            - type: number
            - type: 'null'
          title: Minimum Threshold
          description: Minimum threshold value for anomaly detection
      type: object
      required:
        - query
        - sensitivity
      title: AnomalyProphetTrigger
    AnomalyPercentileTrigger-Output:
      properties:
        type:
          type: string
          const: anomaly_percentile
          title: Type
          default: anomaly_percentile
        query:
          $ref: '#/components/schemas/MonitorQuery-Output'
        upper_percentile:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Upper Percentile
          description: Upper percentile threshold (e.g., 95 for 95th percentile)
        lower_percentile:
          anyOf:
            - type: number
              maximum: 100
              minimum: 0
            - type: 'null'
          title: Lower Percentile
          description: Lower percentile threshold (e.g., 5 for 5th percentile)
        deviations:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Deviations
          description: Number of standard deviations from percentile threshold
        minimum_threshold:
          anyOf:
            - type: number
            - type: 'null'
          title: Minimum Threshold
          description: Minimum threshold value for anomaly detection
      type: object
      required:
        - query
      title: AnomalyPercentileTrigger
      description: |-
        Percentile-based anomaly detection trigger.
        Triggers when the latest value exceeds historical percentile thresholds.
    BudgetThresholdTrigger-Output:
      properties:
        type:
          type: string
          const: budget_threshold
          title: Type
          default: budget_threshold
        query:
          anyOf:
            - $ref: '#/components/schemas/MonitorQuery-Output'
            - type: 'null'
        thresholds:
          items:
            $ref: '#/components/schemas/BudgetThreshold'
          type: array
          title: Thresholds
      type: object
      required:
        - thresholds
      title: BudgetThresholdTrigger
      description: >-
        Represents a budget monitor's threshold trigger. Can contain multiple
        budget thresholds.
    MonitorMessageConfig-Output:
      properties:
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
          description: The message's subject. Null falls back to the monitor's name.
        sections:
          items:
            oneOf:
              - $ref: '#/components/schemas/MonitorTitleSection'
              - $ref: '#/components/schemas/MonitorParagraphSection-Output'
              - $ref: '#/components/schemas/MonitorChartSection-Output'
              - $ref: '#/components/schemas/MonitorTableSection-Output'
              - $ref: '#/components/schemas/MonitorCustomSqlResultsSection'
            discriminator:
              propertyName: section_type
              mapping:
                chart:
                  $ref: '#/components/schemas/MonitorChartSection-Output'
                custom_sql_results:
                  $ref: '#/components/schemas/MonitorCustomSqlResultsSection'
                paragraph:
                  $ref: '#/components/schemas/MonitorParagraphSection-Output'
                table:
                  $ref: '#/components/schemas/MonitorTableSection-Output'
                title:
                  $ref: '#/components/schemas/MonitorTitleSection'
          type: array
          title: Sections
          description: The blocks the message is built from, in render order.
        templated_values:
          additionalProperties:
            $ref: '#/components/schemas/TemplatedValue'
          type: object
          title: Templated Values
          description: >-
            Values the section templates resolve by name, each naming the SELECT
            resource it reads from so a rename carries through.
      type: object
      required:
        - sections
      title: MonitorMessageConfig
      description: What the monitor's notification says when it fires.
    PartitionConfig:
      properties:
        partition_columns:
          anyOf:
            - items:
                $ref: '#/components/schemas/PartitionColumn'
              type: array
            - type: 'null'
          title: Partition Columns
      type: object
      title: PartitionConfig
    MonitorNotificationFrequencyOnTrigger:
      properties:
        frequency_type:
          type: string
          const: on_trigger
          title: Frequency Type
          default: on_trigger
      type: object
      title: MonitorNotificationFrequencyOnTrigger
    MonitorNotificationFrequencyOnStatusChange:
      properties:
        frequency_type:
          type: string
          const: on_status_change
          title: Frequency Type
          default: on_status_change
      type: object
      title: MonitorNotificationFrequencyOnStatusChange
    MonitorNotificationFrequencyLimitInTimePeriod:
      properties:
        frequency_type:
          type: string
          enum:
            - limit_x_hours
            - limit_x_days
            - limit_x_weeks
            - limit_x_months
          title: Frequency Type
        frequency_interval:
          type: integer
          title: Frequency Interval
      type: object
      required:
        - frequency_type
        - frequency_interval
      title: MonitorNotificationFrequencyLimitInTimePeriod
    MonitorPartitionDismissal:
      properties:
        partition_value:
          additionalProperties: true
          type: object
          title: Partition Value
          description: The dismissed partition's column values, keyed by column title.
          readOnly: true
          x-terraform-computed: true
        dismiss_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Dismiss Time
          description: RFC 3339 UTC timestamp of the dismissal.
          readOnly: true
          x-terraform-computed: true
        dismissed_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Dismissed By
          description: Who dismissed the partition.
          readOnly: true
          x-doit-confidentiality: customer-data
          x-doit-pii: true
          x-terraform-computed: true
      type: object
      required:
        - partition_value
      title: MonitorPartitionDismissal
      description: One partition a user has dismissed from the monitor feed.
    MonitorQuery-Output:
      properties:
        query_class:
          type: string
          enum:
            - OrgDailySpendQuery
            - OrgCustomWorkloadQueriesQuery
            - OrgDbtInvocationsQuery
            - OrgDbtQueriesProcessedQuery
            - OrgDynamicTableQueriesQuery
            - OrgFivetranQuery
            - OrgHexQueriesQuery
            - OrgHourlyServerlessSpendQuery
            - OrgDailyStorageSpendQuery
            - OrgStorageSummaryWithWorkloadsQuery
            - OrgLookerQueryQuery
            - OrgModeQueryQuery
            - OrgPeriscopeQueryQuery
            - OrgDailyQueryPatternQuery
            - OrgQueryHistoryEnrichedQuery
            - OrgDailyWorkloadQuery
            - OrgSigmaQueryQuery
            - OrgStoredProcedureQueriesQuery
            - OrgTaskQueriesQuery
            - OrgInsightsQuery
            - TableauDataSourcesQuery
            - TableauUsersQuery
            - TableauViewEventsQuery
            - TableauWorkbooksQuery
            - OrgDatabricksQueryHistoryEnrichedQuery
            - OrgDatabricksDailyQueryPatternQuery
            - OrgDatabricksHourlyWarehouseSummaryQuery
            - OrgDatabricksClusterSummaryQuery
            - OrgDatabricksHourlyJobTaskRunQuery
            - OrgDatabricksDbtQueriesProcessedQuery
            - OrgDatabricksDbtInvocationsQuery
            - OrgDatabricksDailyWorkloadQuery
            - OrgBigQueryDailyWorkloadQuery
            - OrgBigQueryHourlyWorkloadQuery
            - OrgBigQueryCustomWorkloadQueriesQuery
            - OrgBigQueryLookerQueriesQuery
            - OrgBigQueryDbtInvocationsQuery
            - OrgBigQueryDbtQueriesProcessedQuery
            - OrgBigQueryJobHistoryEnrichedQuery
            - OrgBigQueryDailyQueryPatternQuery
            - OrgBigQueryHourlyQueryPatternQuery
            - OrgBigQueryDailyProjectQuery
            - OrgBigQueryDailyReservationQuery
            - OrgBigQueryHourlyReservationQuery
            - OrgBigQueryDailyStorageSpendV2Query
            - OrgBigQueryStorageSummaryWithWorkloadsV2Query
          title: Query Class
          description: >-
            The semantic-layer query this monitor runs. Determines which
            `dimensions` and `measures` the query object may name, and must pair
            with the monitor's `data_source`.
          examples:
            - OrgDailySpendQuery
        query_object:
          $ref: '#/components/schemas/MonitorQueryObject-Output'
        period:
          anyOf:
            - $ref: '#/components/schemas/MonitorQueryPeriod'
            - type: 'null'
        compare_with:
          anyOf:
            - $ref: '#/components/schemas/MonitorQueryPeriod'
            - type: 'null'
      additionalProperties: false
      type: object
      required:
        - query_class
        - query_object
      title: MonitorQuery
    BudgetThreshold:
      properties:
        metric:
          type: string
          enum:
            - actual_spend
            - forecast_spend
          title: Metric
        unit:
          type: string
          enum:
            - percent
            - amount
          title: Unit
        value:
          type: number
          title: Value
      additionalProperties: false
      type: object
      required:
        - metric
        - unit
        - value
      title: BudgetThreshold
      description: A single budget threshold.
    MonitorTitleSection:
      properties:
        section_type:
          type: string
          const: title
          title: Section Type
          default: title
        enabled:
          type: boolean
          title: Enabled
          description: >-
            Whether this section is rendered. A disabled section keeps its
            configuration.
          default: true
      type: object
      title: MonitorTitleSection
      description: The monitor's title, rendered at the top of the message.
    MonitorParagraphSection-Output:
      properties:
        section_type:
          type: string
          const: paragraph
          title: Section Type
          default: paragraph
        enabled:
          type: boolean
          title: Enabled
          description: >-
            Whether this section is rendered. A disabled section keeps its
            configuration.
          default: true
        query:
          $ref: '#/components/schemas/MonitorQuery-Output'
          description: The data this section describes.
        body_template:
          anyOf:
            - type: string
            - type: 'null'
          title: Body Template
          description: >-
            The prose to render, as a template over the section's query results.
            Null renders prose generated from the query instead.
        include_period_over_period:
          type: boolean
          title: Include Period Over Period
          description: Whether the prose compares the period against the one before it.
          default: false
      type: object
      required:
        - query
      title: MonitorParagraphSection
      description: A block of prose, with the section's query available to its template.
    MonitorChartSection-Output:
      properties:
        section_type:
          type: string
          const: chart
          title: Section Type
          default: chart
        enabled:
          type: boolean
          title: Enabled
          description: >-
            Whether this section is rendered. A disabled section keeps its
            configuration.
          default: true
        query:
          $ref: '#/components/schemas/MonitorQuery-Output'
          description: The data this section charts.
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
          description: The chart's heading. Null leaves it untitled.
        highlight_last_point:
          type: boolean
          title: Highlight Last Point
          description: Whether the most recent point is called out on the chart.
          default: false
        threshold:
          anyOf:
            - type: number
            - type: 'null'
          title: Threshold
          description: A horizontal line drawn at this value. Null draws none.
        bands:
          anyOf:
            - oneOf:
                - $ref: '#/components/schemas/ProphetChartBands'
                - $ref: '#/components/schemas/PercentileChartBands'
              discriminator:
                propertyName: algorithm
                mapping:
                  percentile:
                    $ref: '#/components/schemas/PercentileChartBands'
                  prophet:
                    $ref: '#/components/schemas/ProphetChartBands'
            - type: 'null'
          title: Bands
          description: >-
            The expected range drawn around the series. Null draws the series
            alone.
        group_by:
          anyOf:
            - type: string
            - $ref: '#/components/schemas/MonitorSemiStructuredDimension'
            - type: 'null'
          title: Group By
          description: >-
            Splits the chart into one series per value of this dimension. Null
            charts a single series.
      type: object
      required:
        - query
      title: MonitorChartSection
      description: A time series chart of the section's query.
    MonitorTableSection-Output:
      properties:
        section_type:
          type: string
          const: table
          title: Section Type
          default: table
        enabled:
          type: boolean
          title: Enabled
          description: >-
            Whether this section is rendered. A disabled section keeps its
            configuration.
          default: true
        query:
          $ref: '#/components/schemas/MonitorQuery-Output'
          description: The data this section tabulates.
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
          description: The table's heading. Null leaves it untitled.
        columns:
          items:
            type: string
          type: array
          minItems: 1
          title: Columns
          description: The columns to show, in the order they are rendered.
      type: object
      required:
        - query
        - columns
      title: MonitorTableSection
      description: A table of the section's query results.
    MonitorCustomSqlResultsSection:
      properties:
        section_type:
          type: string
          const: custom_sql_results
          title: Section Type
          default: custom_sql_results
        enabled:
          type: boolean
          title: Enabled
          description: >-
            Whether this section is rendered. A disabled section keeps its
            configuration.
          default: true
        body_template:
          anyOf:
            - type: string
            - type: 'null'
          title: Body Template
          description: >-
            The prose to render above the results, as a template over them. Null
            renders the results alone.
        custom_sql_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Custom Sql Id
          description: The saved SQL statement this section runs.
        custom_sql_query:
          anyOf:
            - type: string
            - type: 'null'
          title: Custom Sql Query
          description: The SQL statement this section runs, when it is not a saved one.
      type: object
      title: MonitorCustomSqlResultsSection
      description: >-
        The results of the monitor's own SQL statement.


        Only a monitor whose `data_source` is `custom` carries this section, and
        such

        a monitor must carry exactly one.
    TemplatedValue:
      properties:
        entity_type:
          type: string
          enum:
            - usage_group
            - usage_group_set
          title: Entity Type
        entity_id:
          type: string
          title: Entity Id
        attribute:
          type: string
          enum:
            - name
            - usage_group_set_name
          title: Attribute
        original_value:
          anyOf:
            - type: string
            - type: 'null'
          title: Original Value
      additionalProperties: false
      type: object
      required:
        - entity_type
        - entity_id
        - attribute
      title: TemplatedValue
    PartitionColumn:
      properties:
        title:
          type: string
          title: Title
      type: object
      required:
        - title
      title: PartitionColumn
    MonitorQueryObject-Output:
      properties:
        dimensions:
          items:
            anyOf:
              - type: string
              - $ref: '#/components/schemas/MonitorSemiStructuredDimension'
          type: array
          title: Dimensions
        measures:
          items:
            anyOf:
              - type: string
              - $ref: '#/components/schemas/MonitorSemiStructuredMeasure'
          type: array
          title: Measures
        filters:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Filters
        measure_filters:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Measure Filters
        sort:
          items:
            $ref: '#/components/schemas/MonitorSort-Output'
          type: array
          title: Sort
        limit:
          anyOf:
            - type: integer
            - type: 'null'
          title: Limit
      additionalProperties: false
      type: object
      title: MonitorQueryObject
    MonitorQueryPeriod:
      properties:
        period:
          type: integer
          title: Period
        grain:
          type: string
          enum:
            - day
            - week
            - month
          title: Grain
        date_column:
          type: string
          title: Date Column
          default: day
        fill_missing_dates:
          type: boolean
          title: Fill Missing Dates
          default: false
      additionalProperties: false
      type: object
      required:
        - period
        - grain
      title: MonitorQueryPeriod
    ProphetChartBands:
      properties:
        algorithm:
          type: string
          const: prophet
          title: Algorithm
        sensitivity:
          type: number
          maximum: 50
          minimum: 0
          title: Sensitivity
          description: Sensitivity level for anomaly detection (0-50)
        upper_band:
          type: boolean
          title: Upper Band
          default: true
        lower_band:
          type: boolean
          title: Lower Band
          default: true
      additionalProperties: false
      type: object
      required:
        - algorithm
        - sensitivity
      title: ProphetChartBands
    PercentileChartBands:
      properties:
        algorithm:
          type: string
          const: percentile
          title: Algorithm
        upper_percentile:
          anyOf:
            - type: number
            - type: 'null'
          title: Upper Percentile
        lower_percentile:
          anyOf:
            - type: number
            - type: 'null'
          title: Lower Percentile
        deviations:
          anyOf:
            - type: number
              maximum: 10
              minimum: 0
            - type: 'null'
          title: Deviations
          description: Number of standard deviations from percentile threshold
      additionalProperties: false
      type: object
      required:
        - algorithm
      title: PercentileChartBands
    MonitorSemiStructuredDimension:
      properties:
        field:
          type: string
          title: Field
        path:
          items:
            type: string
          type: array
          title: Path
      type: object
      required:
        - field
        - path
      title: MonitorSemiStructuredDimension
    MonitorSemiStructuredMeasure:
      properties:
        aggregate_function:
          type: string
          const: array_unique_agg
          title: Aggregate Function
        dimension:
          $ref: '#/components/schemas/MonitorSemiStructuredDimension'
      type: object
      required:
        - aggregate_function
        - dimension
      title: MonitorSemiStructuredMeasure
    MonitorSort-Output:
      properties:
        field:
          anyOf:
            - type: string
            - $ref: '#/components/schemas/MonitorSemiStructuredDimension'
            - $ref: '#/components/schemas/MonitorSemiStructuredMeasure'
          title: Field
        direction:
          type: string
          enum:
            - asc
            - desc
          title: Direction
        column_key:
          anyOf:
            - type: string
            - type: 'null'
          title: Column Key
      additionalProperties: false
      type: object
      required:
        - field
        - direction
      title: MonitorSort
      description: >-
        Mirrors `Sort[M, D]`, but over a plain string field.


        Monitor fields carry templated values and are only resolved against the
        query

        class at run time, so they cannot be the query class's dimension/measure
        enums.
  responses:
    BadRequest:
      description: Bad request
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
    Unauthorized:
      description: Unauthorized
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
      headers:
        WWW-Authenticate:
          description: Authentication challenge for the requested resource.
          required: true
          schema:
            type: string
    Forbidden:
      description: Forbidden
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
    NotFound:
      description: Not found
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
    MethodNotAllowed:
      description: Method not allowed
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
      headers:
        Allow:
          description: HTTP methods supported by the requested resource.
          required: true
          schema:
            type: string
    RequestTimeout:
      description: Request Timeout
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
    ValidationFailed:
      description: Validation failed
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
    RateLimited:
      description: Rate limited
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
      headers:
        Retry-After:
          description: Number of seconds to wait before retrying the request.
          required: true
          schema:
            type: integer
            minimum: 0
    InternalError:
      description: Internal error
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
    ServiceUnavailable:
      description: Service unavailable
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
      headers:
        Retry-After:
          description: Number of seconds to wait before retrying the request.
          required: true
          schema:
            type: integer
            minimum: 0
  securitySchemes:
    HTTPBearer:
      type: http
      description: Organization API key (sl_…).
      scheme: bearer

````