{
  "openapi": "3.1.0",
  "info": {
    "title": "Honeybadger API",
    "description": "The Honeybadger API manages your Honeybadger account. It's a REST API:\nresources have predictable URLs, request and response bodies are JSON, and\nresponses use standard HTTP status codes. All requests go over HTTPS.\n\nBase URLs:\n\n- US: `https://app.honeybadger.io/v3`\n- EU: `https://eu-app.honeybadger.io/v3`\n\nUse the one for the region your account is in.\n\n## Authentication\n\nSend an API token as a Bearer token:\n\n```\nAuthorization: Bearer YOUR_API_TOKEN\n```\n\nThe token decides which account and projects a request reaches, and its\nscopes decide what it can do; `GET /v3/token` shows both. A request needing a\nscope the token lacks answers 403 `insufficient_scope`. See\n[Authentication](https://docs.honeybadger.io/api/v3/authentication/) for the\nkinds of token and how to create one.\n\n## Requests\n\nRequest bodies are JSON with the resource's fields at the top level:\n\n```json\n{\"name\": \"Billing API\", \"language\": \"ruby\"}\n```\n\nUpdates (PATCH) merge: send only the fields you're changing. `null` clears a\nnullable field or resets it to its default; the field's description says\nwhich. `[]` empties a list. Objects merge too, except a few that are\nreplaced whole, which their descriptions say; `{}` empties one of those.\nThe `data` object from a GET can be sent back as is: read-only fields are\nignored.\n\n## Responses\n\nEvery response body except the OpenAPI document itself is a JSON object\nwith `meta`, plus `data` on success or `error` on failure:\n\n```json\n{\n  \"data\": { ... },\n  \"meta\": { \"request_id\": \"...\" }\n}\n```\n\nA list puts an array in `data`. A paged list also adds `pagination` and\n`links` (see Pagination). An error replaces `data` with `error` (see\nErrors). Include `meta.request_id` when you contact support.\n\n## Errors\n\nAn error response has an `error` object instead of `data`:\n\n```json\n{\n  \"error\": { \"code\": \"validation_error\", \"message\": \"...\", \"details\": [...] },\n  \"meta\": { \"request_id\": \"...\" }\n}\n```\n\nBranch on `error.code`, not the message. A request that needs a feature\nthe plan doesn't include gets 403 `feature_unavailable`, and one past a\nplan limit gets 403 `limit_reached`.\n\n## Pagination\n\nMost lists are paged. Follow `links` to move between pages: `next` and\n`prev` on numbered lists, `older` and `newer` on time-ordered ones such as\nnotices. A null link means there's nothing further in that direction. Each\nlist's page size and other paging parameters are on its own page.\n\n## Rate limits\n\n360 requests per hour, unless a higher limit has been set. User tokens and\nOAuth grants share one limit per person; account tokens share one per account.\nEach response reports the limit:\n\n- `X-RateLimit-Limit`: requests allowed per hour\n- `X-RateLimit-Remaining`: requests left in the current hour\n- `X-RateLimit-Reset`: Unix time when the limit resets\n\nOver the limit, requests answer 429 `rate_limit_exceeded` with a `Retry-After`\nheader.\n\n## Migrating from v2\n\n**Credentials.** v2 personal auth tokens don't work with v3; create an API\ntoken instead. v3 only accepts Bearer token auth: HTTP basic (`curl -u TOKEN:`)\nanswers 401 `unsupported_auth_scheme`, and a token in the `auth_token` query\nparameter answers 401 `credential_in_query`.\n\n**IDs.** Projects and most other records have new IDs in v3, such as `Xk9mZp`\ninstead of v2's integers. Get them by listing through v3 (for example\n`GET /v3/projects`). Fault IDs keep their numbers, as strings.\n\n**Accounts.** v2 picked the account with `/accounts/:id/` in the path or an\n`account_id` parameter. v3 takes it from the token:\n\n| v2 | v3 |\n| --- | --- |\n| `/v2/accounts` | None. A v3 token is bound to one account; `GET /v3/token` gives its `account_id`. |\n| `/v2/accounts/:id` | `/v3/account` |\n| `/v2/accounts/:id/users` | `/v3/account/members` |\n| `/v2/accounts/:id/invitations` | `/v3/account/invitations` |\n| `/v2/accounts/:id/status_pages` | `/v3/status_pages` |\n| `/v2/projects?account_id=ID` | `/v3/projects` |\n| `/v2/teams?account_id=ID` | `/v3/teams` |\n\n**Request bodies.** v2 wrapped the fields in the resource name; v3 doesn't:\n\n```json\n{\"project\": {\"name\": \"Billing API\"}}\n```\n\nbecomes\n\n```json\n{\"name\": \"Billing API\"}\n```\n\n**Responses.** v2 returned a single resource as a bare object and a list as\n`{\"results\": [...], \"links\": {...}}`. v3 puts both under `data`, as described\nin Responses above.\n\n**Pagination.** On time-ordered lists such as notices and deploys, v2's\n`links.next` (older items) and `links.prev` (newer items) are now\n`links.older` and `links.newer`.\n",
    "version": "3.0.0",
    "contact": {
      "name": "Honeybadger Support",
      "email": "support@honeybadger.io",
      "url": "https://www.honeybadger.io"
    },
    "license": {
      "name": "Proprietary",
      "identifier": "LicenseRef-Proprietary"
    }
  },
  "servers": [
    {
      "url": "https://app.honeybadger.io/v3",
      "description": "Production API"
    }
  ],
  "security": [
    {
      "bearer_auth": []
    }
  ],
  "tags": [
    {
      "name": "Accounts",
      "description": "Account management"
    },
    {
      "name": "Projects",
      "description": "Project management"
    },
    {
      "name": "Faults",
      "description": "Error/exception management"
    },
    {
      "name": "Notices",
      "description": "Individual error occurrences"
    },
    {
      "name": "Uptime sites",
      "description": "Sites checked for uptime, with their checks and outages"
    },
    {
      "name": "Check-ins",
      "description": "Cron/heartbeat monitoring"
    },
    {
      "name": "Teams",
      "description": "Team management"
    },
    {
      "name": "Status pages",
      "description": "Public status page management"
    },
    {
      "name": "Incidents",
      "description": "Status page incidents and their updates"
    },
    {
      "name": "Alarms",
      "description": "Insights alarms"
    },
    {
      "name": "Integrations",
      "description": "Notification integrations (webhooks, PagerDuty, email, etc.)"
    },
    {
      "name": "Ingestion keys",
      "description": "Project ingestion keys"
    },
    {
      "name": "Comments",
      "description": "Comments on errors"
    },
    {
      "name": "Dashboards",
      "description": "Insights dashboards"
    },
    {
      "name": "Deploys",
      "description": "Deploy tracking"
    },
    {
      "name": "Environments",
      "description": "Per-environment project settings"
    },
    {
      "name": "Insights",
      "description": "Event querying with BadgerQL"
    },
    {
      "name": "Tokens",
      "description": "Introspection for the credential making the request"
    },
    {
      "name": "OpenAPI",
      "description": "This API's own description"
    },
    {
      "name": "Streams",
      "description": "Insights event streams"
    }
  ],
  "x-tagGroups": [
    {
      "name": "Error tracking",
      "tags": [
        "Faults",
        "Notices",
        "Comments",
        "Deploys"
      ]
    },
    {
      "name": "Uptime monitoring",
      "tags": [
        "Uptime sites",
        "Check-ins"
      ]
    },
    {
      "name": "Status pages",
      "tags": [
        "Status pages",
        "Incidents"
      ]
    },
    {
      "name": "Insights",
      "tags": [
        "Insights",
        "Streams",
        "Dashboards",
        "Alarms"
      ]
    },
    {
      "name": "Project settings",
      "tags": [
        "Projects",
        "Environments",
        "Integrations",
        "Ingestion keys"
      ]
    },
    {
      "name": "Account",
      "tags": [
        "Accounts",
        "Teams"
      ]
    },
    {
      "name": "API metadata",
      "tags": [
        "Tokens",
        "OpenAPI"
      ]
    }
  ],
  "paths": {
    "/token": {
      "get": {
        "operationId": "getToken",
        "summary": "Get the current token",
        "description": "Returns the credential making the request and what it can reach. It needs no scope.\n\n`project_ids` lists the projects the token can reach now; a user token loses a project as soon as its owner does.\n",
        "tags": [
          "Tokens"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "enum": [
                            "user",
                            "account",
                            "oauth"
                          ],
                          "description": "`user` and `account` are scoped API tokens. `oauth` is an access token issued to an application acting for a user.\n"
                        },
                        "name": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "The token's name. For an OAuth grant, the name the user gave the connection, or the application's name if none.\n",
                          "example": "CI deploys"
                        },
                        "scopes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Granular permissions. For an OAuth grant these are its legacy `read`/`write` aliases expanded to the API surface as it stood when the grant was consented to.\n",
                          "example": [
                            "faults:read",
                            "faults:write"
                          ]
                        },
                        "account_id": {
                          "type": "string",
                          "description": "ID of the account the credential is bound to.",
                          "example": "Ab3kL9"
                        },
                        "project_ids": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "IDs of the projects the credential can reach. Empty for a credential bound to an account with no visible projects; every project in the account when unrestricted.\n"
                        },
                        "expires_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time"
                        },
                        "last_used_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time",
                          "description": "When the credential was last used before this request. Recorded at most once a minute, so it can lag by up to a minute; null on first use.\n"
                        }
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "getOpenapiJson",
        "summary": "Get the OpenAPI spec (JSON)",
        "description": "Returns the OpenAPI spec for this API. It needs no scope. Send the `ETag` back as `If-None-Match` to skip downloading an unchanged spec.\n",
        "tags": [
          "OpenAPI"
        ],
        "responses": {
          "200": {
            "description": "The OpenAPI spec",
            "headers": {
              "ETag": {
                "required": true,
                "description": "Send it back as `If-None-Match` to get a 304 when the document hasn't changed.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Unchanged since the `ETag` sent"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/openapi.yaml": {
      "get": {
        "operationId": "getOpenapiYaml",
        "summary": "Get the OpenAPI spec (YAML)",
        "description": "Returns the same spec as `/openapi.json`, in YAML.\n",
        "tags": [
          "OpenAPI"
        ],
        "responses": {
          "200": {
            "description": "The OpenAPI spec",
            "headers": {
              "ETag": {
                "required": true,
                "description": "Send it back as `If-None-Match` to get a 304 when the document hasn't changed.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/yaml": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Unchanged since the `ETag` sent"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/account": {
      "get": {
        "operationId": "getAccount",
        "summary": "Get the account",
        "description": "Returns the account the token belongs to.\n",
        "tags": [
          "Accounts"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Account"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "account:read"
            ]
          }
        ]
      }
    },
    "/account/usage": {
      "get": {
        "operationId": "getAccountUsage",
        "summary": "Get account usage",
        "description": "Returns usage statistics for the account.",
        "tags": [
          "Accounts"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "required": [
                        "id",
                        "quota"
                      ],
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Account ID",
                          "example": "Ab3kL9"
                        },
                        "quota": {
                          "type": "object",
                          "required": [
                            "errors_limit",
                            "errors_consumed",
                            "uptime_limit",
                            "uptime_consumed",
                            "check_ins_limit",
                            "check_ins_consumed"
                          ],
                          "properties": {
                            "errors_limit": {
                              "type": "integer",
                              "description": "Errors allowed this billing period"
                            },
                            "errors_consumed": {
                              "type": "integer",
                              "description": "Errors recorded this billing period"
                            },
                            "uptime_limit": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Uptime monitors allowed; null when unlimited"
                            },
                            "uptime_consumed": {
                              "type": "integer",
                              "description": "Uptime monitors in use"
                            },
                            "check_ins_limit": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Check-ins allowed; null when unlimited"
                            },
                            "check_ins_consumed": {
                              "type": "integer",
                              "description": "Check-ins in use"
                            }
                          }
                        }
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "account:read"
            ]
          }
        ]
      }
    },
    "/account/members": {
      "get": {
        "operationId": "listAccountMembers",
        "summary": "List account members",
        "description": "Returns a list of members for the account.",
        "tags": [
          "Accounts"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/AccountMember"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:read"
            ]
          }
        ]
      }
    },
    "/account/members/{member_id}": {
      "get": {
        "operationId": "getAccountMember",
        "summary": "Get an account member",
        "description": "Returns a single account member.",
        "tags": [
          "Accounts"
        ],
        "parameters": [
          {
            "name": "member_id",
            "in": "path",
            "required": true,
            "description": "Member ID",
            "schema": {
              "type": "string",
              "example": "Am4wLq"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/AccountMember"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateAccountMember",
        "summary": "Update an account member",
        "description": "Updates a member's role or settings within the account.",
        "tags": [
          "Accounts"
        ],
        "parameters": [
          {
            "name": "member_id",
            "in": "path",
            "required": true,
            "description": "Member ID",
            "schema": {
              "type": "string",
              "example": "Am4wLq"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountMemberInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/AccountMember"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteAccountMember",
        "summary": "Remove an account member",
        "description": "Removes a member from the account.",
        "tags": [
          "Accounts"
        ],
        "parameters": [
          {
            "name": "member_id",
            "in": "path",
            "required": true,
            "description": "Member ID",
            "schema": {
              "type": "string",
              "example": "Am4wLq"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Member removed"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      }
    },
    "/account/invitations": {
      "get": {
        "operationId": "listAccountInvitations",
        "summary": "List account invitations",
        "description": "Returns a list of pending invitations for the account.",
        "tags": [
          "Accounts"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/AccountInvitation"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createAccountInvitation",
        "summary": "Create an invitation",
        "description": "Invites a user to the account.",
        "tags": [
          "Accounts"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountInvitationCreateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Invitation created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/AccountInvitation"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      }
    },
    "/account/invitations/{invitation_id}": {
      "get": {
        "operationId": "getAccountInvitation",
        "summary": "Get an invitation",
        "description": "Returns a single invitation.",
        "tags": [
          "Accounts"
        ],
        "parameters": [
          {
            "name": "invitation_id",
            "in": "path",
            "required": true,
            "description": "Invitation ID",
            "schema": {
              "type": "string",
              "example": "Ai9nRx"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/AccountInvitation"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateAccountInvitation",
        "summary": "Update an invitation",
        "description": "Updates a pending invitation.",
        "tags": [
          "Accounts"
        ],
        "parameters": [
          {
            "name": "invitation_id",
            "in": "path",
            "required": true,
            "description": "Invitation ID",
            "schema": {
              "type": "string",
              "example": "Ai9nRx"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountInvitationInput"
              },
              "example": {
                "role": "Admin"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/AccountInvitation"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteAccountInvitation",
        "summary": "Delete an invitation",
        "description": "Cancels a pending invitation.",
        "tags": [
          "Accounts"
        ],
        "parameters": [
          {
            "name": "invitation_id",
            "in": "path",
            "required": true,
            "description": "Invitation ID",
            "schema": {
              "type": "string",
              "example": "Ai9nRx"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Invitation deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      }
    },
    "/projects": {
      "get": {
        "operationId": "listProjects",
        "summary": "List projects",
        "description": "Returns a list of projects for the account.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "description": "Exact project name to match. Omit or leave blank to list all accessible projects.",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Project"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createProject",
        "summary": "Create a project",
        "description": "Creates a new project in the account.",
        "tags": [
          "Projects"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectCreateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Project created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Project"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/ConcurrentCreate"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:create"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}": {
      "get": {
        "operationId": "getProject",
        "summary": "Get a project",
        "description": "Returns a single project.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Project"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateProject",
        "summary": "Update a project",
        "description": "Updates a project's settings.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectInput"
              },
              "example": {
                "name": "Billing API"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Project"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteProject",
        "summary": "Delete a project",
        "description": "Permanently deletes a project and all its data.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "responses": {
          "204": {
            "description": "Project deleted"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/stats": {
      "get": {
        "operationId": "getProjectStats",
        "summary": "Get project stats",
        "description": "Returns statistics for a project.",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "required": [
                        "id",
                        "fault_count",
                        "unresolved_fault_count",
                        "notice_count_today",
                        "notice_count_week",
                        "notice_count_month"
                      ],
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Project ID",
                          "example": "Xk9mZp"
                        },
                        "fault_count": {
                          "type": "integer"
                        },
                        "unresolved_fault_count": {
                          "type": "integer"
                        },
                        "notice_count_today": {
                          "type": "integer",
                          "description": "Notices in the last 24 hours. Counted from the start of the window or the project's retention, whichever is later, so on short retention month can equal week. Search being unavailable answers 503."
                        },
                        "notice_count_week": {
                          "type": "integer",
                          "description": "Notices in the last 7 days. Counted from the start of the window or the project's retention, whichever is later, so on short retention month can equal week. Search being unavailable answers 503."
                        },
                        "notice_count_month": {
                          "type": "integer",
                          "description": "Notices in the last month. Counted from the start of the window or the project's retention, whichever is later, so on short retention month can equal week. Search being unavailable answers 503."
                        }
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:read"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/occurrences": {
      "get": {
        "operationId": "getProjectOccurrences",
        "summary": "Get a project's occurrence counts",
        "description": "Returns the project's notice counts over `period`, one count per interval. Intervals with no notices are included with a count of 0.\n",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/OccurrencePeriod"
          },
          {
            "$ref": "#/components/parameters/OccurrenceEnvironment"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/OccurrenceSeries"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/OccurrenceMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          },
          "429": {
            "$ref": "#/components/responses/RateLimitExceeded"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:read"
            ]
          }
        ]
      }
    },
    "/projects/occurrences": {
      "get": {
        "operationId": "listAccountOccurrences",
        "summary": "Get occurrence counts for all projects",
        "description": "Returns the same counts as Get a project's occurrence counts, for every project the token can read, ordered by project name.\n",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OccurrencePeriod"
          },
          {
            "$ref": "#/components/parameters/OccurrenceEnvironment"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/OccurrenceSeries"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/OccurrenceMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          },
          "429": {
            "$ref": "#/components/responses/RateLimitExceeded"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:read"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults": {
      "get": {
        "operationId": "listFaults",
        "summary": "List faults",
        "description": "Returns a list of faults for the project.",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          },
          {
            "$ref": "#/components/parameters/SearchFilter"
          },
          {
            "$ref": "#/components/parameters/FaultOrder"
          },
          {
            "$ref": "#/components/parameters/Sort"
          },
          {
            "$ref": "#/components/parameters/FaultCreatedAfter"
          },
          {
            "$ref": "#/components/parameters/FaultOccurredAfter"
          },
          {
            "$ref": "#/components/parameters/FaultOccurredBefore"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Fault"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:read"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/{fault_id}": {
      "get": {
        "operationId": "getFault",
        "summary": "Get a fault",
        "description": "Returns a single fault.",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Fault"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "301": {
            "$ref": "#/components/responses/MergedFault"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateFault",
        "summary": "Update a fault",
        "description": "Updates a fault's attributes.",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FaultInput"
              },
              "example": {
                "resolved": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Fault"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/FaultMergedConflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteFault",
        "summary": "Delete a fault",
        "description": "Permanently deletes a fault. Its notices aren't deleted; they stay retrievable by ID until retention removes them.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          }
        ],
        "responses": {
          "204": {
            "description": "Fault deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/FaultMergedConflict"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/summary": {
      "get": {
        "operationId": "getFaultSummary",
        "summary": "Get fault counts",
        "description": "Returns the project's fault counts, grouped by environment and by resolved or ignored state. It takes the same `q` and time parameters as List faults, and counts the same faults.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/SearchFilter"
          },
          {
            "$ref": "#/components/parameters/FaultCreatedAfter"
          },
          {
            "name": "occurred_after",
            "in": "query",
            "description": "Only count faults that occurred after this Unix timestamp",
            "schema": {
              "type": "number",
              "format": "double"
            }
          },
          {
            "name": "occurred_before",
            "in": "query",
            "description": "Only count faults that occurred before this Unix timestamp",
            "schema": {
              "type": "number",
              "format": "double"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "required": [
                        "total",
                        "environments"
                      ],
                      "properties": {
                        "total": {
                          "type": "integer",
                          "description": "Total faults matching the filter",
                          "example": 142
                        },
                        "environments": {
                          "type": "array",
                          "description": "One entry per distinct environment/resolved/ignored combination present. Combinations with no faults are absent rather than zero.\n",
                          "items": {
                            "type": "object",
                            "required": [
                              "environment",
                              "resolved",
                              "ignored",
                              "count"
                            ],
                            "properties": {
                              "environment": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "description": "Null for faults recorded with no environment",
                                "example": "production"
                              },
                              "resolved": {
                                "type": "boolean"
                              },
                              "ignored": {
                                "type": "boolean"
                              },
                              "count": {
                                "type": "integer"
                              }
                            }
                          }
                        }
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          },
          "429": {
            "$ref": "#/components/responses/RateLimitExceeded"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:read"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/resolve": {
      "post": {
        "operationId": "resolveFaults",
        "summary": "Resolve faults",
        "description": "Marks faults as resolved. Name them with `fault_ids`, narrow them with `q` or a time filter, or pass `\"all\": true` to resolve every fault in the project. The request must include one of these.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FaultSelectionInput"
              },
              "example": {
                "fault_ids": [
                  "12345",
                  "12346"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Applied, or reported without applying when `dry_run` was set. The body says how many faults changed and names them.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/FaultBulkResult"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/FaultBulkRejected"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/unresolve": {
      "post": {
        "operationId": "unresolveFaults",
        "summary": "Unresolve faults",
        "description": "Marks faults as unresolved. Name them with `fault_ids`, narrow them with `q` or a time filter, or pass `\"all\": true` to unresolve every fault in the project. The request must include one of these.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FaultSelectionInput"
              },
              "example": {
                "fault_ids": [
                  "12345",
                  "12346"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Applied, or reported without applying when `dry_run` was set. The body says how many faults changed and names them.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/FaultBulkResult"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/FaultBulkRejected"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/ignore": {
      "post": {
        "operationId": "ignoreFaults",
        "summary": "Ignore faults",
        "description": "Marks faults as ignored, which stops data collection for them. Name them with `fault_ids`, narrow them with `q` or a time filter, or pass `\"all\": true` to ignore every fault in the project. The request must include one of these.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FaultSelectionInput"
              },
              "example": {
                "fault_ids": [
                  "12345",
                  "12346"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Applied, or reported without applying when `dry_run` was set. The body says how many faults changed and names them.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/FaultBulkResult"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/FaultBulkRejected"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/unignore": {
      "post": {
        "operationId": "unignoreFaults",
        "summary": "Unignore faults",
        "description": "Marks faults as no longer ignored. Name them with `fault_ids`, narrow them with `q` or a time filter, or pass `\"all\": true` to unignore every fault in the project. The request must include one of these.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FaultSelectionInput"
              },
              "example": {
                "fault_ids": [
                  "12345",
                  "12346"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Applied, or reported without applying when `dry_run` was set. The body says how many faults changed and names them.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/FaultBulkResult"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/FaultBulkRejected"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/{fault_id}/snooze": {
      "post": {
        "operationId": "snoozeFault",
        "summary": "Snooze a fault",
        "description": "Snoozes a fault's notifications for a `time` duration or a `count` of occurrences, replacing any existing snooze. While it's snoozed, recurrences and rate escalations don't notify, but a resolved fault that recurs is still unresolved. With `count: N`, occurrence N+1 notifies. The web UI calls this \"pause\"; it's unrelated to Pause fault recording.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "Send one of `time` or `count`.",
                "additionalProperties": false,
                "properties": {
                  "time": {
                    "$ref": "#/components/schemas/PauseDuration"
                  },
                  "count": {
                    "type": "integer",
                    "enum": [
                      10,
                      100,
                      1000
                    ],
                    "description": "Snooze until this many additional occurrences have been received."
                  }
                }
              },
              "example": {
                "time": "day"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Snooze applied. Returns the fault.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Fault"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/FaultMergedConflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "unsnoozeFault",
        "summary": "Unsnooze a fault",
        "description": "Removes a fault's snooze.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          }
        ],
        "responses": {
          "200": {
            "description": "Snooze removed. Returns the fault.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Fault"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/FaultMergedConflict"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/{fault_id}/assign": {
      "post": {
        "operationId": "assignFault",
        "summary": "Assign a fault",
        "description": "Assigns a fault to a user. To unassign, DELETE the same path.",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FaultAssignmentInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Fault"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/FaultMergedConflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "unassignFault",
        "summary": "Unassign a fault",
        "description": "Removes the assignment from a fault.",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Fault"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/FaultMergedConflict"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/{fault_id}/merge": {
      "post": {
        "operationId": "mergeFaults",
        "summary": "Merge a fault into another",
        "description": "Merges the fault in the path into the fault named by `target_fault_id`. Its notices, comments, tickets, notification opt-outs, Actions runs and merge history move to the target, and its tags, assignee and resolved or ignored state are dropped.\n\nThe merge runs in the background, so the response is 202. Until it finishes, the merged fault can still be read and written; once it's done, a GET on it redirects (301) to the target. The redirect lasts about as long as the project's retention, and then the old ID returns 404.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FaultMergeInput"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Merge accepted and queued",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/FaultMerge"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/FaultMergedConflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/{fault_id}/occurrences": {
      "get": {
        "operationId": "listFaultOccurrences",
        "summary": "Get a fault's occurrence counts",
        "description": "Returns a fault's occurrence counts over a window, set with `occurred_after` and `occurred_before`. With neither, the window is the last hour; with only `occurred_before`, the hour before it; with only `occurred_after`, from then until now. A start older than the project's retention is moved up to it.\n\nThe bucket size depends on the window's length. `meta.window` gives the window served and `meta.interval_seconds` the bucket size. Every interval is included, with 0 where there were no occurrences.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          },
          {
            "$ref": "#/components/parameters/FaultOccurredAfter"
          },
          {
            "$ref": "#/components/parameters/FaultOccurredBefore"
          },
          {
            "$ref": "#/components/parameters/SearchFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "Buckets in ascending time order, one per interval across the served window.\n",
                      "items": {
                        "type": "object",
                        "required": [
                          "timestamp",
                          "count"
                        ],
                        "properties": {
                          "timestamp": {
                            "type": "integer",
                            "description": "Start of the bucket, as a Unix timestamp.",
                            "example": 1704067200
                          },
                          "count": {
                            "type": "integer",
                            "description": "Occurrences within the bucket.",
                            "example": 12
                          }
                        }
                      }
                    },
                    "meta": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/ResponseMeta"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "window": {
                              "type": "object",
                              "description": "The window actually served.",
                              "required": [
                                "occurred_after",
                                "occurred_before"
                              ],
                              "properties": {
                                "occurred_after": {
                                  "type": "number",
                                  "format": "double",
                                  "description": "Unix timestamp, preserving fractional seconds.",
                                  "example": 1704067200
                                },
                                "occurred_before": {
                                  "type": "number",
                                  "format": "double",
                                  "description": "Unix timestamp, preserving fractional seconds.",
                                  "example": 1704070800
                                }
                              }
                            },
                            "interval_seconds": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Spacing between bucket timestamps. Null when the requested window falls entirely outside retention.\n",
                              "example": 60
                            },
                            "retention_truncated": {
                              "type": "boolean",
                              "description": "Whether retention narrowed the requested window."
                            }
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "301": {
            "$ref": "#/components/responses/MergedFault"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:read"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/{fault_id}/affected_users": {
      "get": {
        "operationId": "listFaultAffectedUsers",
        "summary": "List affected users",
        "description": "Returns the 500 users a fault affected most, ranked by notice count. With `q`, only matching notices count.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          },
          {
            "$ref": "#/components/parameters/SearchFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/AffectedUser"
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "301": {
            "$ref": "#/components/responses/MergedFault"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:read"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/{fault_id}/pause_recording": {
      "post": {
        "operationId": "pauseFaultRecording",
        "summary": "Pause fault recording",
        "description": "Stops recording a fault's notices for a given duration; notices during the pause are discarded. Pausing again replaces the end time. The first occurrence after the pause notifies as usual.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "time"
                ],
                "additionalProperties": false,
                "properties": {
                  "time": {
                    "$ref": "#/components/schemas/PauseDuration"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Recording paused. Returns the fault.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Fault"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/FaultMergedConflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/{fault_id}/resume_recording": {
      "post": {
        "operationId": "resumeFaultRecording",
        "summary": "Resume fault recording",
        "description": "Resumes recording a fault's notices. A fault that isn't paused is left as it is.\n",
        "tags": [
          "Faults"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          }
        ],
        "responses": {
          "200": {
            "description": "Recording resumed. Returns the fault.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Fault"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/FaultMergedConflict"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/{fault_id}/notices": {
      "get": {
        "operationId": "listNotices",
        "summary": "List notices",
        "description": "Returns a list of notices for a fault.",
        "tags": [
          "Notices"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Before"
          },
          {
            "$ref": "#/components/parameters/After"
          },
          {
            "$ref": "#/components/parameters/Unmapped"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Notice"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/TimeSeriesPagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/TimeSeriesLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "301": {
            "$ref": "#/components/responses/MergedFault"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:read"
            ]
          }
        ]
      }
    },
    "/notices/{uuid}": {
      "get": {
        "operationId": "getNotice",
        "summary": "Get a notice",
        "description": "Returns a notice by its ID, without its project or fault in the path.\n",
        "tags": [
          "Notices"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "description": "Notice ID",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "1e2ba1f0-4f3c-4b1a-9c7e-6f2f5c0f1a3b"
            }
          },
          {
            "$ref": "#/components/parameters/Unmapped"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Notice"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:read"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/{fault_id}/comments": {
      "get": {
        "operationId": "listComments",
        "summary": "List comments",
        "description": "Returns a list of comments for a fault.",
        "tags": [
          "Comments"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Before"
          },
          {
            "$ref": "#/components/parameters/After"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Comment"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/TimeSeriesPagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/TimeSeriesLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createComment",
        "summary": "Create a comment",
        "description": "Adds a comment to a fault.",
        "tags": [
          "Comments"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Comment created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Comment"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/faults/{fault_id}/comments/{comment_id}": {
      "get": {
        "operationId": "getComment",
        "summary": "Get a comment",
        "description": "Returns a single comment.",
        "tags": [
          "Comments"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          },
          {
            "name": "comment_id",
            "in": "path",
            "required": true,
            "description": "Comment ID",
            "schema": {
              "type": "string",
              "example": "Cm7pLx"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Comment"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateComment",
        "summary": "Update a comment",
        "description": "Updates a comment's body.",
        "tags": [
          "Comments"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          },
          {
            "name": "comment_id",
            "in": "path",
            "required": true,
            "description": "Comment ID",
            "schema": {
              "type": "string",
              "example": "Cm7pLx"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Comment"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteComment",
        "summary": "Delete a comment",
        "description": "Deletes a comment from a fault.",
        "tags": [
          "Comments"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/FaultId"
          },
          {
            "name": "comment_id",
            "in": "path",
            "required": true,
            "description": "Comment ID",
            "schema": {
              "type": "string",
              "example": "Cm7pLx"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Comment deleted"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "faults:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/sites": {
      "get": {
        "operationId": "listSites",
        "summary": "List sites",
        "description": "Returns a list of uptime monitoring sites for the project.",
        "tags": [
          "Uptime sites"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Site"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "uptime:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createSite",
        "summary": "Create a site",
        "description": "Creates an uptime monitoring site. Requires uptime monitoring on the plan.\n",
        "tags": [
          "Uptime sites"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SiteCreateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Site created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Site"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "uptime:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/sites/{site_id}": {
      "get": {
        "operationId": "getSite",
        "summary": "Get a site",
        "description": "Returns a single uptime monitoring site.",
        "tags": [
          "Uptime sites"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "site_id",
            "in": "path",
            "required": true,
            "description": "Site identifier (uuid)",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "9f8b6d2e-4c1a-4b7f-9e35-2a6c8d0f1b47"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Site"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "uptime:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateSite",
        "summary": "Update a site",
        "description": "Updates an uptime monitoring site.",
        "tags": [
          "Uptime sites"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "site_id",
            "in": "path",
            "required": true,
            "description": "Site identifier (uuid)",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "9f8b6d2e-4c1a-4b7f-9e35-2a6c8d0f1b47"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SiteInput"
              },
              "example": {
                "url": "https://www.example.com/health"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Site"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "uptime:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteSite",
        "summary": "Delete a site",
        "description": "Deletes an uptime monitoring site.",
        "tags": [
          "Uptime sites"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "site_id",
            "in": "path",
            "required": true,
            "description": "Site identifier (uuid)",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "9f8b6d2e-4c1a-4b7f-9e35-2a6c8d0f1b47"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Site deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "uptime:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/sites/{site_id}/checks": {
      "get": {
        "operationId": "listUptimeChecks",
        "summary": "List uptime checks",
        "description": "Returns a list of uptime check results for a site.",
        "tags": [
          "Uptime sites"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "site_id",
            "in": "path",
            "required": true,
            "description": "Site identifier (uuid)",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "9f8b6d2e-4c1a-4b7f-9e35-2a6c8d0f1b47"
            }
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/PageCreatedAfter"
          },
          {
            "$ref": "#/components/parameters/CreatedBefore"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/UptimeCheck"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/TimeSeriesPagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/TimeSeriesLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "uptime:read"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/sites/{site_id}/outages": {
      "get": {
        "operationId": "listOutages",
        "summary": "List outages",
        "description": "Returns a list of outages for a site.",
        "tags": [
          "Uptime sites"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "site_id",
            "in": "path",
            "required": true,
            "description": "Site identifier (uuid)",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "9f8b6d2e-4c1a-4b7f-9e35-2a6c8d0f1b47"
            }
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/PageCreatedAfter"
          },
          {
            "$ref": "#/components/parameters/CreatedBefore"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Outage"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/TimeSeriesPagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/TimeSeriesLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "uptime:read"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/check_ins": {
      "get": {
        "operationId": "listCheckIns",
        "summary": "List check-ins",
        "description": "Returns a list of check-ins for the project.",
        "tags": [
          "Check-ins"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CheckIn"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "checkins:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createCheckIn",
        "summary": "Create a check-in",
        "description": "Creates a new check-in monitor.",
        "tags": [
          "Check-ins"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckInCreateInput"
              },
              "example": {
                "name": "Nightly backup",
                "report_period": "1 day"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Check-in created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/CheckIn"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "checkins:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/check_ins/bulk_update": {
      "put": {
        "operationId": "replaceCheckIns",
        "summary": "Replace the project's check-ins",
        "description": "Replaces the project's check-ins with the ones supplied. Each is matched to an existing check-in by `slug`: a matching check-in is updated, a new slug creates one, and any existing check-in that isn't supplied is deleted. The response lists what happened to each slug.\n\nIf any create, update or delete fails, nothing changes, and `error.details` has an entry for each failed slug (field `check_ins.<slug>`). A cron entry needs cron on the plan.\n",
        "tags": [
          "Check-ins"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckInReplaceInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "operation",
                          "slug",
                          "success"
                        ],
                        "properties": {
                          "operation": {
                            "type": "string",
                            "enum": [
                              "create",
                              "update",
                              "delete"
                            ]
                          },
                          "slug": {
                            "type": "string",
                            "example": "nightly-backup"
                          },
                          "success": {
                            "type": "boolean",
                            "const": true,
                            "description": "Always true; any failure makes the whole request a 422 and changes nothing."
                          }
                        }
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "checkins:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/check_ins/{check_in_id}": {
      "get": {
        "operationId": "getCheckIn",
        "summary": "Get a check-in",
        "description": "Returns a single check-in.",
        "tags": [
          "Check-ins"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "check_in_id",
            "in": "path",
            "required": true,
            "description": "Check-in ID",
            "schema": {
              "type": "string",
              "example": "Ci5xWq"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/CheckIn"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "checkins:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateCheckIn",
        "summary": "Update a check-in",
        "description": "Updates a check-in's settings. Switching to a cron schedule needs cron on the plan.\n",
        "tags": [
          "Check-ins"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "check_in_id",
            "in": "path",
            "required": true,
            "description": "Check-in ID",
            "schema": {
              "type": "string",
              "example": "Ci5xWq"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckInInput"
              },
              "example": {
                "grace_period": "10 minutes"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/CheckIn"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "checkins:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteCheckIn",
        "summary": "Delete a check-in",
        "description": "Deletes a check-in monitor.",
        "tags": [
          "Check-ins"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "check_in_id",
            "in": "path",
            "required": true,
            "description": "Check-in ID",
            "schema": {
              "type": "string",
              "example": "Ci5xWq"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Check-in deleted"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "checkins:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/check_ins/{check_in_id}/events": {
      "get": {
        "operationId": "listCheckInEvents",
        "summary": "List check-in events",
        "description": "Returns a check-in's events, newest first. A report payload over 50 KB is stored truncated: it's replaced by `_truncated: true`, a `_message`, and the `_original_size` in bytes.\n\nThe first page is always the newest events; follow `links.older` for earlier ones. `links.newer` is always null and `has_newer` always false.\n",
        "tags": [
          "Check-ins"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "check_in_id",
            "in": "path",
            "required": true,
            "description": "Check-in ID",
            "schema": {
              "type": "string",
              "example": "Ci5xWq"
            }
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/CreatedBefore"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CheckInEvent"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/TimeSeriesPagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/TimeSeriesLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "checkins:read"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/deploys": {
      "get": {
        "operationId": "listDeploys",
        "summary": "List deploys",
        "description": "Returns a list of deploys for the project.",
        "tags": [
          "Deploys"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Before"
          },
          {
            "$ref": "#/components/parameters/After"
          },
          {
            "name": "environment",
            "in": "query",
            "description": "Exact environment name to match. Ignored when blank.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "local_username",
            "in": "query",
            "description": "Exact deploy username to match. Ignored when blank; combines with environment when both are provided.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Deploy"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/TimeSeriesPagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/TimeSeriesLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "deploys:read"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/deploys/{deploy_id}": {
      "get": {
        "operationId": "getDeploy",
        "summary": "Get a deploy",
        "description": "Returns a single deploy.",
        "tags": [
          "Deploys"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "deploy_id",
            "in": "path",
            "required": true,
            "description": "Deploy ID",
            "schema": {
              "type": "string",
              "example": "Dp2yNk"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Deploy"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "deploys:read"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteDeploy",
        "summary": "Delete a deploy",
        "description": "Deletes a deploy record.",
        "tags": [
          "Deploys"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "deploy_id",
            "in": "path",
            "required": true,
            "description": "Deploy ID",
            "schema": {
              "type": "string",
              "example": "Dp2yNk"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deploy deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "deploys:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/environments": {
      "get": {
        "operationId": "listEnvironments",
        "summary": "List environments",
        "description": "Returns a list of environments for the project.",
        "tags": [
          "Environments"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Environment"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createEnvironment",
        "summary": "Create an environment",
        "description": "Creates a new environment for the project.",
        "tags": [
          "Environments"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EnvironmentCreateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Environment created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Environment"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/environments/{environment_id}": {
      "get": {
        "operationId": "getEnvironment",
        "summary": "Get an environment",
        "description": "Returns a single environment.",
        "tags": [
          "Environments"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "environment_id",
            "in": "path",
            "required": true,
            "description": "Environment ID",
            "schema": {
              "type": "string",
              "example": "En6tRm"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Environment"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateEnvironment",
        "summary": "Update an environment",
        "description": "Updates an environment's settings.",
        "tags": [
          "Environments"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "environment_id",
            "in": "path",
            "required": true,
            "description": "Environment ID",
            "schema": {
              "type": "string",
              "example": "En6tRm"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EnvironmentInput"
              },
              "example": {
                "notifications": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Environment"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteEnvironment",
        "summary": "Delete an environment",
        "description": "Deletes an environment. Its faults and notices stay, and its name is removed from integrations' `excluded_environments`. The next notice or deploy under that name creates it again, with `notifications: true`.\n",
        "tags": [
          "Environments"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "environment_id",
            "in": "path",
            "required": true,
            "description": "Environment ID",
            "schema": {
              "type": "string",
              "example": "En6tRm"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Environment deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/environments/bulk_update": {
      "patch": {
        "operationId": "bulkUpdateEnvironments",
        "summary": "Bulk update environments",
        "description": "Updates notifications for several environments at once. An empty `environment_ids` changes nothing. If any ID isn't one of the project's environments, nothing changes.\n",
        "tags": [
          "Environments"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "environment_ids",
                  "notifications"
                ],
                "additionalProperties": false,
                "properties": {
                  "environment_ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "IDs of environments to update"
                  },
                  "notifications": {
                    "type": "boolean",
                    "description": "Whether notifications should fire for these environments."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "required": [
                        "count"
                      ],
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of environments updated"
                        }
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/environments/bulk_delete": {
      "post": {
        "operationId": "bulkDeleteEnvironments",
        "summary": "Bulk delete environments",
        "description": "Deletes several environments at once. An empty `environment_ids` deletes nothing. If any ID isn't one of the project's environments, nothing is deleted.\n",
        "tags": [
          "Environments"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "environment_ids"
                ],
                "additionalProperties": false,
                "properties": {
                  "environment_ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "IDs of environments to delete"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "required": [
                        "count"
                      ],
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of environments deleted"
                        }
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/integrations": {
      "get": {
        "operationId": "listIntegrations",
        "summary": "List integrations",
        "description": "Returns a list of notification integrations for the project.",
        "tags": [
          "Integrations"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Integration"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "integrations:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createIntegration",
        "summary": "Create an integration",
        "description": "Creates a notification integration. `type` picks the integration, and `config` holds its settings, listed per type in [Integration types](https://docs.honeybadger.io/api/v3/integrations/types/). An OAuth integration (Slack, GitHub, Linear and the like) sends nothing until someone connects it in the web UI at its `links.web`.\n",
        "tags": [
          "Integrations"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationCreateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Integration"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "integrations:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/integrations/{integration_id}": {
      "get": {
        "operationId": "getIntegration",
        "summary": "Get an integration",
        "description": "Returns a single notification integration.",
        "tags": [
          "Integrations"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "integration_id",
            "in": "path",
            "required": true,
            "description": "Integration ID",
            "schema": {
              "type": "string",
              "example": "Ch9wLp"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Integration"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "integrations:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateIntegration",
        "summary": "Update an integration",
        "description": "Updates an integration's settings. A successful update also clears `error`, so an active integration starts delivering again.\n",
        "tags": [
          "Integrations"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "integration_id",
            "in": "path",
            "required": true,
            "description": "Integration ID",
            "schema": {
              "type": "string",
              "example": "Ch9wLp"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationUpdateInput"
              },
              "example": {
                "active": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Integration"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "integrations:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteIntegration",
        "summary": "Delete an integration",
        "description": "Permanently deletes an integration. Faults lose their links to the issues it created (`tickets`); the issues themselves stay in the issue tracker.\n",
        "tags": [
          "Integrations"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "integration_id",
            "in": "path",
            "required": true,
            "description": "Integration ID",
            "schema": {
              "type": "string",
              "example": "Ch9wLp"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "integrations:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/ingestion_keys": {
      "get": {
        "operationId": "listIngestionKeys",
        "summary": "List ingestion keys",
        "description": "Returns the project's ingestion keys.",
        "tags": [
          "Ingestion keys"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/IngestionKey"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createIngestionKey",
        "summary": "Create an ingestion key",
        "description": "Creates an ingestion key for the project.\n",
        "tags": [
          "Ingestion keys"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IngestionKeyInput"
              },
              "example": {
                "label": "CI"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Key created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IngestionKey"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/ingestion_keys/{ingestion_key_id}": {
      "get": {
        "operationId": "getIngestionKey",
        "summary": "Get an ingestion key",
        "description": "Returns a single ingestion key.",
        "tags": [
          "Ingestion keys"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "ingestion_key_id",
            "in": "path",
            "required": true,
            "description": "Key ID",
            "schema": {
              "type": "string",
              "example": "Kp7mZq2x"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IngestionKey"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateIngestionKey",
        "summary": "Update an ingestion key",
        "description": "Updates a key's label. The key itself can't be changed.\n",
        "tags": [
          "Ingestion keys"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "ingestion_key_id",
            "in": "path",
            "required": true,
            "description": "Key ID",
            "schema": {
              "type": "string",
              "example": "Kp7mZq2x"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IngestionKeyInput"
              },
              "example": {
                "label": "Staging"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IngestionKey"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteIngestionKey",
        "summary": "Delete an ingestion key",
        "description": "Deletes an ingestion key. A project's last key can't be deleted.\n",
        "tags": [
          "Ingestion keys"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "ingestion_key_id",
            "in": "path",
            "required": true,
            "description": "Key ID",
            "schema": {
              "type": "string",
              "example": "Kp7mZq2x"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Key deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "projects:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/dashboards": {
      "get": {
        "operationId": "listDashboards",
        "summary": "List dashboards",
        "description": "Returns a list of Insights dashboards for the project.",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Dashboard"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "dashboards:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createDashboard",
        "summary": "Create a dashboard",
        "description": "Creates a new Insights dashboard.",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DashboardInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Dashboard created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Dashboard"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "dashboards:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/dashboards/{dashboard_id}": {
      "get": {
        "operationId": "getDashboard",
        "summary": "Get a dashboard",
        "description": "Returns a single Insights dashboard.",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "dashboard_id",
            "in": "path",
            "required": true,
            "description": "Dashboard ID",
            "schema": {
              "type": "string",
              "example": "Db4rKn"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Dashboard"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "dashboards:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateDashboard",
        "summary": "Update a dashboard",
        "description": "Updates an Insights dashboard. Fields left out keep their values. `widgets` replaces the whole list, so send every widget you want to keep; a widget sent without its `id` gets a new one.\n",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "dashboard_id",
            "in": "path",
            "required": true,
            "description": "Dashboard ID",
            "schema": {
              "type": "string",
              "example": "Db4rKn"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DashboardUpdateInput"
              },
              "example": {
                "title": "Checkout"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Dashboard"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "dashboards:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteDashboard",
        "summary": "Delete a dashboard",
        "description": "Deletes an Insights dashboard, including the project's default one (`is_default`). Opening Insights in the web UI creates a new default dashboard when the project has none.\n",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "dashboard_id",
            "in": "path",
            "required": true,
            "description": "Dashboard ID",
            "schema": {
              "type": "string",
              "example": "Db4rKn"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Dashboard deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "dashboards:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/alarms": {
      "get": {
        "operationId": "listAlarms",
        "summary": "List alarms",
        "description": "Returns every alarm on the project.\n",
        "tags": [
          "Alarms"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Alarm"
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          },
          "503": {
            "$ref": "#/components/responses/AlarmServiceUnavailable"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "alarms:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createAlarm",
        "summary": "Create an alarm",
        "description": "Creates a new alarm for the project.",
        "tags": [
          "Alarms"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlarmCreateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Alarm created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Alarm"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/StreamsProvisioning"
          },
          "503": {
            "$ref": "#/components/responses/AlarmServiceUnavailable"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "alarms:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/alarms/{alarm_id}": {
      "get": {
        "operationId": "getAlarm",
        "summary": "Get an alarm",
        "description": "Returns a single alarm.",
        "tags": [
          "Alarms"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "alarm_id",
            "in": "path",
            "required": true,
            "description": "Alarm ID",
            "schema": {
              "type": "string",
              "example": "Qx7LmP2vRt9K"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Alarm"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          },
          "503": {
            "$ref": "#/components/responses/AlarmServiceUnavailable"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "alarms:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateAlarm",
        "summary": "Update an alarm",
        "description": "Updates an alarm's settings.",
        "tags": [
          "Alarms"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "alarm_id",
            "in": "path",
            "required": true,
            "description": "Alarm ID",
            "schema": {
              "type": "string",
              "example": "Qx7LmP2vRt9K"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlarmUpdateInput"
              },
              "example": {
                "name": "Slow checkouts"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Alarm"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "503": {
            "$ref": "#/components/responses/AlarmServiceUnavailable"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "alarms:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteAlarm",
        "summary": "Delete an alarm",
        "description": "Deletes an alarm.",
        "tags": [
          "Alarms"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "alarm_id",
            "in": "path",
            "required": true,
            "description": "Alarm ID",
            "schema": {
              "type": "string",
              "example": "Qx7LmP2vRt9K"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Alarm deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          },
          "503": {
            "$ref": "#/components/responses/AlarmServiceUnavailable"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "alarms:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/alarms/{alarm_id}/history": {
      "get": {
        "operationId": "listAlarmHistory",
        "summary": "List alarm trigger history",
        "description": "Returns an alarm's trigger history, newest first, 25 per page.\n",
        "tags": [
          "Alarms"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "alarm_id",
            "in": "path",
            "required": true,
            "description": "Alarm ID",
            "schema": {
              "type": "string",
              "example": "Qx7LmP2vRt9K"
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/AlarmHistoryEntry"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          },
          "503": {
            "$ref": "#/components/responses/AlarmServiceUnavailable"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "alarms:read"
            ]
          }
        ]
      }
    },
    "/teams": {
      "get": {
        "operationId": "listTeams",
        "summary": "List teams",
        "description": "Returns a list of teams for the account.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "description": "Exact team name to match. Omit or leave blank to list all accessible teams.",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Team"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createTeam",
        "summary": "Create a team",
        "description": "Creates a new team in the account.",
        "tags": [
          "Teams"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamCreateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Team created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Team"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      }
    },
    "/teams/{team_id}": {
      "get": {
        "operationId": "getTeam",
        "summary": "Get a team",
        "description": "Returns a single team.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "description": "Team ID",
            "schema": {
              "type": "string",
              "example": "Tm8qJv"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Team"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateTeam",
        "summary": "Update a team",
        "description": "Updates a team's settings.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "description": "Team ID",
            "schema": {
              "type": "string",
              "example": "Tm8qJv"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamInput"
              },
              "example": {
                "name": "Platform"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Team"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteTeam",
        "summary": "Delete a team",
        "description": "Deletes a team.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "description": "Team ID",
            "schema": {
              "type": "string",
              "example": "Tm8qJv"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Team deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      }
    },
    "/teams/{team_id}/members": {
      "get": {
        "operationId": "listTeamMembers",
        "summary": "List team members",
        "description": "Returns a list of members for a team.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "description": "Team ID",
            "schema": {
              "type": "string",
              "example": "Tm8qJv"
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TeamMember"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:read"
            ]
          }
        ]
      }
    },
    "/teams/{team_id}/members/{member_id}": {
      "get": {
        "operationId": "getTeamMember",
        "summary": "Get a team member",
        "description": "Returns a single team member.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "description": "Team ID",
            "schema": {
              "type": "string",
              "example": "Tm8qJv"
            }
          },
          {
            "name": "member_id",
            "in": "path",
            "required": true,
            "description": "Member ID",
            "schema": {
              "type": "string",
              "example": "Mm5rWk"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/TeamMember"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateTeamMember",
        "summary": "Update a team member",
        "description": "Updates a team member's role.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "description": "Team ID",
            "schema": {
              "type": "string",
              "example": "Tm8qJv"
            }
          },
          {
            "name": "member_id",
            "in": "path",
            "required": true,
            "description": "Member ID",
            "schema": {
              "type": "string",
              "example": "Mm5rWk"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamMemberInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/TeamMember"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteTeamMember",
        "summary": "Remove a team member",
        "description": "Removes a member from the team.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "description": "Team ID",
            "schema": {
              "type": "string",
              "example": "Tm8qJv"
            }
          },
          {
            "name": "member_id",
            "in": "path",
            "required": true,
            "description": "Member ID",
            "schema": {
              "type": "string",
              "example": "Mm5rWk"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Member removed"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      }
    },
    "/teams/{team_id}/invitations": {
      "get": {
        "operationId": "listTeamInvitations",
        "summary": "List team invitations",
        "description": "Returns a list of pending invitations for a team.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "description": "Team ID",
            "schema": {
              "type": "string",
              "example": "Tm8qJv"
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TeamInvitation"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createTeamInvitation",
        "summary": "Create a team invitation",
        "description": "Invites a user to a team.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "description": "Team ID",
            "schema": {
              "type": "string",
              "example": "Tm8qJv"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamInvitationCreateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Invitation created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/TeamInvitation"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      }
    },
    "/teams/{team_id}/invitations/{invitation_id}": {
      "get": {
        "operationId": "getTeamInvitation",
        "summary": "Get a team invitation",
        "description": "Returns a single team invitation.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "description": "Team ID",
            "schema": {
              "type": "string",
              "example": "Tm8qJv"
            }
          },
          {
            "name": "invitation_id",
            "in": "path",
            "required": true,
            "description": "Invitation ID",
            "schema": {
              "type": "string",
              "example": "Ti2hNp"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/TeamInvitation"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateTeamInvitation",
        "summary": "Update a team invitation",
        "description": "Updates a pending team invitation.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "description": "Team ID",
            "schema": {
              "type": "string",
              "example": "Tm8qJv"
            }
          },
          {
            "name": "invitation_id",
            "in": "path",
            "required": true,
            "description": "Invitation ID",
            "schema": {
              "type": "string",
              "example": "Ti2hNp"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamInvitationInput"
              },
              "example": {
                "admin": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/TeamInvitation"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteTeamInvitation",
        "summary": "Delete a team invitation",
        "description": "Cancels a pending team invitation.",
        "tags": [
          "Teams"
        ],
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "description": "Team ID",
            "schema": {
              "type": "string",
              "example": "Tm8qJv"
            }
          },
          {
            "name": "invitation_id",
            "in": "path",
            "required": true,
            "description": "Invitation ID",
            "schema": {
              "type": "string",
              "example": "Ti2hNp"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Invitation deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "team:write"
            ]
          }
        ]
      }
    },
    "/status_pages": {
      "get": {
        "operationId": "listStatusPages",
        "summary": "List status pages",
        "description": "Returns a list of status pages for the account.",
        "tags": [
          "Status pages"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/StatusPage"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "status_pages:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createStatusPage",
        "summary": "Create a status page",
        "description": "Creates a status page.\n",
        "tags": [
          "Status pages"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StatusPageCreateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Status page created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/StatusPage"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "status_pages:write"
            ]
          }
        ]
      }
    },
    "/status_pages/{status_page_id}": {
      "get": {
        "operationId": "getStatusPage",
        "summary": "Get a status page",
        "description": "Returns a single status page.",
        "tags": [
          "Status pages"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/StatusPage"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "status_pages:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateStatusPage",
        "summary": "Update a status page",
        "description": "Updates a status page's settings.",
        "tags": [
          "Status pages"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StatusPageInput"
              },
              "example": {
                "name": "Acme status"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/StatusPage"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "status_pages:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteStatusPage",
        "summary": "Delete a status page",
        "description": "Deletes a status page.",
        "tags": [
          "Status pages"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Status page deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "status_pages:write"
            ]
          }
        ]
      }
    },
    "/status_pages/{status_page_id}/incidents": {
      "get": {
        "operationId": "listStatusPageIncidents",
        "summary": "List incidents",
        "description": "Returns a list of incidents for a status page.",
        "tags": [
          "Incidents"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Before"
          },
          {
            "$ref": "#/components/parameters/After"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/StatusPageIncident"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/TimeSeriesPagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/TimeSeriesLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "incidents:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createStatusPageIncident",
        "summary": "Create an incident",
        "description": "Creates an incident on a status page. An incident needs at least one update, and its prose, status and severity come from its updates.\n",
        "tags": [
          "Incidents"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StatusPageIncidentCreateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Incident created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/StatusPageIncident"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "incidents:write"
            ]
          }
        ]
      }
    },
    "/status_pages/{status_page_id}/incidents/{incident_id}": {
      "get": {
        "operationId": "getStatusPageIncident",
        "summary": "Get an incident",
        "description": "Returns a single incident.",
        "tags": [
          "Incidents"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          },
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "description": "Incident ID",
            "schema": {
              "type": "string",
              "example": "In3pKr"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/StatusPageIncident"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "incidents:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateStatusPageIncident",
        "summary": "Update an incident",
        "description": "Updates an incident's details. Its status, severity and `closed_at` come from its updates, so change those by posting or editing an update. `build_type` can't be changed.\n",
        "tags": [
          "Incidents"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          },
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "description": "Incident ID",
            "schema": {
              "type": "string",
              "example": "In3pKr"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StatusPageIncidentUpdateInput"
              },
              "example": {
                "title": "Elevated error rates on checkout"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/StatusPageIncident"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "incidents:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteStatusPageIncident",
        "summary": "Delete an incident",
        "description": "Deletes an incident from a status page.",
        "tags": [
          "Incidents"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          },
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "description": "Incident ID",
            "schema": {
              "type": "string",
              "example": "In3pKr"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Incident deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "incidents:write"
            ]
          }
        ]
      }
    },
    "/status_pages/{status_page_id}/incidents/{incident_id}/updates": {
      "get": {
        "operationId": "listIncidentUpdates",
        "summary": "List incident updates",
        "description": "Returns a list of updates for an incident.",
        "tags": [
          "Incidents"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          },
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "description": "Incident ID",
            "schema": {
              "type": "string",
              "example": "In3pKr"
            }
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Before"
          },
          {
            "$ref": "#/components/parameters/After"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/IncidentUpdate"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/TimeSeriesPagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/TimeSeriesLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "incidents:read"
            ]
          }
        ]
      },
      "post": {
        "operationId": "createIncidentUpdate",
        "summary": "Create an incident update",
        "description": "Posts an update to an incident.",
        "tags": [
          "Incidents"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          },
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "description": "Incident ID",
            "schema": {
              "type": "string",
              "example": "In3pKr"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IncidentUpdateInput"
              },
              "example": {
                "message": "We found the cause and are rolling back.",
                "status": "identified"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Update created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IncidentUpdate"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "incidents:write"
            ]
          }
        ]
      }
    },
    "/status_pages/{status_page_id}/incidents/{incident_id}/updates/{update_id}": {
      "get": {
        "operationId": "getIncidentUpdate",
        "summary": "Get an incident update",
        "description": "Returns a single incident update.",
        "tags": [
          "Incidents"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          },
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "description": "Incident ID",
            "schema": {
              "type": "string",
              "example": "In3pKr"
            }
          },
          {
            "name": "update_id",
            "in": "path",
            "required": true,
            "description": "Update ID",
            "schema": {
              "type": "string",
              "example": "Iu6tMn"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IncidentUpdate"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "incidents:read"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "updateIncidentUpdate",
        "summary": "Update an incident update",
        "description": "Updates an incident update.\n",
        "tags": [
          "Incidents"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          },
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "description": "Incident ID",
            "schema": {
              "type": "string",
              "example": "In3pKr"
            }
          },
          {
            "name": "update_id",
            "in": "path",
            "required": true,
            "description": "Update ID",
            "schema": {
              "type": "string",
              "example": "Iu6tMn"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IncidentUpdateInput"
              },
              "example": {
                "message": "The rollback is done and error rates are back to normal."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IncidentUpdate"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "incidents:write"
            ]
          }
        ]
      },
      "delete": {
        "operationId": "deleteIncidentUpdate",
        "summary": "Delete an incident update",
        "description": "Deletes an incident update. An incident must keep at least one update, so its only update can't be deleted.",
        "tags": [
          "Incidents"
        ],
        "parameters": [
          {
            "name": "status_page_id",
            "in": "path",
            "required": true,
            "description": "Status page ID",
            "schema": {
              "type": "string",
              "example": "Sp7bMq"
            }
          },
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "description": "Incident ID",
            "schema": {
              "type": "string",
              "example": "In3pKr"
            }
          },
          {
            "name": "update_id",
            "in": "path",
            "required": true,
            "description": "Update ID",
            "schema": {
              "type": "string",
              "example": "Iu6tMn"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Update deleted"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "incidents:write"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/streams": {
      "get": {
        "operationId": "listStreams",
        "summary": "List event streams",
        "description": "Returns the project's Insights event streams: `default`, for events your applications send, and `internal`, for events Honeybadger records about the project (errors, deploys, uptime checks and check-ins). A new project's streams can take a moment to appear.\n",
        "tags": [
          "Streams"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/PerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Stream"
                      }
                    },
                    "pagination": {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    "links": {
                      "$ref": "#/components/schemas/OffsetLinks"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/AmbiguousAccount"
          },
          "429": {
            "$ref": "#/components/responses/RateLimitExceeded"
          }
        },
        "security": [
          {
            "bearer_auth": [
              "insights:read"
            ]
          }
        ]
      }
    },
    "/projects/{project_id}/insights/queries": {
      "post": {
        "operationId": "runInsightsQuery",
        "summary": "Run an Insights query",
        "description": "Runs a BadgerQL query against the project's event streams and returns the result. It's a POST, but it changes nothing.\n\nPass `stream_ids` to choose streams, or leave it out to search them all. Events on a stream that isn't selected return no rows. See [BadgerQL](https://docs.honeybadger.io/guides/insights/badgerql/) for the query language.\n",
        "tags": [
          "Insights"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ProjectId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "query"
                ],
                "additionalProperties": false,
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "BadgerQL query",
                    "example": "@size > 0 | limit 10"
                  },
                  "stream_ids": {
                    "type": "array",
                    "description": "Streams to search. Omit it, or pass an empty array, to search every stream on the project. Every ID must belong to this project; repeated IDs are deduplicated.\n",
                    "items": {
                      "type": "string"
                    }
                  },
                  "ts": {
                    "type": "string",
                    "description": "Time range for the query",
                    "example": "1h"
                  },
                  "timezone": {
                    "type": "string",
                    "description": "Timezone for time bucketing and display",
                    "example": "UTC"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The query result. Its fields depend on the query: an aggregation returns different fields from an event listing.\n\n`links.web` opens this query in the Honeybadger web UI, with the request's `ts`, `stream_ids` and `timezone` (UTC when none was sent). Present even when `data` carries an `error` from a query that failed while running.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "links"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "description": "The query result; its fields depend on the query.",
                      "additionalProperties": true
                    },
                    "links": {
                      "allOf": [
                        {
                          "$ref": "#/components/schemas/WebLinks"
                        }
                      ],
                      "description": "Opens this query in Insights."
                    },
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "description": "The query was rejected. For a syntax or semantic error, `error.message` explains it and `error` may carry more keys. Also returned when `query` is missing or not a string, when `stream_ids` isn't an array of strings, or when a stream ID isn't one of the project's.\n",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Error"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "error": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimitExceeded"
          },
          "503": {
            "description": "Insights didn't answer. Retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": [
              "insights:read"
            ]
          }
        ]
      }
    }
  },
  "webhooks": {
    "occurred": {
      "post": {
        "summary": "Error occurred",
        "x-hb": {
          "group": "Error tracking"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2OccurredEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3OccurredEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "occurred (v2, the default)",
                  "value": {
                    "event": "occurred",
                    "message": "[Billing API/production] NoMethodError: undefined method 'total' for nil",
                    "project": {
                      "id": 85736,
                      "name": "Billing API",
                      "created_at": "2026-10-21T12:36:26.076894Z",
                      "disable_public_links": false,
                      "pivotal_project_id": null,
                      "asana_workspace_id": null,
                      "token": "hbp_EXAMPLE00000000000000000000000",
                      "github_project": null,
                      "environments": [
                        {
                          "id": 2819,
                          "project_id": 85736,
                          "name": "production",
                          "notifications": true,
                          "created_at": "2026-10-21T12:36:26.470494Z",
                          "updated_at": "2026-10-21T12:36:26.470494Z"
                        }
                      ],
                      "owner": {
                        "id": 92354,
                        "email": "user-1@example.com",
                        "name": "Acme"
                      },
                      "last_notice_at": null,
                      "earliest_notice_at": "2026-04-24T12:36:26.729872Z",
                      "unresolved_fault_count": 0,
                      "fault_count": 0,
                      "active": true,
                      "users": [
                        {
                          "id": 132624,
                          "email": "jane@example.com",
                          "name": "Jane Doe"
                        }
                      ],
                      "sites": [
                        {
                          "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                          "active": true,
                          "last_checked_at": null,
                          "name": "Checkout",
                          "state": "down",
                          "url": "https://billing.example.com/health"
                        }
                      ],
                      "team_id": null
                    },
                    "fault": {
                      "project_id": 85736,
                      "klass": "NoMethodError",
                      "component": "InvoicesController",
                      "action": "show",
                      "environment": "production",
                      "resolved": false,
                      "ignored": false,
                      "created_at": "2026-10-18T12:36:26.482113Z",
                      "project_name": "Billing API",
                      "comments_count": 1,
                      "message": "undefined method 'total' for nil",
                      "notices_count": 1,
                      "last_notice_at": "2026-10-21T12:36:26.309680Z",
                      "tags": [
                        "billing"
                      ],
                      "id": 26225,
                      "assignee": null,
                      "url": "https://app.honeybadger.io/projects/85736/faults/26225",
                      "deploy": {
                        "environment": "production",
                        "revision": "850510ab072102729e6967cf89f28b740c61311b",
                        "repository": "https://github.com/acme/billing",
                        "local_username": "deploy-bot",
                        "created_at": "2026-10-21T12:16:26.482113Z",
                        "changelog": [],
                        "url": "https://github.com/acme/billing/commit/850510ab072102729e6967cf89f28b740c61311b"
                      }
                    },
                    "notice": {
                      "id": 262251792586066,
                      "environment": {},
                      "created_at": "2026-10-21T12:34:26.482113Z",
                      "message": null,
                      "token": "65baebe0-d5cf-45d1-8604-c3a78619def7",
                      "fault_id": 26225,
                      "request": {
                        "url": "https://billing.example.com/invoices/1042",
                        "component": "InvoicesController",
                        "action": "show",
                        "params": {
                          "controller": "invoices",
                          "action": "show",
                          "id": "1042"
                        },
                        "session": {}
                      },
                      "backtrace": [
                        {
                          "number": "42",
                          "file": "[PROJECT_ROOT]/app/controllers/invoices_controller.rb",
                          "method": "show",
                          "application_file": "app/controllers/invoices_controller.rb",
                          "context": "app"
                        },
                        {
                          "number": "18",
                          "file": "[GEM_ROOT]/gems/actionpack-8.1.0/lib/action_controller/metal/basic_implicit_render.rb",
                          "method": "send_action",
                          "context": "all"
                        }
                      ],
                      "application_trace": [
                        {
                          "number": "42",
                          "file": "[PROJECT_ROOT]/app/controllers/invoices_controller.rb",
                          "method": "show",
                          "application_file": "app/controllers/invoices_controller.rb",
                          "context": "app"
                        }
                      ],
                      "web_environment": {
                        "REQUEST_METHOD": "GET",
                        "HTTP_USER_AGENT": "Mozilla/5.0"
                      },
                      "deploy": {
                        "environment": "production",
                        "revision": "850510ab072102729e6967cf89f28b740c61311b",
                        "repository": "https://github.com/acme/billing",
                        "local_username": "deploy-bot",
                        "created_at": "2026-10-21T12:16:26.482113Z",
                        "changelog": [],
                        "url": "https://github.com/acme/billing/commit/850510ab072102729e6967cf89f28b740c61311b"
                      },
                      "url": "https://app.honeybadger.io/projects/85736/faults/26225/01M5F79AHJ6GVQCB5TZ2R0QMKZ"
                    },
                    "context": {
                      "user_id": 381
                    }
                  }
                },
                "v3": {
                  "summary": "occurred (v3)",
                  "value": {
                    "event": "occurred",
                    "message": "[Billing API/production] NoMethodError: undefined method 'total' for nil",
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "fault": {
                      "id": "26225",
                      "project_id": "H99upHsM",
                      "klass": "NoMethodError",
                      "message": "undefined method 'total' for nil",
                      "component": "InvoicesController",
                      "action": "show",
                      "environment": "production",
                      "resolved": false,
                      "ignored": false,
                      "tags": [
                        "billing"
                      ],
                      "assignee": null,
                      "notices_count": 1,
                      "created_at": "2026-10-18T12:36:26Z",
                      "last_notice_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225"
                      }
                    },
                    "notice": {
                      "id": "65baebe0-d5cf-45d1-8604-c3a78619def7",
                      "fault_id": "26225",
                      "project_id": "H99upHsM",
                      "environment": "production",
                      "message": "NoMethodError: undefined method 'total' for nil",
                      "created_at": "2026-10-21T12:34:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225/01M5F79AHJ6GVQCB5TZ2R0QMKZ"
                      }
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "rate_exceeded": {
      "post": {
        "summary": "Error rate exceeded",
        "x-hb": {
          "group": "Error tracking"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2OccurredEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3OccurredEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "rate_exceeded (v2, the default)",
                  "value": {
                    "event": "rate_exceeded",
                    "message": "[Billing API/production] NoMethodError has occurred 5 time(s) in the past minute",
                    "project": {
                      "id": 85736,
                      "name": "Billing API",
                      "created_at": "2026-10-21T12:36:26.076894Z",
                      "disable_public_links": false,
                      "pivotal_project_id": null,
                      "asana_workspace_id": null,
                      "token": "hbp_EXAMPLE00000000000000000000000",
                      "github_project": null,
                      "environments": [
                        {
                          "id": 2819,
                          "project_id": 85736,
                          "name": "production",
                          "notifications": true,
                          "created_at": "2026-10-21T12:36:26.470494Z",
                          "updated_at": "2026-10-21T12:36:26.470494Z"
                        }
                      ],
                      "owner": {
                        "id": 92354,
                        "email": "user-1@example.com",
                        "name": "Acme"
                      },
                      "last_notice_at": null,
                      "earliest_notice_at": "2026-04-24T12:36:26.856141Z",
                      "unresolved_fault_count": 0,
                      "fault_count": 0,
                      "active": true,
                      "users": [
                        {
                          "id": 132624,
                          "email": "jane@example.com",
                          "name": "Jane Doe"
                        }
                      ],
                      "sites": [
                        {
                          "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                          "active": true,
                          "last_checked_at": null,
                          "name": "Checkout",
                          "state": "down",
                          "url": "https://billing.example.com/health"
                        }
                      ],
                      "team_id": null
                    },
                    "fault": {
                      "project_id": 85736,
                      "klass": "NoMethodError",
                      "component": "InvoicesController",
                      "action": "show",
                      "environment": "production",
                      "resolved": false,
                      "ignored": false,
                      "created_at": "2026-10-18T12:36:26.482113Z",
                      "project_name": "Billing API",
                      "comments_count": 1,
                      "message": "undefined method 'total' for nil",
                      "notices_count": 1,
                      "last_notice_at": "2026-10-21T12:36:26.309680Z",
                      "tags": [
                        "billing"
                      ],
                      "id": 26225,
                      "assignee": null,
                      "url": "https://app.honeybadger.io/projects/85736/faults/26225",
                      "deploy": {
                        "environment": "production",
                        "revision": "850510ab072102729e6967cf89f28b740c61311b",
                        "repository": "https://github.com/acme/billing",
                        "local_username": "deploy-bot",
                        "created_at": "2026-10-21T12:16:26.482113Z",
                        "changelog": [],
                        "url": "https://github.com/acme/billing/commit/850510ab072102729e6967cf89f28b740c61311b"
                      }
                    },
                    "notice": {
                      "id": 262251792586066,
                      "environment": {},
                      "created_at": "2026-10-21T12:34:26.482113Z",
                      "message": null,
                      "token": "65baebe0-d5cf-45d1-8604-c3a78619def7",
                      "fault_id": 26225,
                      "request": {
                        "url": "https://billing.example.com/invoices/1042",
                        "component": "InvoicesController",
                        "action": "show",
                        "params": {
                          "controller": "invoices",
                          "action": "show",
                          "id": "1042"
                        },
                        "session": {}
                      },
                      "backtrace": [
                        {
                          "number": "42",
                          "file": "[PROJECT_ROOT]/app/controllers/invoices_controller.rb",
                          "method": "show",
                          "application_file": "app/controllers/invoices_controller.rb",
                          "context": "app"
                        },
                        {
                          "number": "18",
                          "file": "[GEM_ROOT]/gems/actionpack-8.1.0/lib/action_controller/metal/basic_implicit_render.rb",
                          "method": "send_action",
                          "context": "all"
                        }
                      ],
                      "application_trace": [
                        {
                          "number": "42",
                          "file": "[PROJECT_ROOT]/app/controllers/invoices_controller.rb",
                          "method": "show",
                          "application_file": "app/controllers/invoices_controller.rb",
                          "context": "app"
                        }
                      ],
                      "web_environment": {
                        "REQUEST_METHOD": "GET",
                        "HTTP_USER_AGENT": "Mozilla/5.0"
                      },
                      "deploy": {
                        "environment": "production",
                        "revision": "850510ab072102729e6967cf89f28b740c61311b",
                        "repository": "https://github.com/acme/billing",
                        "local_username": "deploy-bot",
                        "created_at": "2026-10-21T12:16:26.482113Z",
                        "changelog": [],
                        "url": "https://github.com/acme/billing/commit/850510ab072102729e6967cf89f28b740c61311b"
                      },
                      "url": "https://app.honeybadger.io/projects/85736/faults/26225/01M5F79AHJ6GVQCB5TZ2R0QMKZ"
                    },
                    "context": {
                      "user_id": 381
                    }
                  }
                },
                "v3": {
                  "summary": "rate_exceeded (v3)",
                  "value": {
                    "event": "rate_exceeded",
                    "message": "[Billing API/production] NoMethodError has occurred 5 time(s) in the past minute",
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "fault": {
                      "id": "26225",
                      "project_id": "H99upHsM",
                      "klass": "NoMethodError",
                      "message": "undefined method 'total' for nil",
                      "component": "InvoicesController",
                      "action": "show",
                      "environment": "production",
                      "resolved": false,
                      "ignored": false,
                      "tags": [
                        "billing"
                      ],
                      "assignee": null,
                      "notices_count": 1,
                      "created_at": "2026-10-18T12:36:26Z",
                      "last_notice_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225"
                      }
                    },
                    "notice": {
                      "id": "65baebe0-d5cf-45d1-8604-c3a78619def7",
                      "fault_id": "26225",
                      "project_id": "H99upHsM",
                      "environment": "production",
                      "message": "NoMethodError: undefined method 'total' for nil",
                      "created_at": "2026-10-21T12:34:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225/01M5F79AHJ6GVQCB5TZ2R0QMKZ"
                      }
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "resolved": {
      "post": {
        "summary": "Error resolved",
        "x-hb": {
          "group": "Error tracking"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2ResolutionEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3ResolutionEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "resolved (v2, the default)",
                  "value": {
                    "event": "resolved",
                    "message": "[Billing API/production] NoMethodError resolved by Jane Doe",
                    "actor": {
                      "id": 132624,
                      "email": "jane@example.com",
                      "name": "Jane Doe"
                    },
                    "fault": {
                      "project_id": 85736,
                      "klass": "NoMethodError",
                      "component": "InvoicesController",
                      "action": "show",
                      "environment": "production",
                      "resolved": true,
                      "ignored": false,
                      "created_at": "2026-10-18T12:36:26.482113Z",
                      "project_name": "Billing API",
                      "comments_count": 1,
                      "message": "undefined method 'total' for nil",
                      "notices_count": 1,
                      "last_notice_at": "2026-10-21T12:36:26.309680Z",
                      "tags": [
                        "billing"
                      ],
                      "id": 26225,
                      "assignee": null,
                      "url": "https://app.honeybadger.io/projects/85736/faults/26225",
                      "deploy": {
                        "environment": "production",
                        "revision": "850510ab072102729e6967cf89f28b740c61311b",
                        "repository": "https://github.com/acme/billing",
                        "local_username": "deploy-bot",
                        "created_at": "2026-10-21T12:16:26.482113Z",
                        "changelog": [],
                        "url": "https://github.com/acme/billing/commit/850510ab072102729e6967cf89f28b740c61311b"
                      }
                    }
                  }
                },
                "v3": {
                  "summary": "resolved (v3)",
                  "value": {
                    "event": "resolved",
                    "message": "[Billing API/production] NoMethodError resolved by Jane Doe",
                    "actor": {
                      "id": "DDiJ4d5",
                      "name": "Jane Doe",
                      "email": "jane@example.com"
                    },
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "fault": {
                      "id": "26225",
                      "project_id": "H99upHsM",
                      "klass": "NoMethodError",
                      "message": "undefined method 'total' for nil",
                      "component": "InvoicesController",
                      "action": "show",
                      "environment": "production",
                      "resolved": true,
                      "ignored": false,
                      "tags": [
                        "billing"
                      ],
                      "assignee": null,
                      "notices_count": 1,
                      "created_at": "2026-10-18T12:36:26Z",
                      "last_notice_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225"
                      }
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "unresolved": {
      "post": {
        "summary": "Error reopened",
        "x-hb": {
          "group": "Error tracking"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2ResolutionEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3ResolutionEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "unresolved (v2, the default)",
                  "value": {
                    "event": "unresolved",
                    "message": "[Billing API/production] NoMethodError unresolved by Jane Doe",
                    "actor": {
                      "id": 132624,
                      "email": "jane@example.com",
                      "name": "Jane Doe"
                    },
                    "fault": {
                      "project_id": 85736,
                      "klass": "NoMethodError",
                      "component": "InvoicesController",
                      "action": "show",
                      "environment": "production",
                      "resolved": false,
                      "ignored": false,
                      "created_at": "2026-10-18T12:36:26.482113Z",
                      "project_name": "Billing API",
                      "comments_count": 1,
                      "message": "undefined method 'total' for nil",
                      "notices_count": 1,
                      "last_notice_at": "2026-10-21T12:36:26.309680Z",
                      "tags": [
                        "billing"
                      ],
                      "id": 26225,
                      "assignee": null,
                      "url": "https://app.honeybadger.io/projects/85736/faults/26225",
                      "deploy": {
                        "environment": "production",
                        "revision": "850510ab072102729e6967cf89f28b740c61311b",
                        "repository": "https://github.com/acme/billing",
                        "local_username": "deploy-bot",
                        "created_at": "2026-10-21T12:16:26.482113Z",
                        "changelog": [],
                        "url": "https://github.com/acme/billing/commit/850510ab072102729e6967cf89f28b740c61311b"
                      }
                    }
                  }
                },
                "v3": {
                  "summary": "unresolved (v3)",
                  "value": {
                    "event": "unresolved",
                    "message": "[Billing API/production] NoMethodError unresolved by Jane Doe",
                    "actor": {
                      "id": "DDiJ4d5",
                      "name": "Jane Doe",
                      "email": "jane@example.com"
                    },
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "fault": {
                      "id": "26225",
                      "project_id": "H99upHsM",
                      "klass": "NoMethodError",
                      "message": "undefined method 'total' for nil",
                      "component": "InvoicesController",
                      "action": "show",
                      "environment": "production",
                      "resolved": false,
                      "ignored": false,
                      "tags": [
                        "billing"
                      ],
                      "assignee": null,
                      "notices_count": 1,
                      "created_at": "2026-10-18T12:36:26Z",
                      "last_notice_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225"
                      }
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "assigned": {
      "post": {
        "summary": "Error assigned",
        "x-hb": {
          "group": "Error tracking"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2AssignedEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3AssignedEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "assigned (v2, the default)",
                  "value": {
                    "event": "assigned",
                    "message": "[Billing API/production] NoMethodError assigned to Jane Doe by Jane Doe",
                    "actor": {
                      "id": 132624,
                      "email": "jane@example.com",
                      "name": "Jane Doe"
                    },
                    "fault": {
                      "project_id": 85736,
                      "klass": "NoMethodError",
                      "component": "InvoicesController",
                      "action": "show",
                      "environment": "production",
                      "resolved": false,
                      "ignored": false,
                      "created_at": "2026-10-18T12:36:26.482113Z",
                      "project_name": "Billing API",
                      "comments_count": 1,
                      "message": "undefined method 'total' for nil",
                      "notices_count": 1,
                      "last_notice_at": "2026-10-21T12:36:26.309680Z",
                      "tags": [
                        "billing"
                      ],
                      "id": 26225,
                      "assignee": "jane@example.com",
                      "url": "https://app.honeybadger.io/projects/85736/faults/26225",
                      "deploy": {
                        "environment": "production",
                        "revision": "850510ab072102729e6967cf89f28b740c61311b",
                        "repository": "https://github.com/acme/billing",
                        "local_username": "deploy-bot",
                        "created_at": "2026-10-21T12:16:26.482113Z",
                        "changelog": [],
                        "url": "https://github.com/acme/billing/commit/850510ab072102729e6967cf89f28b740c61311b"
                      }
                    },
                    "assignee": {
                      "id": 132624,
                      "email": "jane@example.com",
                      "name": "Jane Doe"
                    }
                  }
                },
                "v3": {
                  "summary": "assigned (v3)",
                  "value": {
                    "event": "assigned",
                    "message": "[Billing API/production] NoMethodError assigned to Jane Doe by Jane Doe",
                    "actor": {
                      "id": "DDiJ4d5",
                      "name": "Jane Doe",
                      "email": "jane@example.com"
                    },
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "fault": {
                      "id": "26225",
                      "project_id": "H99upHsM",
                      "klass": "NoMethodError",
                      "message": "undefined method 'total' for nil",
                      "component": "InvoicesController",
                      "action": "show",
                      "environment": "production",
                      "resolved": false,
                      "ignored": false,
                      "tags": [
                        "billing"
                      ],
                      "assignee": {
                        "id": "DDiJ4d5",
                        "name": "Jane Doe",
                        "email": "jane@example.com"
                      },
                      "notices_count": 1,
                      "created_at": "2026-10-18T12:36:26Z",
                      "last_notice_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225"
                      }
                    },
                    "assignee": {
                      "id": "DDiJ4d5",
                      "name": "Jane Doe",
                      "email": "jane@example.com"
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "commented": {
      "post": {
        "summary": "Comment added",
        "x-hb": {
          "group": "Error tracking"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2CommentedEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3CommentedEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "commented (v2, the default)",
                  "value": {
                    "event": "commented",
                    "message": "[Billing API/production] Jane Doe commented on NoMethodError: Looking into this now.",
                    "actor": {
                      "id": 132624,
                      "email": "jane@example.com",
                      "name": "Jane Doe"
                    },
                    "fault": {
                      "project_id": 85736,
                      "klass": "NoMethodError",
                      "component": "InvoicesController",
                      "action": "show",
                      "environment": "production",
                      "resolved": false,
                      "ignored": false,
                      "created_at": "2026-10-18T12:36:26.482113Z",
                      "project_name": "Billing API",
                      "comments_count": 1,
                      "message": "undefined method 'total' for nil",
                      "notices_count": 1,
                      "last_notice_at": "2026-10-21T12:36:26.309680Z",
                      "tags": [
                        "billing"
                      ],
                      "id": 26225,
                      "assignee": "jane@example.com",
                      "url": "https://app.honeybadger.io/projects/85736/faults/26225",
                      "deploy": {
                        "environment": "production",
                        "revision": "850510ab072102729e6967cf89f28b740c61311b",
                        "repository": "https://github.com/acme/billing",
                        "local_username": "deploy-bot",
                        "created_at": "2026-10-21T12:16:26.482113Z",
                        "changelog": [],
                        "url": "https://github.com/acme/billing/commit/850510ab072102729e6967cf89f28b740c61311b"
                      }
                    },
                    "comment": {
                      "id": 2236,
                      "fault_id": 26225,
                      "event": null,
                      "source": "web",
                      "created_at": "2026-10-21T12:36:26.357793Z",
                      "email": null,
                      "author": "Jane Doe",
                      "body": "Looking into this now."
                    }
                  }
                },
                "v3": {
                  "summary": "commented (v3)",
                  "value": {
                    "event": "commented",
                    "message": "[Billing API/production] Jane Doe commented on NoMethodError: Looking into this now.",
                    "actor": {
                      "id": "DDiJ4d5",
                      "name": "Jane Doe",
                      "email": "jane@example.com"
                    },
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "fault": {
                      "id": "26225",
                      "project_id": "H99upHsM",
                      "klass": "NoMethodError",
                      "message": "undefined method 'total' for nil",
                      "component": "InvoicesController",
                      "action": "show",
                      "environment": "production",
                      "resolved": false,
                      "ignored": false,
                      "tags": [
                        "billing"
                      ],
                      "assignee": {
                        "id": "DDiJ4d5",
                        "name": "Jane Doe",
                        "email": "jane@example.com"
                      },
                      "notices_count": 1,
                      "created_at": "2026-10-18T12:36:26Z",
                      "last_notice_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225"
                      }
                    },
                    "comment": {
                      "id": "Mo6nm8kUsjuh",
                      "fault_id": "26225",
                      "body": "Looking into this now.",
                      "source": "web",
                      "created_at": "2026-10-21T12:36:26Z",
                      "author": {
                        "id": "DDiJ4d5",
                        "name": "Jane Doe",
                        "email": "jane@example.com"
                      },
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225#comment_2236"
                      }
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/faults/26225#comment_2236"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "deployed": {
      "post": {
        "summary": "Deploy recorded",
        "x-hb": {
          "group": "Error tracking"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2DeployedEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3DeployedEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "deployed (v2, the default)",
                  "value": {
                    "event": "deployed",
                    "message": "[Billing API/production] deploy-bot deployed Billing API to production",
                    "project": {
                      "id": 85736,
                      "name": "Billing API",
                      "created_at": "2026-10-21T12:36:26.076894Z",
                      "disable_public_links": false,
                      "pivotal_project_id": null,
                      "asana_workspace_id": null,
                      "token": "hbp_EXAMPLE00000000000000000000000",
                      "github_project": null,
                      "environments": [
                        {
                          "id": 2819,
                          "project_id": 85736,
                          "name": "production",
                          "notifications": true,
                          "created_at": "2026-10-21T12:36:26.470494Z",
                          "updated_at": "2026-10-21T12:36:26.470494Z"
                        }
                      ],
                      "owner": {
                        "id": 92354,
                        "email": "user-1@example.com",
                        "name": "Acme"
                      },
                      "last_notice_at": null,
                      "earliest_notice_at": "2026-04-24T12:36:27.505453Z",
                      "unresolved_fault_count": 0,
                      "fault_count": 0,
                      "active": true,
                      "users": [
                        {
                          "id": 132624,
                          "email": "jane@example.com",
                          "name": "Jane Doe"
                        }
                      ],
                      "sites": [
                        {
                          "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                          "active": true,
                          "last_checked_at": null,
                          "name": "Checkout",
                          "state": "down",
                          "url": "https://billing.example.com/health"
                        }
                      ],
                      "team_id": null
                    },
                    "deploy": {
                      "environment": "production",
                      "revision": "850510ab072102729e6967cf89f28b740c61311b",
                      "repository": "https://github.com/acme/billing",
                      "local_username": "deploy-bot",
                      "created_at": "2026-10-21T12:16:26.482113Z",
                      "changelog": [],
                      "url": "https://github.com/acme/billing/commit/850510ab072102729e6967cf89f28b740c61311b"
                    }
                  }
                },
                "v3": {
                  "summary": "deployed (v3)",
                  "value": {
                    "event": "deployed",
                    "message": "[Billing API/production] deploy-bot deployed Billing API to production",
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "deploy": {
                      "id": "npElcwM0Gdh1",
                      "project_id": "H99upHsM",
                      "environment": "production",
                      "revision": "850510ab072102729e6967cf89f28b740c61311b",
                      "repository": "https://github.com/acme/billing",
                      "local_username": "deploy-bot",
                      "created_at": "2026-10-21T12:16:26Z"
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/deploys?environment=production"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "down": {
      "post": {
        "summary": "Site went down",
        "x-hb": {
          "group": "Uptime monitoring"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2OutageEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3OutageEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "down (v2, the default)",
                  "value": {
                    "event": "down",
                    "message": "[Billing API] Checkout is down.",
                    "project": {
                      "id": 85736,
                      "name": "Billing API",
                      "created_at": "2026-10-21T12:36:26.076894Z",
                      "disable_public_links": false,
                      "pivotal_project_id": null,
                      "asana_workspace_id": null,
                      "token": "hbp_EXAMPLE00000000000000000000000",
                      "github_project": null,
                      "environments": [
                        {
                          "id": 2819,
                          "project_id": 85736,
                          "name": "production",
                          "notifications": true,
                          "created_at": "2026-10-21T12:36:26.470494Z",
                          "updated_at": "2026-10-21T12:36:26.470494Z"
                        }
                      ],
                      "owner": {
                        "id": 92354,
                        "email": "user-1@example.com",
                        "name": "Acme"
                      },
                      "last_notice_at": null,
                      "earliest_notice_at": "2026-04-24T12:36:27.614653Z",
                      "unresolved_fault_count": 0,
                      "fault_count": 0,
                      "active": true,
                      "users": [
                        {
                          "id": 132624,
                          "email": "jane@example.com",
                          "name": "Jane Doe"
                        }
                      ],
                      "sites": [
                        {
                          "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                          "active": true,
                          "last_checked_at": "2026-10-21T12:35:26.482113Z",
                          "name": "Checkout",
                          "state": "down",
                          "url": "https://billing.example.com/health"
                        }
                      ],
                      "team_id": null
                    },
                    "site": {
                      "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                      "name": "Checkout",
                      "url": "https://billing.example.com/health",
                      "frequency": 5,
                      "match_type": "success",
                      "match": null,
                      "state": "down",
                      "active": true,
                      "last_checked_at": "2026-10-21T12:35:26.482113Z",
                      "retries": 2,
                      "proxy": 0,
                      "cert_will_expire_at": null,
                      "timeout": null,
                      "response_headers": null,
                      "details_url": "https://app.honeybadger.io/projects/85736/sites/8121ab91-87fd-4e92-ae23-a7b5bf915a2f"
                    },
                    "outage": {
                      "down_at": "2026-10-21T12:29:26.482113Z",
                      "up_at": null,
                      "status": 503,
                      "reason": "Service Unavailable",
                      "headers": {
                        "retry-after": "120",
                        "content-type": "text/html"
                      },
                      "details_url": "https://app.honeybadger.io/projects/85736/sites/8121ab91-87fd-4e92-ae23-a7b5bf915a2f"
                    }
                  }
                },
                "v3": {
                  "summary": "down (v3)",
                  "value": {
                    "event": "down",
                    "message": "[Billing API] Checkout is down.",
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "site": {
                      "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                      "project_id": "H99upHsM",
                      "name": "Checkout",
                      "url": "https://billing.example.com/health",
                      "state": "down",
                      "frequency": 5,
                      "last_checked_at": "2026-10-21T12:35:26Z",
                      "created_at": "2026-09-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/sites/8121ab91-87fd-4e92-ae23-a7b5bf915a2f"
                      }
                    },
                    "outage": {
                      "id": "c2dde716-bcc4-43dc-8212-9fa287505c94",
                      "site_id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                      "down_at": "2026-10-21T12:29:26Z",
                      "up_at": null,
                      "duration_seconds": null,
                      "created_at": "2026-10-21T12:36:26Z"
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/sites/8121ab91-87fd-4e92-ae23-a7b5bf915a2f"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "up": {
      "post": {
        "summary": "Site back up",
        "x-hb": {
          "group": "Uptime monitoring"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2OutageEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3OutageEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "up (v2, the default)",
                  "value": {
                    "event": "up",
                    "message": "[Billing API] Checkout is back up after 7m 1s.",
                    "project": {
                      "id": 85736,
                      "name": "Billing API",
                      "created_at": "2026-10-21T12:36:26.076894Z",
                      "disable_public_links": false,
                      "pivotal_project_id": null,
                      "asana_workspace_id": null,
                      "token": "hbp_EXAMPLE00000000000000000000000",
                      "github_project": null,
                      "environments": [
                        {
                          "id": 2819,
                          "project_id": 85736,
                          "name": "production",
                          "notifications": true,
                          "created_at": "2026-10-21T12:36:26.470494Z",
                          "updated_at": "2026-10-21T12:36:26.470494Z"
                        }
                      ],
                      "owner": {
                        "id": 92354,
                        "email": "user-1@example.com",
                        "name": "Acme"
                      },
                      "last_notice_at": null,
                      "earliest_notice_at": "2026-04-24T12:36:27.720691Z",
                      "unresolved_fault_count": 0,
                      "fault_count": 0,
                      "active": true,
                      "users": [
                        {
                          "id": 132624,
                          "email": "jane@example.com",
                          "name": "Jane Doe"
                        }
                      ],
                      "sites": [
                        {
                          "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                          "active": true,
                          "last_checked_at": "2026-10-21T12:36:26.482113Z",
                          "name": "Checkout",
                          "state": "up",
                          "url": "https://billing.example.com/health"
                        }
                      ],
                      "team_id": null
                    },
                    "site": {
                      "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                      "name": "Checkout",
                      "url": "https://billing.example.com/health",
                      "frequency": 5,
                      "match_type": "success",
                      "match": null,
                      "state": "up",
                      "active": true,
                      "last_checked_at": "2026-10-21T12:36:26.482113Z",
                      "retries": 0,
                      "proxy": 0,
                      "cert_will_expire_at": null,
                      "timeout": null,
                      "response_headers": null,
                      "details_url": "https://app.honeybadger.io/projects/85736/sites/8121ab91-87fd-4e92-ae23-a7b5bf915a2f"
                    },
                    "outage": {
                      "down_at": "2026-10-21T12:29:26.482113Z",
                      "up_at": "2026-10-21T12:36:26.482113Z",
                      "status": 503,
                      "reason": "Service Unavailable",
                      "headers": {
                        "retry-after": "120",
                        "content-type": "text/html"
                      },
                      "details_url": "https://app.honeybadger.io/projects/85736/sites/8121ab91-87fd-4e92-ae23-a7b5bf915a2f"
                    }
                  }
                },
                "v3": {
                  "summary": "up (v3)",
                  "value": {
                    "event": "up",
                    "message": "[Billing API] Checkout is back up after 7m 1s.",
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "site": {
                      "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                      "project_id": "H99upHsM",
                      "name": "Checkout",
                      "url": "https://billing.example.com/health",
                      "state": "up",
                      "frequency": 5,
                      "last_checked_at": "2026-10-21T12:36:26Z",
                      "created_at": "2026-09-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/sites/8121ab91-87fd-4e92-ae23-a7b5bf915a2f"
                      }
                    },
                    "outage": {
                      "id": "c2dde716-bcc4-43dc-8212-9fa287505c94",
                      "site_id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                      "down_at": "2026-10-21T12:29:26Z",
                      "up_at": "2026-10-21T12:36:26Z",
                      "duration_seconds": 420,
                      "created_at": "2026-10-21T12:36:26Z"
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/sites/8121ab91-87fd-4e92-ae23-a7b5bf915a2f"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "cert_will_expire": {
      "post": {
        "summary": "Certificate expiring",
        "x-hb": {
          "group": "Uptime monitoring"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2CertExpirationEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3CertExpirationEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "cert_will_expire (v2, the default)",
                  "value": {
                    "event": "cert_will_expire",
                    "message": "[Billing API] SSL certificate for Checkout will expire on 11/4/2026 23:59:59 UTC",
                    "project": {
                      "id": 85736,
                      "name": "Billing API"
                    },
                    "site": {
                      "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                      "name": "Checkout",
                      "url": "https://billing.example.com/health",
                      "frequency": 5,
                      "match_type": "success",
                      "match": null,
                      "state": "up",
                      "active": true,
                      "last_checked_at": "2026-10-21T12:36:26.482113Z",
                      "retries": 0,
                      "proxy": 0,
                      "cert_will_expire_at": "2026-11-04T23:59:59.000000Z",
                      "timeout": null,
                      "response_headers": null,
                      "details_url": "https://app.honeybadger.io/projects/85736/sites/8121ab91-87fd-4e92-ae23-a7b5bf915a2f"
                    }
                  }
                },
                "v3": {
                  "summary": "cert_will_expire (v3)",
                  "value": {
                    "event": "cert_will_expire",
                    "message": "[Billing API] SSL certificate for Checkout will expire on 11/4/2026 23:59:59 UTC",
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "site": {
                      "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                      "project_id": "H99upHsM",
                      "name": "Checkout",
                      "url": "https://billing.example.com/health",
                      "state": "up",
                      "frequency": 5,
                      "last_checked_at": "2026-10-21T12:36:26Z",
                      "created_at": "2026-09-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/sites/8121ab91-87fd-4e92-ae23-a7b5bf915a2f"
                      }
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/sites/8121ab91-87fd-4e92-ae23-a7b5bf915a2f"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "check_in_missing": {
      "post": {
        "summary": "Check-in missing",
        "x-hb": {
          "group": "Uptime monitoring"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2CheckInEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3CheckInEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "check_in_missing (v2, the default)",
                  "value": {
                    "event": "check_in_missing",
                    "message": "[Billing API] MISSING: Nightly invoice run hasn't checked in for 1 day",
                    "project": {
                      "id": 85736,
                      "name": "Billing API",
                      "created_at": "2026-10-21T12:36:26.076894Z",
                      "disable_public_links": false,
                      "pivotal_project_id": null,
                      "asana_workspace_id": null,
                      "token": "hbp_EXAMPLE00000000000000000000000",
                      "github_project": null,
                      "environments": [
                        {
                          "id": 2819,
                          "project_id": 85736,
                          "name": "production",
                          "notifications": true,
                          "created_at": "2026-10-21T12:36:26.470494Z",
                          "updated_at": "2026-10-21T12:36:26.470494Z"
                        }
                      ],
                      "owner": {
                        "id": 92354,
                        "email": "user-1@example.com",
                        "name": "Acme"
                      },
                      "last_notice_at": null,
                      "earliest_notice_at": "2026-04-24T12:36:27.993473Z",
                      "unresolved_fault_count": 0,
                      "fault_count": 0,
                      "active": true,
                      "users": [
                        {
                          "id": 132624,
                          "email": "jane@example.com",
                          "name": "Jane Doe"
                        }
                      ],
                      "sites": [
                        {
                          "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                          "active": true,
                          "last_checked_at": "2026-10-21T12:36:26.482113Z",
                          "name": "Checkout",
                          "state": "up",
                          "url": "https://billing.example.com/health"
                        }
                      ],
                      "team_id": null
                    },
                    "check_in": {
                      "state": "missing",
                      "schedule_type": "simple",
                      "reported_at": "2026-10-20T10:36:26.482113Z",
                      "expected_at": "2026-10-22T12:36:26.482113Z",
                      "missed_count": 1,
                      "grace_period": "",
                      "id": "b3IAob",
                      "name": "Nightly invoice run",
                      "slug": "nightly-invoice-run",
                      "url": "https://api.honeybadger.io/v1/check_in/b3IAob",
                      "details_url": "https://app.honeybadger.io/projects/85736/check_ins",
                      "report_period": "1 day"
                    }
                  }
                },
                "v3": {
                  "summary": "check_in_missing (v3)",
                  "value": {
                    "event": "check_in_missing",
                    "message": "[Billing API] MISSING: Nightly invoice run hasn't checked in for 1 day",
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "check_in": {
                      "id": "b3IAob",
                      "project_id": "H99upHsM",
                      "name": "Nightly invoice run",
                      "slug": "nightly-invoice-run",
                      "schedule_type": "simple",
                      "state": "missing",
                      "reported_at": "2026-10-20T10:36:26Z",
                      "expected_at": "2026-10-22T12:36:26Z",
                      "missed_count": 1,
                      "created_at": "2026-08-22T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/check_ins/b3IAob"
                      }
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/check_ins/b3IAob"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "check_in_reporting": {
      "post": {
        "summary": "Check-in reporting",
        "x-hb": {
          "group": "Uptime monitoring"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2CheckInEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3CheckInEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "check_in_reporting (v2, the default)",
                  "value": {
                    "event": "check_in_reporting",
                    "message": "[Billing API] REPORTING: Nightly invoice run is reporting again",
                    "project": {
                      "id": 85736,
                      "name": "Billing API",
                      "created_at": "2026-10-21T12:36:26.076894Z",
                      "disable_public_links": false,
                      "pivotal_project_id": null,
                      "asana_workspace_id": null,
                      "token": "hbp_EXAMPLE00000000000000000000000",
                      "github_project": null,
                      "environments": [
                        {
                          "id": 2819,
                          "project_id": 85736,
                          "name": "production",
                          "notifications": true,
                          "created_at": "2026-10-21T12:36:26.470494Z",
                          "updated_at": "2026-10-21T12:36:26.470494Z"
                        }
                      ],
                      "owner": {
                        "id": 92354,
                        "email": "user-1@example.com",
                        "name": "Acme"
                      },
                      "last_notice_at": null,
                      "earliest_notice_at": "2026-04-24T12:36:28.118724Z",
                      "unresolved_fault_count": 0,
                      "fault_count": 0,
                      "active": true,
                      "users": [
                        {
                          "id": 132624,
                          "email": "jane@example.com",
                          "name": "Jane Doe"
                        }
                      ],
                      "sites": [
                        {
                          "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                          "active": true,
                          "last_checked_at": "2026-10-21T12:36:26.482113Z",
                          "name": "Checkout",
                          "state": "up",
                          "url": "https://billing.example.com/health"
                        }
                      ],
                      "team_id": null
                    },
                    "check_in": {
                      "state": "reporting",
                      "schedule_type": "simple",
                      "reported_at": "2026-10-21T12:36:26.482113Z",
                      "expected_at": "2026-10-22T12:36:26.482113Z",
                      "missed_count": 0,
                      "grace_period": "",
                      "id": "b3IAob",
                      "name": "Nightly invoice run",
                      "slug": "nightly-invoice-run",
                      "url": "https://api.honeybadger.io/v1/check_in/b3IAob",
                      "details_url": "https://app.honeybadger.io/projects/85736/check_ins",
                      "report_period": "1 day"
                    }
                  }
                },
                "v3": {
                  "summary": "check_in_reporting (v3)",
                  "value": {
                    "event": "check_in_reporting",
                    "message": "[Billing API] REPORTING: Nightly invoice run is reporting again",
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "check_in": {
                      "id": "b3IAob",
                      "project_id": "H99upHsM",
                      "name": "Nightly invoice run",
                      "slug": "nightly-invoice-run",
                      "schedule_type": "simple",
                      "state": "reporting",
                      "reported_at": "2026-10-21T12:36:26Z",
                      "expected_at": "2026-10-22T12:36:26Z",
                      "missed_count": 0,
                      "created_at": "2026-08-22T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/check_ins/b3IAob"
                      }
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/check_ins/b3IAob"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "alarm_alert": {
      "post": {
        "summary": "Alarm triggered",
        "x-hb": {
          "group": "Insights"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2AlarmEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3AlarmEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "alarm_alert (v2, the default)",
                  "value": {
                    "event": "alarm_alert",
                    "message": "[Billing API] ALERT: Checkout errors is in alert status",
                    "alarm": {
                      "name": "Checkout errors",
                      "state": "alarm",
                      "created_at": "2026-10-21T12:36:26.448717Z",
                      "id": "opticon-observer-root-id",
                      "url": "https://app.honeybadger.io/projects/85736/insights/alarms/opticon-observer-root-id",
                      "details_url": "https://app.honeybadger.io/projects/85736/insights/alarms/opticon-observer-root-id"
                    }
                  }
                },
                "v3": {
                  "summary": "alarm_alert (v3)",
                  "value": {
                    "event": "alarm_alert",
                    "message": "[Billing API] ALERT: Checkout errors is in alert status",
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "alarm": {
                      "id": "opticon-observer-root-id",
                      "project_id": "H99upHsM",
                      "name": "Checkout errors",
                      "description": "More than 10 checkout errors in 10 minutes",
                      "state": "alarm",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/insights/alarms/opticon-observer-root-id"
                      }
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/insights/alarms/opticon-observer-root-id"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "alarm_ok": {
      "post": {
        "summary": "Alarm back to normal",
        "x-hb": {
          "group": "Insights"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2AlarmEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3AlarmEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "alarm_ok (v2, the default)",
                  "value": {
                    "event": "alarm_ok",
                    "message": "[Billing API] OK: Checkout errors is no longer in alert status",
                    "alarm": {
                      "name": "Checkout errors",
                      "state": "ok",
                      "created_at": "2026-10-21T12:36:26.448717Z",
                      "id": "opticon-observer-root-id",
                      "url": "https://app.honeybadger.io/projects/85736/insights/alarms/opticon-observer-root-id",
                      "details_url": "https://app.honeybadger.io/projects/85736/insights/alarms/opticon-observer-root-id"
                    }
                  }
                },
                "v3": {
                  "summary": "alarm_ok (v3)",
                  "value": {
                    "event": "alarm_ok",
                    "message": "[Billing API] OK: Checkout errors is no longer in alert status",
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "alarm": {
                      "id": "opticon-observer-root-id",
                      "project_id": "H99upHsM",
                      "name": "Checkout errors",
                      "description": "More than 10 checkout errors in 10 minutes",
                      "state": "ok",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/insights/alarms/opticon-observer-root-id"
                      }
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/insights/alarms/opticon-observer-root-id"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    },
    "volume_spike": {
      "post": {
        "summary": "Error volume spike",
        "x-hb": {
          "group": "Error tracking"
        },
        "security": [],
        "description": "Posted as JSON to a webhook integration for each event it's subscribed to. The body's shape follows the integration's `payload_version`: `v2`, the default, or `v3`. A v3 body names its version in its own `payload_version` field; a v2 body has no such field. When the integration has a bearer token set, the request also carries `Authorization: Bearer <token>`.\n\nAny 2xx response counts as delivered. A 5xx is retried. Any other response, a timeout or a refused connection sets the integration's `error`, which stops deliveries until the integration is updated, and Honeybadger emails the account about it.\n",
        "parameters": [
          {
            "name": "Honeybadger-Token",
            "in": "header",
            "required": true,
            "description": "The project's Honeybadger token, shown in the project's settings next to its ingestion keys, so the receiver can check the request came from Honeybadger.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2VolumeSpikeEvent"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookV3VolumeSpikeEvent"
                  }
                ]
              },
              "examples": {
                "v2": {
                  "summary": "volume_spike (v2, the default)",
                  "value": {
                    "event": "volume_spike",
                    "message": "[Billing API] Errors are 3.2× your normal rate (412 in the last hour vs ~128/hr typical)",
                    "project": {
                      "id": 85736,
                      "name": "Billing API",
                      "created_at": "2026-10-21T12:36:26.076894Z",
                      "disable_public_links": false,
                      "pivotal_project_id": null,
                      "asana_workspace_id": null,
                      "token": "hbp_EXAMPLE00000000000000000000000",
                      "github_project": null,
                      "environments": [
                        {
                          "id": 2819,
                          "project_id": 85736,
                          "name": "production",
                          "notifications": true,
                          "created_at": "2026-10-21T12:36:26.470494Z",
                          "updated_at": "2026-10-21T12:36:26.470494Z"
                        }
                      ],
                      "owner": {
                        "id": 92354,
                        "email": "user-1@example.com",
                        "name": "Acme"
                      },
                      "last_notice_at": null,
                      "earliest_notice_at": "2026-04-24T12:36:28.498204Z",
                      "unresolved_fault_count": 0,
                      "fault_count": 0,
                      "active": true,
                      "users": [
                        {
                          "id": 132624,
                          "email": "jane@example.com",
                          "name": "Jane Doe"
                        }
                      ],
                      "sites": [
                        {
                          "id": "8121ab91-87fd-4e92-ae23-a7b5bf915a2f",
                          "active": true,
                          "last_checked_at": "2026-10-21T12:36:26.482113Z",
                          "name": "Checkout",
                          "state": "up",
                          "url": "https://billing.example.com/health"
                        }
                      ],
                      "team_id": null,
                      "url": "https://app.honeybadger.io/projects/85736/faults"
                    },
                    "volume_spike": {
                      "observed": 412,
                      "baseline_median": 128,
                      "factor": 3.2,
                      "z_score": 9.1,
                      "window_minutes": 60
                    }
                  }
                },
                "v3": {
                  "summary": "volume_spike (v3)",
                  "value": {
                    "event": "volume_spike",
                    "message": "[Billing API] Errors are 3.2× your normal rate (412 in the last hour vs ~128/hr typical)",
                    "project": {
                      "id": "H99upHsM",
                      "name": "Billing API",
                      "language": "ruby",
                      "created_at": "2026-10-21T12:36:26Z",
                      "links": {
                        "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                      }
                    },
                    "volume_spike": {
                      "observed": 412,
                      "baseline_median": 128,
                      "factor": 3.2,
                      "z_score": 9.1,
                      "window_minutes": 60
                    },
                    "links": {
                      "web": "https://app.honeybadger.io/projects/H99upHsM/faults"
                    },
                    "payload_version": "v3"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Delivered."
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearer_auth": {
        "type": "http",
        "scheme": "bearer",
        "description": "A Bearer token: an API token (`hbu_` personal, `hba_` account) or an\nOAuth access token.\n\nEach scope is checked on its own: `faults:write` doesn't include\n`faults:read`.\n\nAn account token can't hold `account:write`, and its `team:write`\ncovers teams only. Managing account and team members and invitations\ntakes a personal token or an OAuth `write` grant.\n\nAn OAuth grant is `read` or `write`, each a fixed list of scopes:\n\n- `read`: `faults:read`, `insights:read`, `dashboards:read`,\n  `alarms:read`, `deploys:read`, `checkins:read`, `uptime:read`,\n  `projects:read`, `integrations:read`, `status_pages:read`,\n  `team:read`, `account:read`\n- `write`: everything in `read`, plus `faults:write`,\n  `dashboards:write`, `alarms:write`, `deploys:write`,\n  `checkins:write`, `uptime:write`, `projects:write`,\n  `projects:create`, `integrations:write`, `status_pages:write`,\n  `team:write`\n\nNeither includes `incidents:read` or `incidents:write`; status page\nincidents need an API token.\n\nHTTP basic auth and the `auth_token` query parameter are refused.\n"
      }
    },
    "schemas": {
      "Account": {
        "type": "object",
        "description": "A Honeybadger account",
        "required": [
          "id",
          "active",
          "links",
          "name",
          "email",
          "parked",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Ab3kL9"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Account name",
            "example": "Acme Corp"
          },
          "email": {
            "type": [
              "string",
              "null"
            ],
            "format": "email",
            "description": "Primary account email",
            "example": "billing@acme.com"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the account is active"
          },
          "parked": {
            "type": "boolean",
            "description": "Whether the account is parked (temporarily inactive)"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the account was created"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "AccountInvitation": {
        "type": "object",
        "description": "An invitation to join an account",
        "required": [
          "id",
          "account_id",
          "email"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Ai9nRx"
          },
          "account_id": {
            "type": "string",
            "description": "ID of the account",
            "example": "Ab3kL9"
          },
          "email": {
            "type": "string",
            "description": "Email address of the invitee",
            "example": "newmember@example.com"
          },
          "role": {
            "type": [
              "string",
              "null"
            ],
            "description": "Role granted upon acceptance",
            "enum": [
              "Owner",
              "Admin",
              "Billing",
              "Member",
              null
            ],
            "example": "Member"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the invitation was created"
          },
          "accepted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the invitation was accepted"
          },
          "created_by": {
            "type": [
              "object",
              "null"
            ],
            "description": "User who created the invitation",
            "properties": {
              "id": {
                "type": "string",
                "description": "ID of the user",
                "example": "Uz4wKm"
              },
              "name": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "User name",
                "example": "Jane Smith"
              },
              "email": {
                "type": "string",
                "description": "User email",
                "example": "jane@example.com"
              }
            }
          },
          "accepted_by": {
            "type": [
              "object",
              "null"
            ],
            "description": "User who accepted the invitation",
            "properties": {
              "id": {
                "type": "string",
                "description": "ID of the user",
                "example": "Uz4wKm"
              },
              "name": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "User name",
                "example": "Jane Smith"
              },
              "email": {
                "type": "string",
                "description": "User email",
                "example": "jane@example.com"
              }
            }
          }
        }
      },
      "AccountInvitationCreateInput": {
        "description": "Attributes for creating an account invitation.",
        "allOf": [
          {
            "$ref": "#/components/schemas/AccountInvitationInput"
          },
          {
            "required": [
              "email"
            ]
          }
        ]
      },
      "AccountInvitationInput": {
        "type": "object",
        "description": "Writable account-invitation attributes",
        "additionalProperties": false,
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          },
          "role": {
            "$ref": "#/components/schemas/AccountRole"
          },
          "disable_email_notifications": {
            "type": "boolean",
            "description": "Create the member with email notifications off"
          },
          "team_ids": {
            "type": [
              "array",
              "null"
            ],
            "description": "IDs of teams to add the invitee to.\n",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "AffectedUser": {
        "type": "object",
        "description": "A user affected by a fault, and how many times",
        "required": [
          "user",
          "count"
        ],
        "properties": {
          "user": {
            "type": "string",
            "description": "The affected user exactly as the reporting client identified them: not a Honeybadger user ID, and not necessarily an email.\n",
            "example": "jane@example.com"
          },
          "count": {
            "type": "integer",
            "description": "How many times this user was seen on the fault",
            "example": 12
          }
        }
      },
      "AccountMember": {
        "type": "object",
        "description": "A member of an account",
        "required": [
          "id",
          "account_id",
          "user_id",
          "role",
          "email"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Am4wLq"
          },
          "account_id": {
            "type": "string",
            "description": "ID of the account",
            "example": "Ab3kL9"
          },
          "user_id": {
            "type": "string",
            "description": "ID of the user",
            "example": "Uz4wKm"
          },
          "role": {
            "$ref": "#/components/schemas/AccountRole"
          },
          "email": {
            "type": "string",
            "description": "Member email address",
            "example": "jane@example.com"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Member display name",
            "example": "Jane Smith"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the member was added to the account"
          }
        }
      },
      "AccountMemberInput": {
        "type": "object",
        "description": "Writable account-member attributes",
        "required": [
          "role"
        ],
        "additionalProperties": false,
        "properties": {
          "role": {
            "$ref": "#/components/schemas/AccountRole"
          }
        }
      },
      "Alarm": {
        "type": "object",
        "description": "An Insights alarm: a BadgerQL query run on a schedule over a project's streams, which notifies its integrations when the result crosses the trigger.\n",
        "required": [
          "id",
          "project_id",
          "name",
          "description",
          "state",
          "query",
          "stream_ids",
          "evaluation_period",
          "lookback_lag",
          "trigger_config",
          "error",
          "last_checked_at",
          "next_check_at",
          "created_at",
          "updated_at",
          "links"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "type": "string",
            "example": "Qx7LmP2vRt9K"
          },
          "project_id": {
            "readOnly": true,
            "type": "string",
            "description": "ID of the project this alarm belongs to",
            "example": "Xk9mZp"
          },
          "name": {
            "type": "string",
            "description": "Alarm name",
            "example": "High Error Rate"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Alarm description",
            "example": "Fires when checkout errors spike"
          },
          "state": {
            "readOnly": true,
            "type": "string",
            "description": "Current alarm state",
            "enum": [
              "initial",
              "alarm",
              "ok"
            ]
          },
          "query": {
            "type": [
              "string",
              "null"
            ],
            "description": "BadgerQL run on each check, as the text a create or update sent.\n",
            "example": "filter event_type::str == \"notice\" | stats count() as count"
          },
          "stream_ids": {
            "uniqueItems": true,
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "Associated stream identifiers"
          },
          "evaluation_period": {
            "type": [
              "string",
              "null"
            ],
            "description": "Window each evaluation covers, as a compact duration. The API rejects a spelled-out interval like `5 minutes`.\n",
            "pattern": "^\\d+[smhdw]$",
            "example": "10m"
          },
          "lookback_lag": {
            "type": [
              "string",
              "null"
            ],
            "description": "How far behind now the window ends, allowing for ingestion delay. Same compact duration format as `evaluation_period`.\n",
            "pattern": "^\\d+[smhdw]$",
            "example": "1m"
          },
          "trigger_config": {
            "description": "What turns the alarm on; null if the stored alarm has none. Updates replace the whole object.\n",
            "anyOf": [
              {
                "$ref": "#/components/schemas/AlarmTriggerConfig"
              },
              {
                "type": "null"
              }
            ]
          },
          "error": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "description": "Error message if the alarm is in an error state",
            "example": null
          },
          "last_checked_at": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the alarm was last evaluated"
          },
          "next_check_at": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the alarm will next be evaluated"
          },
          "created_at": {
            "readOnly": true,
            "type": "string",
            "format": "date-time",
            "description": "When the alarm was created"
          },
          "updated_at": {
            "readOnly": true,
            "type": "string",
            "format": "date-time",
            "description": "When the alarm was last updated"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "AlarmCreateInput": {
        "type": "object",
        "description": "A new alarm",
        "required": [
          "name",
          "query",
          "evaluation_period",
          "lookback_lag",
          "trigger_config"
        ],
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "Alarm name",
            "example": "Error spike"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "What the alarm watches for, shown with it in Honeybadger. Null clears it."
          },
          "query": {
            "type": "string",
            "description": "BadgerQL evaluated on each check",
            "example": "filter event_type::str == \"notice\" | stats count() as count"
          },
          "stream_ids": {
            "type": [
              "array",
              "null"
            ],
            "minItems": 1,
            "description": "Streams the query runs against. A set: order is ignored, duplicates are dropped, and it can't be empty. Left out or null, set to the project's current streams.\n",
            "items": {
              "type": "string"
            }
          },
          "evaluation_period": {
            "type": "string",
            "pattern": "^\\d+[smhd]$",
            "description": "Window each evaluation covers. At least 1m and less than a week (`w` units are refused).",
            "example": "10m"
          },
          "lookback_lag": {
            "type": "string",
            "pattern": "^\\d+[smhdw]$",
            "description": "How far behind now the window ends, allowing for ingestion delay",
            "example": "1m"
          },
          "trigger_config": {
            "$ref": "#/components/schemas/AlarmTriggerConfig"
          }
        }
      },
      "AlarmUpdateInput": {
        "type": "object",
        "description": "Writable alarm attributes",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "Alarm name"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "What the alarm watches for, shown with it in Honeybadger. Null clears it."
          },
          "query": {
            "type": "string",
            "description": "BadgerQL query evaluated on each check"
          },
          "stream_ids": {
            "type": [
              "array",
              "null"
            ],
            "minItems": 1,
            "items": {
              "type": "string"
            },
            "description": "Stream identifiers to query. A set; can't be empty. Order is ignored and duplicates are dropped. Null resets it to every current stream in the project.\n"
          },
          "evaluation_period": {
            "type": "string",
            "description": "Window each evaluation covers, as a compact duration. At least 1m and less than a week (`w` units are refused).",
            "pattern": "^\\d+[smhd]$",
            "example": "10m"
          },
          "lookback_lag": {
            "type": "string",
            "description": "How far behind now the window ends",
            "pattern": "^\\d+[smhdw]$",
            "example": "1m"
          },
          "trigger_config": {
            "$ref": "#/components/schemas/AlarmTriggerConfig"
          }
        }
      },
      "AlarmTriggerConfig": {
        "type": "object",
        "description": "What turns the alarm on. Sent whole: on update, a `trigger_config` replaces the stored one rather than merging into it.\n",
        "required": [
          "type",
          "config"
        ],
        "example": {
          "type": "alert_result_count",
          "config": {
            "operator": "gt",
            "value": 10
          }
        },
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "alert_result_count"
            ],
            "description": "`alert_result_count` compares the number of results the query returns."
          },
          "config": {
            "$ref": "#/components/schemas/AlarmTriggerCondition"
          }
        }
      },
      "AlarmHistoryEntry": {
        "type": "object",
        "description": "One alarm state change",
        "required": [
          "id",
          "alarm_id",
          "alarm_version_id",
          "status",
          "created_at",
          "evaluation_started_at",
          "evaluation_result"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Hm4nR8sTq2Wz"
          },
          "alarm_id": {
            "type": "string",
            "description": "The alarm's ID",
            "example": "Qx7LmP2vRt9K"
          },
          "alarm_version_id": {
            "type": "string",
            "description": "The version of the alarm that was evaluated. Editing an alarm creates a new version, and history spans every version.\n",
            "example": "Vn6pK3dLq9Xa"
          },
          "status": {
            "type": [
              "string",
              "null"
            ],
            "description": "The state the alarm entered",
            "enum": [
              "alarm",
              "ok",
              null
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the change was recorded"
          },
          "evaluation_started_at": {
            "type": "string",
            "format": "date-time",
            "description": "Start of the window whose evaluation caused the change"
          },
          "evaluation_result": {
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "description": "The value the trigger compared against its threshold",
            "example": 42
          }
        }
      },
      "IntegrationFilter": {
        "type": "object",
        "description": "Only errors matching `query` notify for `event`.",
        "required": [
          "event",
          "query"
        ],
        "properties": {
          "event": {
            "$ref": "#/components/schemas/IntegrationFilterEvent",
            "description": "An event name, or `all` for every event."
          },
          "query": {
            "type": "string",
            "minLength": 1,
            "description": "An error search query, as in the Errors search box.",
            "example": "environment:production"
          }
        }
      },
      "Integration": {
        "type": "object",
        "description": "A notification integration",
        "required": [
          "id",
          "project_id",
          "type",
          "active",
          "rate",
          "threshold",
          "notification_limit",
          "filters",
          "links",
          "events",
          "site_ids",
          "check_in_ids",
          "excluded_environments",
          "included_environments",
          "alarm_alert_ids",
          "alarm_ok_ids",
          "created_at",
          "config"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "type": "string",
            "example": "Ch9wLp"
          },
          "project_id": {
            "readOnly": true,
            "type": "string",
            "description": "ID of the project this integration belongs to",
            "example": "Xk9mZp"
          },
          "type": {
            "type": "string",
            "description": "Integration type",
            "example": "Slack"
          },
          "active": {
            "type": "boolean",
            "description": "Whether to use the integration. An OAuth integration that isn't `connected` sends nothing until it is.\n"
          },
          "events": {
            "uniqueItems": true,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Events this integration notifies on",
            "example": [
              "occurred",
              "resolved",
              "assigned"
            ]
          },
          "site_ids": {
            "uniqueItems": true,
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Sites whose up and down events this integration receives. null means every site in the project, including ones added later.\n",
            "example": null
          },
          "check_in_ids": {
            "uniqueItems": true,
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "Check-ins whose events this integration receives. null means every check-in in the project, including ones added later.\n",
            "example": null
          },
          "excluded_environments": {
            "uniqueItems": true,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Errors from these environments never notify through this integration. Takes precedence over `included_environments`.",
            "example": [
              "development"
            ]
          },
          "included_environments": {
            "uniqueItems": true,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "When non-empty, only errors from these environments notify through this integration.",
            "example": []
          },
          "filters": {
            "type": "array",
            "description": "An ordered list. Each event that has a filter notifies only for errors matching its query.\n",
            "items": {
              "$ref": "#/components/schemas/IntegrationFilter"
            },
            "example": [
              {
                "event": "occurred",
                "query": "environment:production"
              }
            ]
          },
          "alarm_alert_ids": {
            "uniqueItems": true,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "IDs of alarms whose alert events this integration receives",
            "example": []
          },
          "alarm_ok_ids": {
            "uniqueItems": true,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "IDs of alarms whose recovery events this integration receives",
            "example": []
          },
          "threshold": {
            "type": "integer",
            "description": "Occurrence threshold before `rate_exceeded` fires",
            "example": 100
          },
          "rate": {
            "$ref": "#/components/schemas/IntegrationRate"
          },
          "notification_limit": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Maximum notifications in a 10-minute window before flood control",
            "example": null
          },
          "connected": {
            "readOnly": true,
            "type": "boolean",
            "description": "Present on OAuth integrations (Slack, GitHub, GitLab, Bitbucket, Jira Cloud, Asana, Intercom and the like) and WebSocket integrations. On an OAuth integration it says whether the integration is authenticated, which someone does in the web UI at `links.web`. Separate from `active`: an active integration that isn't connected sends nothing until it is, and connecting doesn't change `active`. GitHub authenticates through the GitHub App: the app is installed on the repo, and the installation is attached when someone with access to it saves the integration. A creator who signed in to Honeybadger with GitHub is connected on create. On a WebSocket integration it says whether a client checked in within the last two minutes.\n"
          },
          "config": {
            "type": "object",
            "additionalProperties": true,
            "description": "The type's settings, one IntegrationConfig<Type> per `type`. Unset settings are null. Write-only secrets are never returned. Other settings are, including webhook URLs, which can contain credentials.\n"
          },
          "error": {
            "readOnly": true,
            "type": "boolean",
            "description": "Set when a delivery fails in a way that stops the integration; `error_reason` says why. The integration sends nothing while it's set. A successful update clears it.\n"
          },
          "error_reason": {
            "readOnly": true,
            "type": "string",
            "description": "Reason for the error state, if any",
            "example": "The webhook URL returned 410 Gone"
          },
          "created_at": {
            "readOnly": true,
            "type": "string",
            "format": "date-time",
            "description": "When the integration was created"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Campfire"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigCampfire"
                    },
                    {
                      "required": [
                        "subdomain",
                        "room_name"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "CampfireV2"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigCampfireV2"
                    },
                    {
                      "required": [
                        "campfire_url"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "CampfireV3"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigCampfireV3"
                    },
                    {
                      "required": [
                        "chatbot_url"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Datadog"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigDatadog"
                    },
                    {
                      "required": [
                        "endpoint",
                        "label",
                        "send_metrics"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "DiscordWebhook"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigDiscordWebhook"
                    },
                    {
                      "required": [
                        "url",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Github"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigGithub"
                    },
                    {
                      "required": [
                        "repo",
                        "labels",
                        "issue_type",
                        "issue_fields",
                        "title_format",
                        "rich_body"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Gitlab"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigGitlab"
                    },
                    {
                      "required": [
                        "repo",
                        "labels",
                        "server_url",
                        "title_format",
                        "rich_body"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Bitbucket"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigBitbucket"
                    },
                    {
                      "required": [
                        "repo"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "PivotalTracker"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigPivotalTracker"
                    },
                    {
                      "required": [
                        "pivotal_project_id",
                        "labels",
                        "name_format",
                        "description_format"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Flowdock"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigFlowdock"
                    },
                    {
                      "required": [
                        "tags"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Asana"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigAsana"
                    },
                    {
                      "required": [
                        "asana_project_id"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "HipChat"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigHipChat"
                    },
                    {
                      "required": [
                        "url",
                        "room",
                        "color",
                        "alert"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Jira"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigJira"
                    },
                    {
                      "required": [
                        "username",
                        "server_url",
                        "project_key",
                        "resolve_transition",
                        "reopen_transition",
                        "labels",
                        "component_names",
                        "issue_type",
                        "summary_format",
                        "rich_body"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "JiraCloud"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigJiraCloud"
                    },
                    {
                      "required": [
                        "project_key",
                        "resolve_transition",
                        "reopen_transition",
                        "labels",
                        "component_names",
                        "issue_type",
                        "summary_format",
                        "rich_body"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "OpsGenie"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigOpsGenie"
                    },
                    {
                      "required": [
                        "endpoint",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "OpsGenieV2"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigOpsGenieV2"
                    },
                    {
                      "required": [
                        "endpoint",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Redmine"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigRedmine"
                    },
                    {
                      "required": [
                        "server_url",
                        "resolve_transition",
                        "reopen_transition"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "PagerDuty"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigPagerDuty"
                    },
                    {
                      "required": [
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "PagerDutyV2"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigPagerDutyV2"
                    },
                    {
                      "required": [
                        "severity",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Sprintly"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigSprintly"
                    },
                    {
                      "required": [
                        "account_email",
                        "product_id",
                        "tags"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Trello"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigTrello"
                    },
                    {
                      "required": [
                        "board_id",
                        "list_id",
                        "title_format"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Linear"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigLinear"
                    },
                    {
                      "required": [
                        "team_id",
                        "linear_project_id",
                        "label_ids",
                        "unresolved_state_id",
                        "resolved_state_id",
                        "label",
                        "title_format",
                        "description_format"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Slack"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigSlack"
                    },
                    {
                      "required": [
                        "label",
                        "disable_backtrace"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Mattermost"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigMattermost"
                    },
                    {
                      "required": [
                        "url",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "GoogleHangoutsChat"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigGoogleHangoutsChat"
                    },
                    {
                      "required": [
                        "url",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "VictorOps"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigVictorOps"
                    },
                    {
                      "required": [
                        "routing_key",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "WebHook"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigWebHook"
                    },
                    {
                      "required": [
                        "url",
                        "label",
                        "payload_version"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Email"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigEmail"
                    },
                    {
                      "required": [
                        "email",
                        "email_subject"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Intercom"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigIntercom"
                    },
                    {
                      "required": [
                        "context_field"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "AlertOps"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigAlertOps"
                    },
                    {
                      "required": [
                        "url",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "MicrosoftTeams"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigMicrosoftTeams"
                    },
                    {
                      "required": [
                        "url",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "MicrosoftTeamsV2"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigMicrosoftTeamsV2"
                    },
                    {
                      "required": [
                        "url",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Shortcut"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigShortcut"
                    },
                    {
                      "required": [
                        "organization_name",
                        "title_format",
                        "description_format",
                        "external_project_id",
                        "resolve_transition",
                        "reopen_transition"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "ShortcutV2"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigShortcutV2"
                    },
                    {
                      "required": [
                        "organization_name",
                        "title_format",
                        "description_format",
                        "custom_fields",
                        "team",
                        "initial_state",
                        "resolve_transition",
                        "reopen_transition"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "PagerTree"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigPagerTree"
                    },
                    {
                      "required": [
                        "url"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Instatus"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigInstatus"
                    },
                    {
                      "required": [
                        "url",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "ClickUp"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigClickUp"
                    },
                    {
                      "required": [
                        "workspace_id",
                        "teamspace_id",
                        "folder_id",
                        "list_id",
                        "initial_status_id",
                        "resolve_status_id",
                        "reopen_status_id",
                        "tags",
                        "title_format",
                        "description_format"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "ClickUpChat"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigClickUpChat"
                    },
                    {
                      "required": [
                        "workspace_id",
                        "channel_id"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Ilert"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigIlert"
                    },
                    {
                      "required": [
                        "url",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Zulip"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigZulip"
                    },
                    {
                      "required": [
                        "bot_email",
                        "zulip_domain",
                        "server_url",
                        "channel",
                        "topic"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "IncidentIo"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigIncidentIo"
                    },
                    {
                      "required": [
                        "alert_source_label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Rootly"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigRootly"
                    },
                    {
                      "required": [
                        "notification_target_type",
                        "notification_target_id",
                        "label"
                      ]
                    }
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Backlog"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigBacklog"
                    },
                    {
                      "required": [
                        "space_url",
                        "backlog_project_id",
                        "issue_type_id",
                        "priority_id",
                        "resolve_status_id",
                        "reopen_status_id",
                        "label",
                        "enable_webhook",
                        "subject_format",
                        "description_format"
                      ]
                    }
                  ]
                }
              }
            }
          }
        ]
      },
      "IntegrationUpdateInput": {
        "type": "object",
        "description": "Fields to change on an integration. Omitted fields are left as they are. `type` can't be changed. Read-only fields are ignored. Type-specific settings go under `config`, listed per type in [Integration types](https://docs.honeybadger.io/api/v3/integrations/types/).\n",
        "properties": {
          "active": {
            "type": "boolean",
            "description": "Whether to use the integration. An OAuth integration that's active sends nothing until someone connects it in the web UI at `links.web`.\n"
          },
          "events": {
            "type": [
              "array",
              "null"
            ],
            "description": "Events this integration notifies on. On create, defaults to the type's default events. Null resets it to the type's defaults. A set; order is ignored and duplicates are dropped. `up` and `down` need uptime monitoring, `rate_exceeded` escalation, and `volume_spike` anomaly detection on the plan; the defaults leave them out on plans without them.\n",
            "items": {
              "$ref": "#/components/schemas/IntegrationEvent"
            }
          },
          "rate": {
            "default": "wday",
            "description": "Period the `rate_exceeded` threshold counts over. Null resets it to `wday`.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/IntegrationRate"
              },
              {
                "type": "null"
              }
            ]
          },
          "threshold": {
            "type": [
              "integer",
              "null"
            ],
            "default": 100,
            "description": "Number of occurrences before `rate_exceeded` fires. Null resets it to 100."
          },
          "notification_limit": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Maximum notifications in a 10-minute window before flood control. Null removes the limit."
          },
          "site_ids": {
            "type": [
              "array",
              "null"
            ],
            "description": "Sites whose up and down events this integration receives. null follows every site in the project, including ones added later; a create that leaves it out does the same. [] follows none, and a list follows just those sites. A set; order is ignored and duplicates are dropped.\n",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "check_in_ids": {
            "type": [
              "array",
              "null"
            ],
            "description": "Check-ins whose events this integration receives. null follows every check-in in the project, including ones added later; a create that leaves it out does the same. [] follows none, and a list follows just those check-ins. A set; order is ignored and duplicates are dropped.\n",
            "items": {
              "type": "string"
            }
          },
          "alarm_alert_ids": {
            "type": [
              "array",
              "null"
            ],
            "description": "IDs of alarms whose alert events this integration receives. Null or empty clears it. A set; order is ignored and duplicates are dropped.",
            "items": {
              "type": "string"
            }
          },
          "alarm_ok_ids": {
            "type": [
              "array",
              "null"
            ],
            "description": "IDs of alarms whose recovery events this integration receives. Null or empty clears it. A set; order is ignored and duplicates are dropped.",
            "items": {
              "type": "string"
            }
          },
          "excluded_environments": {
            "type": [
              "array",
              "null"
            ],
            "description": "Errors from these environments never notify through this integration. Takes precedence over `included_environments`. An environment can be excluded before it first reports. Null or empty clears it. Changing it requires environment settings on the plan. A set; order is ignored and duplicates are dropped.\n",
            "items": {
              "type": "string"
            }
          },
          "included_environments": {
            "type": [
              "array",
              "null"
            ],
            "description": "When non-empty, only errors from these environments notify through this integration, including environments that haven't reported yet. Empty means every environment not excluded. Null or empty clears it. Changing it requires environment settings on the plan. A set; order is ignored and duplicates are dropped.\n",
            "items": {
              "type": "string"
            }
          },
          "filters": {
            "type": [
              "array",
              "null"
            ],
            "description": "An ordered list. Each event that has a filter notifies only for errors matching its query. Replaces the stored filters; null or empty clears them. Changing it requires integration filters on the plan.\n",
            "items": {
              "$ref": "#/components/schemas/IntegrationFilter"
            }
          },
          "config": {
            "type": "object",
            "additionalProperties": true,
            "description": "Type-specific settings, listed per type in [Integration types](https://docs.honeybadger.io/api/v3/integrations/types/). Merged into the stored settings: a key left out keeps its value; a key sent as null is cleared, or reset to its default. Secrets are never returned; leave them out to keep them.\n"
          }
        }
      },
      "IntegrationCreateInput": {
        "type": "object",
        "description": "A new integration. `type` picks the integration, and `config` holds that type's settings. OAuth integrations (Slack, GitHub and the like) are created active by default and send nothing until someone connects them in the web UI at `links.web`. Some required settings are IDs from the other service, such as a Linear team or a Trello board.\n",
        "required": [
          "type"
        ],
        "properties": {
          "active": {
            "type": "boolean",
            "description": "Whether to use the integration. An OAuth integration that's active sends nothing until someone connects it in the web UI at `links.web`.\n"
          },
          "events": {
            "type": [
              "array",
              "null"
            ],
            "description": "Events this integration notifies on. On create, defaults to the type's default events. Null resets it to the type's defaults. A set; order is ignored and duplicates are dropped. `up` and `down` need uptime monitoring, `rate_exceeded` escalation, and `volume_spike` anomaly detection on the plan; the defaults leave them out on plans without them.\n",
            "items": {
              "$ref": "#/components/schemas/IntegrationEvent"
            }
          },
          "rate": {
            "default": "wday",
            "description": "Period the `rate_exceeded` threshold counts over. Null resets it to `wday`.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/IntegrationRate"
              },
              {
                "type": "null"
              }
            ]
          },
          "threshold": {
            "type": [
              "integer",
              "null"
            ],
            "default": 100,
            "description": "Number of occurrences before `rate_exceeded` fires. Null resets it to 100."
          },
          "notification_limit": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Maximum notifications in a 10-minute window before flood control. Null removes the limit."
          },
          "site_ids": {
            "type": [
              "array",
              "null"
            ],
            "description": "Sites whose up and down events this integration receives. null follows every site in the project, including ones added later; a create that leaves it out does the same. [] follows none, and a list follows just those sites. A set; order is ignored and duplicates are dropped.\n",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "check_in_ids": {
            "type": [
              "array",
              "null"
            ],
            "description": "Check-ins whose events this integration receives. null follows every check-in in the project, including ones added later; a create that leaves it out does the same. [] follows none, and a list follows just those check-ins. A set; order is ignored and duplicates are dropped.\n",
            "items": {
              "type": "string"
            }
          },
          "alarm_alert_ids": {
            "type": [
              "array",
              "null"
            ],
            "description": "IDs of alarms whose alert events this integration receives. Null or empty clears it. A set; order is ignored and duplicates are dropped.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "alarm_ok_ids": {
            "type": [
              "array",
              "null"
            ],
            "description": "IDs of alarms whose recovery events this integration receives. Null or empty clears it. A set; order is ignored and duplicates are dropped.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excluded_environments": {
            "type": [
              "array",
              "null"
            ],
            "description": "Errors from these environments never notify through this integration. Takes precedence over `included_environments`. An environment can be excluded before it first reports. Null or empty clears it. Changing it requires environment settings on the plan. A set; order is ignored and duplicates are dropped.\n",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "included_environments": {
            "type": [
              "array",
              "null"
            ],
            "description": "When non-empty, only errors from these environments notify through this integration, including environments that haven't reported yet. Empty means every environment not excluded. Null or empty clears it. Changing it requires environment settings on the plan. A set; order is ignored and duplicates are dropped.\n",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "filters": {
            "type": [
              "array",
              "null"
            ],
            "description": "An ordered list. Each event that has a filter notifies only for errors matching its query. Replaces the stored filters; null or empty clears them. Changing it requires integration filters on the plan.\n",
            "items": {
              "$ref": "#/components/schemas/IntegrationFilter"
            },
            "default": []
          },
          "type": {
            "type": "string",
            "enum": [
              "CampfireV3",
              "Datadog",
              "DiscordWebhook",
              "Github",
              "Gitlab",
              "Bitbucket",
              "Asana",
              "Jira",
              "JiraCloud",
              "OpsGenieV2",
              "Redmine",
              "PagerDutyV2",
              "Sprintly",
              "Trello",
              "Linear",
              "Slack",
              "Mattermost",
              "GoogleHangoutsChat",
              "VictorOps",
              "WebHook",
              "Email",
              "Intercom",
              "AlertOps",
              "MicrosoftTeamsV2",
              "ShortcutV2",
              "PagerTree",
              "Instatus",
              "ClickUp",
              "ClickUpChat",
              "Ilert",
              "Zulip",
              "IncidentIo",
              "Rootly",
              "Backlog"
            ],
            "description": "Integration type. Each type's settings are listed in [Integration types](https://docs.honeybadger.io/api/v3/integrations/types/), and in its IntegrationConfig<Type> schema."
          },
          "config": {
            "type": "object",
            "additionalProperties": true,
            "description": "The type's settings, listed per type in [Integration types](https://docs.honeybadger.io/api/v3/integrations/types/)."
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "type": {
                  "const": "CampfireV3"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Campfire",
              "description": "Get alerts via Campfire group chat.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigCampfireV3"
                    },
                    {
                      "required": [
                        "chatbot_url"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Datadog"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Datadog",
              "description": "Get alerts in your Datadog cloud monitoring event stream.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigDatadog"
                    },
                    {
                      "required": [
                        "api_key"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "DiscordWebhook"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Discord",
              "description": "Get alerts in Discord.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigDiscordWebhook"
                    },
                    {
                      "required": [
                        "url"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Github"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "GitHub",
              "description": "Create GitHub issues from errors. It sends nothing until someone connects it in the web UI at `links.web`.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigGithub"
                    },
                    {
                      "required": [
                        "repo"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Gitlab"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "GitLab",
              "description": "Create GitLab issues from errors. It sends nothing until someone connects it in the web UI at `links.web`.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigGitlab"
                    },
                    {
                      "required": [
                        "repo"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Bitbucket"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Bitbucket",
              "description": "Create Bitbucket issues from errors. It sends nothing until someone connects it in the web UI at `links.web`.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigBitbucket"
                    },
                    {
                      "required": [
                        "repo"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Asana"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Asana",
              "description": "Create Asana tasks from errors. It sends nothing until someone connects it in the web UI at `links.web`.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigAsana"
                    },
                    {
                      "required": [
                        "asana_project_id"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Jira"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Jira",
              "description": "Track issues in Jira. Older, Basic Auth strategy -- works with JIRA Server & JIRA Cloud.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigJira"
                    },
                    {
                      "required": [
                        "username",
                        "password",
                        "server_url",
                        "project_key"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "JiraCloud"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Jira Cloud",
              "description": "Track issues in Jira. Newer, OAuth 2 strategy -- works with JIRA Cloud. It sends nothing until someone connects it in the web UI at `links.web`.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigJiraCloud"
                    },
                    {
                      "required": [
                        "project_key"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "OpsGenieV2"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "OpsGenie",
              "description": "Get alerts via OpsGenie.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigOpsGenieV2"
                    },
                    {
                      "required": [
                        "api_key"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Redmine"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Redmine",
              "description": "Track issues in Redmine.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigRedmine"
                    },
                    {
                      "required": [
                        "server_url",
                        "api_key"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "PagerDutyV2"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "PagerDuty",
              "description": "Get alerts via PagerDuty.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigPagerDutyV2"
                    },
                    {
                      "required": [
                        "integration_key"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "resolved",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Sprintly"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Sprintly",
              "description": "Create Sprintly defects from errors.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigSprintly"
                    },
                    {
                      "required": [
                        "account_email",
                        "api_key",
                        "product_id"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Trello"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Trello",
              "description": "Track issues in Trello. It sends nothing until someone connects it in the web UI at `links.web`.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigTrello"
                    },
                    {
                      "required": [
                        "board_id",
                        "list_id"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Linear"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Linear",
              "description": "Create issues in your Linear.app team. It sends nothing until someone connects it in the web UI at `links.web`.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigLinear"
                    },
                    {
                      "required": [
                        "team_id"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Slack"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Slack",
              "description": "Get alerts via Slack group chat. It sends nothing until someone connects it in the web UI at `links.web`.",
              "properties": {
                "config": {
                  "$ref": "#/components/schemas/IntegrationConfigSlack"
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Mattermost"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Mattermost",
              "description": "Get alerts via Mattermost group chat.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigMattermost"
                    },
                    {
                      "required": [
                        "url"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "GoogleHangoutsChat"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Google Chat",
              "description": "Send alerts to a Google Chat room.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigGoogleHangoutsChat"
                    },
                    {
                      "required": [
                        "url"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "VictorOps"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Splunk On-Call",
              "description": "Get alerts in your Splunk On-Call cloud monitoring timeline.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigVictorOps"
                    },
                    {
                      "required": [
                        "api_key"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "up",
                      "down",
                      "cert_will_expire",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "WebHook"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Webhook",
              "description": "DIY integrations via webhook.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigWebHook"
                    },
                    {
                      "required": [
                        "url"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Email"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Email",
              "description": "Integrate with 3rd-party services that accept email.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigEmail"
                    },
                    {
                      "required": [
                        "email"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Intercom"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Intercom",
              "description": "Send events to Intercom when users encounter errors. It sends nothing until someone connects it in the web UI at `links.web`.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigIntercom"
                    },
                    {
                      "required": [
                        "context_field"
                      ]
                    }
                  ]
                },
                "events": {
                  "maxItems": 0,
                  "description": "This type takes no events."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "AlertOps"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "AlertOps",
              "description": "Get alerts via AlertOps.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigAlertOps"
                    },
                    {
                      "required": [
                        "url"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "MicrosoftTeamsV2"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Microsoft Teams",
              "description": "Get alerts via Microsoft Teams group chat.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigMicrosoftTeamsV2"
                    },
                    {
                      "required": [
                        "url"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "ShortcutV2"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Shortcut",
              "description": "Create stories in your Shortcut projects.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigShortcutV2"
                    },
                    {
                      "required": [
                        "organization_name",
                        "api_key",
                        "team",
                        "initial_state",
                        "resolve_transition",
                        "reopen_transition"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "PagerTree"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "PagerTree",
              "description": "Get alerts via PagerTree.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigPagerTree"
                    },
                    {
                      "required": [
                        "url"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Instatus"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Instatus",
              "description": "Update your status page.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigInstatus"
                    },
                    {
                      "required": [
                        "url"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "up",
                      "down"
                    ]
                  },
                  "description": "Defaults to `up` and `down`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "ClickUp"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "ClickUp",
              "description": "Create ClickUp tasks from errors. It sends nothing until someone connects it in the web UI at `links.web`.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigClickUp"
                    },
                    {
                      "required": [
                        "workspace_id",
                        "teamspace_id",
                        "list_id",
                        "initial_status_id",
                        "resolve_status_id",
                        "reopen_status_id"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "ClickUpChat"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "ClickUp Chat",
              "description": "Send alerts to ClickUp Chat channels. It sends nothing until someone connects it in the web UI at `links.web`.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigClickUpChat"
                    },
                    {
                      "required": [
                        "workspace_id",
                        "channel_id"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Ilert"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "ilert",
              "description": "Get alerts via ilert.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigIlert"
                    },
                    {
                      "required": [
                        "url"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Zulip"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Zulip",
              "description": "Get alerts via Zulip group chat.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigZulip"
                    },
                    {
                      "required": [
                        "bot_email",
                        "api_key",
                        "channel",
                        "topic"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "IncidentIo"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "incident.io",
              "description": "Get alerts via incident.io.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigIncidentIo"
                    },
                    {
                      "required": [
                        "api_key",
                        "alert_source_label"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "resolved",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Rootly"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Rootly",
              "description": "Get alerts via Rootly.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigRootly"
                    },
                    {
                      "required": [
                        "webhook_authorization_token"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "rate_exceeded",
                      "assigned",
                      "resolved",
                      "unresolved",
                      "commented",
                      "deployed",
                      "up",
                      "down",
                      "cert_will_expire",
                      "flooded",
                      "check_in_missing",
                      "check_in_reporting",
                      "alarm_alert",
                      "alarm_ok",
                      "volume_spike"
                    ]
                  },
                  "description": "Defaults to `occurred`, `assigned`, `up`, `down`, `cert_will_expire`, `check_in_missing`, and `check_in_reporting`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "Backlog"
                }
              },
              "required": [
                "type"
              ]
            },
            "then": {
              "title": "Backlog",
              "description": "Track issues in Backlog.",
              "required": [
                "config"
              ],
              "properties": {
                "config": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/IntegrationConfigBacklog"
                    },
                    {
                      "required": [
                        "space_url",
                        "api_key",
                        "backlog_project_id",
                        "issue_type_id",
                        "priority_id",
                        "resolve_status_id",
                        "reopen_status_id"
                      ]
                    }
                  ]
                },
                "events": {
                  "items": {
                    "enum": [
                      "occurred",
                      "resolved",
                      "unresolved",
                      "rate_exceeded"
                    ]
                  },
                  "description": "Defaults to `occurred`, `resolved`, and `unresolved`, less any the plan doesn't include."
                },
                "active": {
                  "default": true
                }
              }
            }
          }
        ],
        "example": {
          "type": "WebHook",
          "events": [
            "occurred",
            "resolved"
          ],
          "config": {
            "url": "https://example.com/hook"
          }
        }
      },
      "CheckIn": {
        "type": "object",
        "description": "A check-in monitor for a scheduled job. The job requests the check-in's report URL each time it runs, and Honeybadger alerts when a report doesn't arrive on schedule.\n",
        "required": [
          "id",
          "project_id",
          "schedule_type",
          "links",
          "name",
          "slug",
          "state",
          "reported_at",
          "expected_at",
          "missed_count",
          "grace_period",
          "report_url",
          "cron_timezone",
          "created_at"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "type": "string",
            "example": "Ci5xWq"
          },
          "project_id": {
            "readOnly": true,
            "type": "string",
            "description": "ID of the project this check-in belongs to",
            "example": "Xk9mZp"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Display name",
            "example": "Daily Backup"
          },
          "slug": {
            "type": [
              "string",
              "null"
            ],
            "description": "URL-safe identifier",
            "example": "daily-backup"
          },
          "schedule_type": {
            "$ref": "#/components/schemas/CheckInScheduleType"
          },
          "state": {
            "readOnly": true,
            "type": "string",
            "description": "Current check-in state",
            "enum": [
              "pending",
              "reporting",
              "missing",
              "paused"
            ]
          },
          "reported_at": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the last report was received"
          },
          "expected_at": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the next report is expected"
          },
          "missed_count": {
            "readOnly": true,
            "type": "integer",
            "description": "Number of consecutive missed reports",
            "example": 0
          },
          "grace_period": {
            "type": "string",
            "pattern": "^(\\d+ (second|minute|hour|day|week|month|year)s?)( \\d+ (second|minute|hour|day|week|month|year)s?)*$|^\\d\\d:\\d\\d:\\d\\d$",
            "description": "How long after the expected time before the check-in is missing. A duration such as `5 minutes`, `1 hour 30 minutes` or `01:30:00`. Returned in long form: `1 week` comes back as `7 days`, and zero as `00:00:00`.\n",
            "example": "10 minutes"
          },
          "report_url": {
            "readOnly": true,
            "type": "string",
            "description": "URL to ping when the task completes",
            "example": "https://api.honeybadger.io/v1/check_in/Ci5xWq"
          },
          "created_at": {
            "readOnly": true,
            "type": "string",
            "format": "date-time",
            "description": "When the check-in was created"
          },
          "cron_schedule": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cron expression (for cron schedule type)",
            "example": "0 2 * * *"
          },
          "cron_timezone": {
            "type": "string",
            "description": "Timezone for cron schedule, as the web app names time zones. `UTC` on a simple check-in.",
            "example": "Eastern Time (US & Canada)"
          },
          "report_period": {
            "type": [
              "string",
              "null"
            ],
            "description": "How often a report is expected, for `simple` schedules. Same format as `grace_period`. Null for `cron` schedules, which use `cron_schedule`.\n",
            "example": "1 day"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "CheckInReplaceInput": {
        "type": "object",
        "description": "The project's complete set of check-ins. Any check-in the project has that this list doesn't name is deleted. Must be non-empty, and every entry needs a slug.\n",
        "required": [
          "check_ins"
        ],
        "properties": {
          "check_ins": {
            "type": "array",
            "minItems": 1,
            "example": [
              {
                "name": "Nightly billing job",
                "slug": "nightly-billing",
                "schedule_type": "simple",
                "report_period": "1 day",
                "grace_period": "15 minutes"
              }
            ],
            "items": {
              "$ref": "#/components/schemas/CheckInReplaceEntry"
            }
          }
        }
      },
      "CheckInReplaceEntry": {
        "description": "One check-in in a replace request, matched to an existing check-in by slug. A match is updated, and an unmatched slug creates a new check-in.\n",
        "allOf": [
          {
            "$ref": "#/components/schemas/CheckInInput"
          },
          {
            "type": "object",
            "required": [
              "slug"
            ],
            "properties": {
              "slug": {
                "type": "string",
                "pattern": "\\S",
                "description": "Identifies which check-in an entry refers to, so it is required here"
              }
            }
          }
        ]
      },
      "CheckInScheduleType": {
        "type": "string",
        "enum": [
          "simple",
          "cron"
        ],
        "default": "simple",
        "description": "`simple` expects a report every `report_period`. `cron` expects reports on a cron schedule and requires `cron_schedule`.\n"
      },
      "FaultMerge": {
        "type": "object",
        "description": "A queued merge",
        "required": [
          "batch_id",
          "source_id",
          "target_id"
        ],
        "properties": {
          "batch_id": {
            "type": "string",
            "description": "Identifies the background merge",
            "example": "WksB67FpRY3bZQ"
          },
          "source_id": {
            "type": "string",
            "description": "ID of the fault being merged, from the path.",
            "example": "12345"
          },
          "target_id": {
            "type": "string",
            "description": "ID of the fault kept",
            "example": "67890"
          }
        }
      },
      "FaultMergeInput": {
        "type": "object",
        "description": "Names the fault to merge into",
        "required": [
          "target_fault_id"
        ],
        "additionalProperties": false,
        "properties": {
          "target_fault_id": {
            "type": "string",
            "description": "ID of the fault to keep. The fault in the path is merged into it.\n",
            "example": "12345"
          }
        }
      },
      "AlarmTriggerCondition": {
        "type": "object",
        "description": "The comparison against the query's result that fires the trigger",
        "required": [
          "operator",
          "value"
        ],
        "properties": {
          "operator": {
            "type": "string",
            "enum": [
              "gt",
              "gte",
              "lt",
              "lte",
              "eq",
              "neq"
            ],
            "description": "How the query's result is compared with `value`: greater than, greater than or equal, less than, less than or equal, equal, or not equal.\n",
            "example": "gt"
          },
          "value": {
            "type": "number",
            "format": "double",
            "description": "Threshold to compare against. `alert_result_count` takes a whole number >= 0.",
            "example": 10
          }
        }
      },
      "PauseDuration": {
        "type": "string",
        "enum": [
          "hour",
          "day",
          "week"
        ],
        "description": "A duration of an hour, a day or a week."
      },
      "CheckInEvent": {
        "type": "object",
        "description": "A check-in event",
        "required": [
          "check_in_id",
          "state",
          "created_at"
        ],
        "properties": {
          "check_in_id": {
            "type": "string",
            "description": "ID of the check-in",
            "example": "Ci5xWq"
          },
          "state": {
            "type": "string",
            "enum": [
              "reporting",
              "missing",
              "paused"
            ],
            "description": "The state the check-in entered",
            "example": "reporting"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the event occurred"
          },
          "payload": {
            "type": [
              "string",
              "null"
            ],
            "description": "The payload reported with the check-in, as it was sent. Only retained on plans with advanced check-ins.",
            "example": null
          }
        }
      },
      "CheckInCreateInput": {
        "description": "Attributes for creating a check-in.",
        "allOf": [
          {
            "$ref": "#/components/schemas/CheckInInput"
          }
        ]
      },
      "CheckInInput": {
        "type": "object",
        "description": "Writable check-in attributes. Read-only fields are ignored.\n",
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Display name. Null clears it; an unnamed check-in shows its ID.",
            "example": "Nightly billing job"
          },
          "slug": {
            "type": [
              "string",
              "null"
            ],
            "description": "Short identifier used in the check-in's reporting URL. Null clears it. Renaming it breaks jobs reporting to `…/check_in/<ingestion key>/<slug>` and changes how `PUT /check_ins` matches this check-in.\n",
            "example": "nightly-billing"
          },
          "schedule_type": {
            "description": "Switching to `simple` clears `cron_schedule` and resets `cron_timezone` to `UTC`; switching to `cron` clears `report_period`.\n",
            "allOf": [
              {
                "$ref": "#/components/schemas/CheckInScheduleType"
              }
            ]
          },
          "report_period": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^(\\d+ (second|minute|hour|day|week|month|year)s?)( \\d+ (second|minute|hour|day|week|month|year)s?)*$|^\\d\\d:\\d\\d:\\d\\d$",
            "description": "How often a report is expected, for `simple` schedules. Required unless `schedule_type` is `cron`, and may not be zero. A duration such as `5 minutes`, `1 hour 30 minutes` or `01:30:00`. Returned in long form: `1 week` comes back as `7 days`.\n",
            "example": "1 day"
          },
          "grace_period": {
            "type": [
              "string",
              "null"
            ],
            "default": "00:00:00",
            "pattern": "^(\\d+ (second|minute|hour|day|week|month|year)s?)( \\d+ (second|minute|hour|day|week|month|year)s?)*$|^\\d\\d:\\d\\d:\\d\\d$",
            "description": "How long after the expected time before the check-in is considered missing. Same format as `report_period`; zero is `00:00:00`. Null resets it to zero.\n",
            "example": "10 minutes"
          },
          "cron_schedule": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cron expression, required when `schedule_type` is `cron`.",
            "example": "0 3 * * *"
          },
          "cron_timezone": {
            "type": [
              "string",
              "null"
            ],
            "default": "UTC",
            "description": "Timezone the cron schedule is evaluated in. A time zone name as the web app lists them, not an IANA identifier — `Central Time (US & Canada)`, not `America/Chicago`, which is rejected. Required when `schedule_type` is `cron`. Null resets it to `UTC`.\n",
            "example": "Central Time (US & Canada)"
          }
        }
      },
      "Comment": {
        "type": "object",
        "description": "A comment on a fault",
        "required": [
          "id",
          "fault_id",
          "created_at",
          "links",
          "author",
          "body",
          "source",
          "event"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Cm7pLx"
          },
          "fault_id": {
            "type": "string",
            "description": "ID of the fault this comment belongs to",
            "example": "12345"
          },
          "author": {
            "type": [
              "object",
              "null"
            ],
            "description": "Author of the comment",
            "properties": {
              "id": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "ID of the author",
                "example": "Uz4wKm"
              },
              "name": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Name of the author",
                "example": "Jane Smith"
              },
              "email": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Email of the author; null for authors known only by name, such as an account token or name-only feedback",
                "example": "jane@example.com"
              }
            }
          },
          "body": {
            "type": [
              "string",
              "null"
            ],
            "description": "Comment body text",
            "example": "Fixed in the 2.4.1 release."
          },
          "source": {
            "type": "string",
            "description": "Where the comment was made: `web`, `web-batch` (a bulk action in the web app), `api`, `email` (a reply to a notification email), `feedback` (a user feedback form) or `unknown`.\n",
            "example": "web"
          },
          "event": {
            "type": [
              "string",
              "null"
            ],
            "description": "Event type associated with the comment",
            "example": null
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the comment was created"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "CommentInput": {
        "type": "object",
        "description": "Writable comment attributes",
        "required": [
          "body"
        ],
        "additionalProperties": false,
        "properties": {
          "body": {
            "type": "string",
            "description": "The comment text. `@mentions` notify the named project members.",
            "example": "Rolled back, watching for recurrence."
          }
        }
      },
      "Dashboard": {
        "type": "object",
        "description": "An Insights dashboard: a project's grid of widgets charting queries, errors, uptime, check-ins, deploys and alarms.\n",
        "required": [
          "id",
          "project_id",
          "title",
          "links",
          "default_ts",
          "widgets",
          "is_default",
          "shared",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "type": "string",
            "example": "Db4rKn"
          },
          "project_id": {
            "readOnly": true,
            "type": "string",
            "description": "ID of the project this dashboard belongs to",
            "example": "Xk9mZp"
          },
          "title": {
            "type": "string",
            "description": "Dashboard title",
            "example": "Performance Overview"
          },
          "widgets": {
            "type": "array",
            "description": "The dashboard's widgets, in the order they were written and in the same shape a write accepts, including `config.streams` as stream slugs.\n",
            "items": {
              "$ref": "#/components/schemas/DashboardWidget"
            }
          },
          "is_default": {
            "readOnly": true,
            "type": "boolean",
            "description": "Whether this is the default dashboard"
          },
          "shared": {
            "readOnly": true,
            "type": "boolean",
            "description": "Whether the dashboard is shared with all team members"
          },
          "default_ts": {
            "type": [
              "string",
              "null"
            ],
            "description": "Default time range for the dashboard",
            "example": "PT3H"
          },
          "created_at": {
            "readOnly": true,
            "type": "string",
            "format": "date-time",
            "description": "When the dashboard was created"
          },
          "updated_at": {
            "readOnly": true,
            "type": "string",
            "format": "date-time",
            "description": "When the dashboard was last updated"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "DashboardWidget": {
        "type": "object",
        "description": "A widget on an Insights dashboard. Responses leave out empty values (null, \"\", [], {}); false and 0 are kept. A widget written without an `id` gets a generated one, and its `grid` is merged into the default {x: 0, y: 0, w: 12, h: 3}.\n",
        "required": [
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Kept as sent, or generated when left out. Send it back on update to keep the widget.\n",
            "example": "checkout-errors"
          },
          "type": {
            "$ref": "#/components/schemas/DashboardWidgetType"
          },
          "grid": {
            "type": "object",
            "description": "Position and size on the dashboard grid.",
            "additionalProperties": false,
            "properties": {
              "x": {
                "type": "integer",
                "minimum": 0
              },
              "y": {
                "type": "integer",
                "minimum": 0
              },
              "w": {
                "type": "integer",
                "minimum": 1
              },
              "h": {
                "type": "integer",
                "minimum": 1
              }
            }
          },
          "presentation": {
            "type": "object",
            "description": "Display-only chrome.",
            "additionalProperties": false,
            "properties": {
              "title": {
                "type": "string",
                "maxLength": 255,
                "example": "Checkout errors"
              },
              "subtitle": {
                "type": "string",
                "maxLength": 255,
                "example": "Last 24 hours"
              }
            }
          },
          "config": {
            "type": "object",
            "description": "Type-specific configuration. Its fields depend on `type`; the DashboardWidgetConfig schema for each type lists them.\n",
            "additionalProperties": true
          }
        }
      },
      "DashboardInput": {
        "type": "object",
        "required": [
          "title"
        ],
        "additionalProperties": false,
        "properties": {
          "title": {
            "type": "string",
            "example": "Production overview",
            "maxLength": 255
          },
          "default_ts": {
            "type": [
              "string",
              "null"
            ],
            "description": "Default time range. Null clears it."
          },
          "widgets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DashboardWidgetInput"
            },
            "default": [],
            "description": "The dashboard's widgets, kept and read back in this order. Sent on an update, the list replaces the stored one."
          }
        }
      },
      "DashboardUpdateInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "title": {
            "type": "string",
            "example": "Production overview",
            "maxLength": 255
          },
          "default_ts": {
            "type": [
              "string",
              "null"
            ],
            "description": "Default time range. Null clears it."
          },
          "widgets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DashboardWidgetInput"
            },
            "default": [],
            "description": "The dashboard's widgets, kept and read back in this order. Sent on an update, the list replaces the stored one."
          }
        },
        "description": "Fields to change on a dashboard. A field left out keeps its current value. `widgets` replaces the whole list: to remove a widget, send the list without it. A widget that keeps its `id` is updated in place, and one without an `id` is added.\n"
      },
      "Deploy": {
        "type": "object",
        "description": "A deploy event",
        "required": [
          "id",
          "project_id",
          "environment",
          "revision",
          "repository",
          "local_username",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Dp2yNk"
          },
          "project_id": {
            "type": "string",
            "description": "ID of the project this deploy belongs to",
            "example": "Xk9mZp"
          },
          "environment": {
            "type": [
              "string",
              "null"
            ],
            "description": "Deploy environment; null when the deploy named none",
            "example": "production"
          },
          "revision": {
            "type": [
              "string",
              "null"
            ],
            "description": "Source control revision",
            "example": "a1b2c3d4"
          },
          "repository": {
            "type": [
              "string",
              "null"
            ],
            "description": "Source control repository",
            "example": "acme/app"
          },
          "local_username": {
            "type": [
              "string",
              "null"
            ],
            "description": "Username of the person who triggered the deploy",
            "example": "jane"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the deploy was recorded"
          }
        }
      },
      "Environment": {
        "type": "object",
        "description": "An environment a project's errors are reported from, such as production or staging, and whether errors from it send notifications.\n",
        "required": [
          "id",
          "project_id",
          "name",
          "notifications",
          "created_at"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "type": "string",
            "example": "En6tRm"
          },
          "project_id": {
            "readOnly": true,
            "type": "string",
            "description": "ID of the project this environment belongs to",
            "example": "Xk9mZp"
          },
          "name": {
            "type": "string",
            "description": "Environment name",
            "example": "production"
          },
          "notifications": {
            "type": "boolean",
            "description": "Whether notifications fire for this environment."
          },
          "created_at": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the environment was created"
          }
        }
      },
      "EnvironmentCreateInput": {
        "type": "object",
        "description": "A new environment. Names are unique per project and case-sensitive.",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "example": "production"
          },
          "notifications": {
            "type": [
              "boolean",
              "null"
            ],
            "default": true,
            "description": "Whether errors in this environment notify. Null means the default."
          }
        }
      },
      "EnvironmentInput": {
        "type": "object",
        "description": "Fields to change on an environment. Omitted fields are unchanged. Read-only fields are ignored.\n",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Can only be sent with its current value; an environment can't be renamed.",
            "example": "production"
          },
          "notifications": {
            "type": [
              "boolean",
              "null"
            ],
            "default": true,
            "description": "Whether errors in this environment notify. Null resets it to true."
          }
        }
      },
      "Error": {
        "type": "object",
        "description": "An error response. `error.code` names the error and is stable; branch on\nit, since several codes share a status. `error.message` is for people and\nmay change.\n\n`error.details`, when present, takes one of three shapes:\n\n- **A list of `{field, message}`**, on `validation_error` and\n  `invalid_parameter`, and on `feature_unavailable` or `limit_reached` when\n  one field caused the refusal. `field` can be a path such as\n  `widgets[1].id` or `check_ins.<slug>`, or `base` for the record as a\n  whole, and the same field can appear more than once.\n- **`{required_scope, token_scopes}`**, on `insufficient_scope`: the scope\n  the operation needs, and the scopes the token has.\n- **`{merged_into, location}`**, on `fault_merged`: the fault it was merged\n  into. Only writes get this; reads of a merged fault redirect to it with a\n  301.\n\nEvery 429 sends a `Retry-After` header with the seconds to wait. A 503 can\nbe retried after a short wait.\n\nInclude `meta.request_id` when contacting support.\n\n| `error.code` | Status | Meaning |\n| --- | --- | --- |\n| `invalid_parameter` | 400 | A query parameter is malformed or outside its allowed values. |\n| `unauthorized` | 401 | The credential is missing, invalid or revoked. |\n| `unsupported_auth_scheme` | 401 | The credential was sent with HTTP basic auth instead of as a Bearer token. |\n| `credential_in_query` | 401 | The credential was sent in the URL. |\n| `ingestion_key_not_accepted` | 401 | An ingestion key was sent; this API takes an API token. |\n| `access_denied` | 403 | The credential isn't allowed to do this to this record. |\n| `insufficient_scope` | 403 | The token lacks a scope this needs. `details` names it. |\n| `project_restricted` | 403 | A token limited to some projects can't create projects. |\n| `requires_user_token` | 403 | This records who acted, so it needs a user token, not an account token. |\n| `feature_unavailable` | 403 | The plan doesn't include this. |\n| `limit_reached` | 403 | The plan's limit for this resource is reached. |\n| `account_inactive` | 403 | The account isn't active. |\n| `account_parked` | 403 | The account is parked. |\n| `not_found` | 404 | Doesn't exist, or isn't visible to this credential. |\n| `fault_merged` | 409 | The fault was merged into another. `details` names it. |\n| `validation_error` | 422 | The body is invalid. `details`, when present, names each field. |\n| `forbidden_attributes` | 422 | The body sets fields that can't be set. |\n| `ambiguous_account` | 422 | The credential covers more than one account. |\n| `delete_failed` | 422 | The delete didn't complete. |\n| `rate_limit_exceeded` | 429 | Over the rate limit. Wait for `Retry-After`. |\n| `concurrent_request` | 429 | Another request is changing the same thing. Retry. |\n| `streams_provisioning` | 429 | The project's Insights streams are still being set up. Retry. |\n| `maintenance_mode` | 503 | Writes are paused for maintenance. Retry later. |\n| `service_unavailable` | 503 | Temporarily unavailable. Retry shortly. |\n",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ErrorBody"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ErrorBody": {
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Machine-readable code. Branch on this, not the message.\n",
            "enum": [
              "unauthorized",
              "unsupported_auth_scheme",
              "credential_in_query",
              "access_denied",
              "insufficient_scope",
              "requires_user_token",
              "project_restricted",
              "account_inactive",
              "account_parked",
              "feature_unavailable",
              "not_found",
              "validation_error",
              "delete_failed",
              "limit_reached",
              "rate_limit_exceeded",
              "concurrent_request",
              "streams_provisioning",
              "ingestion_key_not_accepted",
              "maintenance_mode",
              "invalid_parameter",
              "forbidden_attributes",
              "service_unavailable",
              "ambiguous_account",
              "fault_merged"
            ]
          },
          "message": {
            "type": "string",
            "description": "Human-readable explanation",
            "example": "Access denied"
          },
          "details": {
            "description": "A list of `{field, message}` on `validation_error` and `invalid_parameter`, and on `feature_unavailable` or `limit_reached` when one field caused the refusal; `{required_scope, token_scopes}` on `insufficient_scope`; `{merged_into, location}` on `fault_merged`. Absent when there's nothing to add.\n",
            "oneOf": [
              {
                "type": "array",
                "title": "ValidationErrorDetails",
                "description": "One entry per problem, naming the field it's about.",
                "items": {
                  "$ref": "#/components/schemas/ErrorDetail"
                }
              },
              {
                "type": "object",
                "title": "InsufficientScopeDetails",
                "description": "The scope the endpoint requires and the scopes the credential holds.\n",
                "required": [
                  "required_scope",
                  "token_scopes"
                ],
                "properties": {
                  "required_scope": {
                    "type": "string",
                    "description": "The permission this endpoint requires.",
                    "example": "faults:write"
                  },
                  "token_scopes": {
                    "type": "array",
                    "description": "The permissions the credential actually holds.",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              },
              {
                "type": "object",
                "title": "FaultMergedDetails",
                "description": "The fault this one was merged into.\n",
                "required": [
                  "merged_into",
                  "location"
                ],
                "properties": {
                  "merged_into": {
                    "type": "string",
                    "description": "ID of the fault this one was merged into.",
                    "example": "12345"
                  },
                  "location": {
                    "type": "string",
                    "format": "uri",
                    "description": "Absolute v3 URL of the surviving fault."
                  }
                }
              }
            ]
          }
        }
      },
      "ErrorDetail": {
        "type": "object",
        "required": [
          "field",
          "message"
        ],
        "properties": {
          "field": {
            "type": "string",
            "description": "The field that failed validation",
            "example": "name"
          },
          "message": {
            "type": "string",
            "description": "Why it failed, without the field name repeated",
            "example": "can't be blank"
          }
        }
      },
      "Fault": {
        "type": "object",
        "description": "A unique error fingerprint (fault)",
        "required": [
          "id",
          "project_id",
          "message",
          "created_at",
          "links"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "12345"
          },
          "project_id": {
            "type": "string",
            "description": "ID of the project this fault belongs to",
            "example": "Xk9mZp"
          },
          "klass": {
            "type": [
              "string",
              "null"
            ],
            "description": "Error class name",
            "example": "NoMethodError"
          },
          "message": {
            "type": "string",
            "description": "Error message",
            "example": "undefined method 'foo' for nil:NilClass"
          },
          "component": {
            "type": [
              "string",
              "null"
            ],
            "description": "Component where the error occurred",
            "example": "UsersController"
          },
          "action": {
            "type": [
              "string",
              "null"
            ],
            "description": "Action where the error occurred",
            "example": "show"
          },
          "environment": {
            "type": [
              "string",
              "null"
            ],
            "description": "Environment name",
            "example": "production"
          },
          "resolved": {
            "type": "boolean",
            "description": "Whether the fault is resolved"
          },
          "ignored": {
            "type": "boolean",
            "description": "Whether the fault is ignored"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the fault was first reported"
          },
          "last_notice_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the last notice was received"
          },
          "notices_count": {
            "type": "integer",
            "description": "Total number of notices for this fault",
            "example": 214
          },
          "comments_count": {
            "type": "integer",
            "description": "Number of comments on this fault",
            "example": 2
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Tags assigned to this fault",
            "example": [
              "critical",
              "backend"
            ]
          },
          "assignee_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Same as `assignee.id`. Written by PATCH or POST …/assign.",
            "example": "Uq7rT2"
          },
          "snoozed": {
            "type": "boolean",
            "readOnly": true,
            "description": "Whether a snooze is in effect now. A new snooze replaces any existing one."
          },
          "assignee": {
            "type": [
              "object",
              "null"
            ],
            "description": "User assigned to this fault",
            "properties": {
              "id": {
                "type": "string",
                "description": "ID of the assignee",
                "example": "Uz4wKm"
              },
              "name": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Name of the assignee",
                "example": "Jane Smith"
              },
              "email": {
                "type": "string",
                "description": "Email of the assignee",
                "example": "jane@example.com"
              }
            }
          },
          "last_notice_deploy": {
            "description": "The deploy that was live when the error last occurred: the newest deploy in the fault's environment before `last_notice_at`. A guess from timing, not the deploy that introduced or resolved the error.\n",
            "oneOf": [
              {
                "$ref": "#/components/schemas/Deploy"
              },
              {
                "type": "null"
              }
            ]
          },
          "tickets": {
            "type": "array",
            "description": "Issue tracker tickets linked to this fault",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string",
                  "description": "URL of the ticket",
                  "example": "https://github.com/acme/shop/issues/482"
                },
                "integration_id": {
                  "type": "string",
                  "description": "ID of the integration that created the ticket",
                  "example": "Ch9wLp"
                }
              }
            }
          },
          "resolve_on_deploy": {
            "type": "boolean",
            "description": "Whether this fault is waiting to be resolved by the next recorded deploy. Absent for a fault on an inactive project.\n"
          },
          "recording_paused_until": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When a recording pause ends; null when recording is not paused. Absent for a fault on an inactive project.\n"
          },
          "notices_count_in_range": {
            "type": "integer",
            "description": "Notices inside the requested occurrence window. Present only when the request supplied `occurred_after` or `occurred_before`.\n",
            "example": 37
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "FaultAssignmentInput": {
        "type": "object",
        "description": "Who to assign a fault to",
        "required": [
          "assignee_id"
        ],
        "additionalProperties": false,
        "properties": {
          "assignee_id": {
            "type": "string",
            "description": "ID of a user on the project. To unassign, DELETE the same path.\n",
            "example": "Xk9mZp"
          }
        }
      },
      "FaultSelectionInput": {
        "type": "object",
        "description": "Selects the faults a bulk operation applies to",
        "additionalProperties": false,
        "properties": {
          "all": {
            "type": "boolean",
            "description": "Apply to every fault the other filters match, which with no other filters is every fault in the project. Required to make an unbounded change explicit; ignored when `fault_ids` names specific faults.\n",
            "example": false
          },
          "dry_run": {
            "type": "boolean",
            "description": "Report what the request would change without changing it — no state change, no comments, no timeline entries. The response has the same shape either way, with `dry_run` echoed back.\n",
            "example": false
          },
          "fault_ids": {
            "type": "array",
            "description": "IDs of the faults to change. If any ID isn't a fault in this project, nothing changes. Omit to act on everything the query and time filters match; with no filters, that requires `\"all\": true`.\n",
            "items": {
              "type": "string"
            },
            "example": [
              "12345",
              "12346"
            ]
          },
          "q": {
            "type": "string",
            "description": "Search query, in the syntax of the web UI's error search, applied when `fault_ids` is left out. See [Error search](https://docs.honeybadger.io/guides/errors/search/) for the syntax and filters.\n",
            "example": "-is:resolved"
          },
          "created_after": {
            "type": "number",
            "format": "double",
            "description": "Only faults created after this Unix timestamp. Applied when `fault_ids` is omitted, alongside q.\n"
          },
          "occurred_after": {
            "type": "number",
            "format": "double",
            "description": "Only faults that occurred after this Unix timestamp. Applied when `fault_ids` is omitted, alongside `q`.\n"
          },
          "occurred_before": {
            "type": "number",
            "format": "double",
            "description": "Only faults that occurred before this Unix timestamp. Applied when `fault_ids` is omitted, alongside `q`.\n"
          }
        }
      },
      "FaultBulkResult": {
        "type": "object",
        "required": [
          "count",
          "dry_run",
          "fault_ids"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "description": "How many faults changed. Exact, and counts what changed rather than what matched: resolving a hundred faults of which ninety were already resolved reports ten. On a dry run, how many would have changed.\n",
            "example": 12
          },
          "dry_run": {
            "type": "boolean",
            "description": "True when nothing was written. Echoed back so a response is never ambiguous about whether it took effect.\n",
            "example": false
          },
          "fault_ids": {
            "type": "array",
            "description": "IDs of the faults that changed, capped at 100. `count` is exact regardless; see `fault_ids_truncated`.\n",
            "items": {
              "type": "string"
            },
            "example": [
              "12345",
              "12346"
            ]
          },
          "fault_ids_truncated": {
            "type": "boolean",
            "description": "True when more faults changed than `fault_ids` lists.",
            "example": false
          }
        }
      },
      "FaultInput": {
        "type": "object",
        "description": "Writable fault attributes",
        "additionalProperties": false,
        "properties": {
          "resolved": {
            "type": "boolean"
          },
          "ignored": {
            "type": "boolean"
          },
          "assignee_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of a user on the project. Null unassigns.\n",
            "example": "Xk9mZp"
          },
          "tags": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "resolve_on_deploy": {
            "type": "boolean",
            "description": "Set to true to resolve this fault when the project's next deploy is recorded, in any environment. After that deploy, it reads false again.\n\nIt has no effect if the fault is resolved or ignored once the rest of this update is applied. If the fault is resolved or ignored before the next deploy, the pending resolution is cancelled. Set it to false to cancel it yourself.\n"
          }
        }
      },
      "IncidentUpdate": {
        "type": "object",
        "description": "An update to a status page incident. The incident's prose lives here, and its `current_status`, `current_severity` and `closed_at` are derived from its updates.",
        "required": [
          "id",
          "incident_id",
          "status",
          "severity"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Iu6tMn"
          },
          "incident_id": {
            "type": "string",
            "description": "ID of the incident",
            "example": "In3pKr"
          },
          "message": {
            "type": [
              "string",
              "null"
            ],
            "description": "The update's prose",
            "example": "We have identified the cause and are rolling back."
          },
          "status": {
            "$ref": "#/components/schemas/IncidentStatus"
          },
          "severity": {
            "$ref": "#/components/schemas/IncidentSeverity"
          },
          "start_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the update takes effect. A future time schedules it."
          },
          "should_notify": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether the update is announced on the status page's connected accounts"
          },
          "notified_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the announcement was sent"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the update was posted"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the update was last changed"
          }
        }
      },
      "IncidentUpdateInput": {
        "type": "object",
        "description": "The writable fields of an incident update. `status` and `severity` default to `investigating` and `problem_detected`. If neither `start_at` nor `start_now` is given, the update starts now.",
        "additionalProperties": false,
        "properties": {
          "message": {
            "type": "string",
            "description": "The update's prose",
            "example": "We have identified the cause and are rolling back."
          },
          "status": {
            "$ref": "#/components/schemas/IncidentStatus"
          },
          "severity": {
            "$ref": "#/components/schemas/IncidentSeverity"
          },
          "start_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the update takes effect. Only a scheduled_maintenance incident may set this in the future."
          },
          "start_now": {
            "type": "boolean",
            "description": "Start the update immediately, ignoring `start_at`. An update that has already started is left as it is, so sending it again changes nothing.\n"
          },
          "should_notify": {
            "type": "boolean",
            "description": "Announce the update on the status page's connected accounts and email the status page's subscribers"
          }
        }
      },
      "Notice": {
        "type": "object",
        "description": "An individual error occurrence",
        "required": [
          "id",
          "fault_id",
          "project_id",
          "message",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The notice's ID, a UUID that addresses it without its project or fault",
            "example": "1e2ba1f0-4f3c-4b1a-9c7e-6f2f5c0f1a3b"
          },
          "fault_id": {
            "type": "string",
            "description": "ID of the fault this notice belongs to",
            "example": "12345"
          },
          "project_id": {
            "type": "string",
            "description": "ID of the project",
            "example": "Xk9mZp"
          },
          "environment": {
            "type": [
              "string",
              "null"
            ],
            "description": "Environment name: the fault's environment, or the one the notice reported when the fault has none. Null when neither is set.\n",
            "example": "production"
          },
          "message": {
            "type": [
              "string",
              "null"
            ],
            "description": "Error message. Null when the notifier reported none.",
            "example": "undefined method 'foo' for nil:NilClass"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the notice was received"
          },
          "request": {
            "type": [
              "object",
              "null"
            ],
            "description": "Request details when the error occurred. Fields not reported are null.",
            "properties": {
              "url": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Request URL",
                "example": "https://shop.example.com/checkout"
              },
              "component": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Controller or component name",
                "example": "CheckoutController"
              },
              "action": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Action name",
                "example": "create"
              },
              "params": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Request parameters"
              },
              "session": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Session data"
              }
            }
          },
          "context": {
            "type": "object",
            "description": "Custom context data sent with the notice",
            "additionalProperties": true
          },
          "backtrace": {
            "type": "array",
            "description": "Stack trace frames, at most 20. Source-mapped by default; pass `unmapped=true` for the frames exactly as the client sent them.\n",
            "items": {
              "$ref": "#/components/schemas/NoticeFrame"
            }
          },
          "backtrace_mode": {
            "type": "string",
            "enum": [
              "source_mapped",
              "reported"
            ],
            "description": "Which representation of the trace this response carries. `source_mapped` when a stored mapped trace was served, `reported` when the frames are as the client sent them — either because `unmapped=true` was requested or because no different mapped trace was stored.\n",
            "example": "source_mapped"
          },
          "backtrace_total_frames": {
            "type": "integer",
            "description": "Total frames in the selected trace before the 20-frame limit was applied.\n",
            "example": 25
          },
          "backtrace_truncated": {
            "type": "boolean",
            "description": "Whether `backtrace` omits frames because of the 20-frame limit.",
            "example": true
          },
          "request_fields_removed": {
            "type": [
              "array",
              "null"
            ],
            "description": "Names of `request` fields removed at ingest because the payload exceeded the size limit. Null when nothing was removed.\n",
            "items": {
              "type": "string"
            },
            "example": [
              "params"
            ]
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "NoticeFrame": {
        "type": "object",
        "properties": {
          "file": {
            "type": [
              "string",
              "null"
            ],
            "description": "Path to the source file. Null when the notifier sent a backtrace entry that carried no file, or one that was not a frame at all.\n",
            "example": "app/models/checkout.rb"
          },
          "line": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Line number within `file`. Null when the notifier sent a value that is not a line number, such as `(eval)`.\n",
            "example": 42
          },
          "column": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Column number. Usually present only on source-mapped frames.",
            "example": 8
          },
          "method": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of the method or function. Null when the notifier omitted it, and routinely on source-mapped frames where the map carries no name for the position.\n",
            "example": "submit_order"
          },
          "in_app": {
            "type": "boolean",
            "description": "Whether this frame is the project's own code rather than a framework, gem or dependency. Derived from the project root the notifier reported.\n",
            "example": true
          },
          "mapping": {
            "type": "string",
            "enum": [
              "source_mapped",
              "reported"
            ],
            "description": "Whether this specific frame was resolved through a source map. Mapping is applied one frame at a time and falls back to the reported frame, so a source-mapped trace can contain reported frames. Always `reported` when `unmapped=true` was requested.\n",
            "example": "source_mapped"
          },
          "source": {
            "type": "array",
            "description": "Contiguous runs of source lines around the frame. Normally one block; a notifier-sent snippet with a gap produces one block per run. Empty when no source is available, when the notifier sent it in a shape other than a map of line number to content, or when no entry carried a usable line number. At most 25 lines in total.\n",
            "items": {
              "$ref": "#/components/schemas/SourceBlock"
            }
          }
        }
      },
      "SourceBlock": {
        "type": "object",
        "required": [
          "first_line",
          "lines"
        ],
        "properties": {
          "first_line": {
            "type": "integer",
            "description": "Line number of the first entry in `lines`.",
            "example": 41
          },
          "lines": {
            "type": "array",
            "description": "Source lines in order. Each line is truncated to 1024 characters. Across all of a frame's blocks at most 25 lines are returned, chosen nearest the frame's own line so that line is always present when the notifier sent it.\n",
            "items": {
              "type": "string",
              "maxLength": 1024
            },
            "example": [
              "  def submit",
              "    charge!",
              "  end"
            ]
          }
        }
      },
      "OccurrenceMeta": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string",
            "example": "6f1c2b0e-8d4a-4f6e-9b2a-3c5d7e9f1a2b"
          },
          "period": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "week",
              "month"
            ],
            "description": "The window used, which is `hour` when none was requested"
          },
          "interval": {
            "type": "string",
            "enum": [
              "minute",
              "hour",
              "day"
            ],
            "description": "Bucket width implied by the period"
          }
        }
      },
      "OccurrenceSeries": {
        "type": "object",
        "required": [
          "project_id",
          "buckets"
        ],
        "properties": {
          "project_id": {
            "type": "string",
            "description": "ID of the project this series belongs to",
            "example": "Xk9mZp"
          },
          "buckets": {
            "type": "array",
            "description": "One entry per interval in the window, oldest first, including intervals with no notices.\n",
            "items": {
              "type": "object",
              "required": [
                "timestamp",
                "count"
              ],
              "properties": {
                "timestamp": {
                  "type": "integer",
                  "format": "int64",
                  "description": "Start of the interval, Unix seconds",
                  "example": 1704067200
                },
                "count": {
                  "type": "integer",
                  "description": "Notices recorded in this interval",
                  "example": 17
                }
              }
            }
          }
        }
      },
      "OffsetLinks": {
        "type": "object",
        "description": "Navigation links for a numbered-page collection. Each link is a root-relative path (`/v3/...`); resolve it against the API host.",
        "required": [
          "self"
        ],
        "properties": {
          "self": {
            "type": "string",
            "format": "uri-reference",
            "description": "This page",
            "example": "/v3/projects?page=2&per_page=25"
          },
          "first": {
            "type": "string",
            "format": "uri-reference",
            "description": "First page",
            "example": "/v3/projects?page=1&per_page=25"
          },
          "prev": {
            "type": [
              "string",
              "null"
            ],
            "description": "Previous page, or null on the first page",
            "example": "/v3/projects?page=1&per_page=25"
          },
          "next": {
            "type": [
              "string",
              "null"
            ],
            "description": "Next page, or null on the last page",
            "example": "/v3/projects?page=3&per_page=25"
          }
        }
      },
      "Outage": {
        "type": "object",
        "description": "An uptime outage period",
        "required": [
          "id",
          "site_id",
          "down_at",
          "status",
          "reason",
          "headers",
          "created_at",
          "up_at",
          "duration_seconds"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "example": "3d7a1c94-6f28-4e5b-8a13-c5e9b204d6f8"
          },
          "site_id": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of the site",
            "example": "9f8b6d2e-4c1a-4b7f-9e35-2a6c8d0f1b47"
          },
          "down_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the site went down"
          },
          "up_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the site came back up, or null while it is still down"
          },
          "status": {
            "type": [
              "integer",
              "null"
            ],
            "description": "HTTP status of the check that went down",
            "example": 502
          },
          "reason": {
            "type": [
              "string",
              "null"
            ],
            "description": "Why the check failed",
            "example": "Expected 200, got 502"
          },
          "headers": {
            "type": "object",
            "description": "Response headers of the failing check",
            "additionalProperties": {
              "type": "string"
            }
          },
          "duration_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Duration of the outage in seconds",
            "example": 360
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the outage record was created"
          }
        }
      },
      "Pagination": {
        "type": "object",
        "description": "Offset-based pagination information",
        "required": [
          "page",
          "per_page"
        ],
        "properties": {
          "page": {
            "type": "integer",
            "description": "Current page number",
            "minimum": 1,
            "example": 1
          },
          "per_page": {
            "type": "integer",
            "description": "Items per page",
            "minimum": 1,
            "maximum": 100,
            "example": 25
          }
        }
      },
      "Project": {
        "type": "object",
        "description": "A Honeybadger project: one application or service. Errors, Insights data, uptime sites, check-ins, deploys and integrations all belong to a project.\n",
        "required": [
          "id",
          "account_id",
          "name",
          "asana_workspace_id",
          "active",
          "links",
          "disable_public_links",
          "environments",
          "language",
          "resolve_errors_on_deploy",
          "user_url",
          "source_url",
          "user_search_field",
          "customer_throttle",
          "fault_count",
          "unresolved_fault_count",
          "last_notice_at",
          "earliest_notice_at",
          "purge_days",
          "created_at"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "type": "string",
            "example": "Xk9mZp"
          },
          "account_id": {
            "readOnly": true,
            "type": "string",
            "description": "ID of the account this project belongs to",
            "example": "Ab3kL9"
          },
          "name": {
            "type": "string",
            "description": "Project name",
            "example": "My Rails App"
          },
          "active": {
            "readOnly": true,
            "type": "boolean",
            "description": "Whether the project is active"
          },
          "disable_public_links": {
            "type": "boolean",
            "description": "Whether public error links are disabled"
          },
          "environments": {
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of environment names seen in this project",
            "example": [
              "production",
              "staging",
              "development"
            ]
          },
          "resolve_errors_on_deploy": {
            "type": "boolean",
            "description": "Whether recording a deploy resolves every open fault"
          },
          "user_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Template linking a fault's affected user into your own system. `[user_id]` and `[user_email]` are substituted.\n",
            "example": "https://admin.example.com/users/[user_id]"
          },
          "source_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Template linking a backtrace line to your source host. `[file]` and `[line]` are substituted.\n",
            "example": "https://github.com/acme/app/blob/main/[file]#L[line]"
          },
          "user_search_field": {
            "type": [
              "string",
              "null"
            ],
            "description": "Context key identifying the affected user, when it is not in the default `context.user_email` or `context.user_id`.\n",
            "example": "context.account_id"
          },
          "asana_workspace_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Asana workspace used by the project's Asana integration",
            "example": null
          },
          "customer_throttle": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Notices accepted per minute before throttling kicks in"
          },
          "language": {
            "type": [
              "string",
              "null"
            ],
            "description": "Primary programming language",
            "example": "Ruby"
          },
          "fault_count": {
            "readOnly": true,
            "type": "integer",
            "description": "Total number of faults (errors) in this project",
            "example": 128
          },
          "unresolved_fault_count": {
            "readOnly": true,
            "type": "integer",
            "description": "Number of unresolved faults",
            "example": 12
          },
          "last_notice_at": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the last error was received"
          },
          "earliest_notice_at": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "The start of the retention window: now minus the project's `purge_days` (or the account's retention when unset), at most 180 days. Computed on each read, so it moves forward with the clock.\n"
          },
          "purge_days": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Data retention period in days",
            "example": 90
          },
          "created_at": {
            "readOnly": true,
            "type": "string",
            "format": "date-time",
            "description": "When the project was created"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "ProjectCreateInput": {
        "description": "Attributes for creating a project.",
        "allOf": [
          {
            "$ref": "#/components/schemas/ProjectInput"
          },
          {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "disable_email_notifications": {
                "type": "boolean",
                "writeOnly": true,
                "description": "Create-only. Members added with the project get email notifications switched off. Not stored or returned.\n"
              },
              "team_id": {
                "type": "string",
                "description": "Puts the new project in this team. Create-only: afterwards the team's `project_ids` owns membership. Including it requires `team:write` in addition to the operation's project scope, and the user must be allowed to manage the team. Without `team:write` the entire request is rejected with 403 `insufficient_scope`; no other fields are saved.\n",
                "example": "Ab3kL9"
              }
            }
          }
        ]
      },
      "ProjectInput": {
        "type": "object",
        "description": "Writable project attributes. Omitted fields are unchanged; null resets or clears the fields marked nullable. `team_id` and `disable_email_notifications` can only be set on create. Read-only fields are ignored.\n",
        "properties": {
          "name": {
            "type": "string",
            "description": "Project name",
            "example": "Billing API"
          },
          "resolve_errors_on_deploy": {
            "type": [
              "boolean",
              "null"
            ],
            "default": true,
            "description": "Resolve every open fault when a deploy is recorded. Null resets it to true."
          },
          "disable_public_links": {
            "type": [
              "boolean",
              "null"
            ],
            "default": false,
            "description": "Disallow shareable public fault links. Null resets it to false."
          },
          "language": {
            "type": [
              "string",
              "null"
            ],
            "description": "Primary language, used to format backtraces. Null clears it.",
            "example": "ruby"
          },
          "user_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Template for linking a fault's affected user into your own system. `[user_id]` and `[user_email]` are substituted. Null clears it.\n",
            "example": "https://admin.example.com/users/[user_id]"
          },
          "source_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Template for linking a backtrace line to your source host. `[file]` and `[line]` are substituted. Null clears it.\n",
            "example": "https://github.com/acme/app/blob/main/[file]#L[line]"
          },
          "user_search_field": {
            "type": [
              "string",
              "null"
            ],
            "description": "Context key identifying the affected user, for when it is not in the default `context.user_email` or `context.user_id`. Null clears it.\n",
            "example": "context.account_id"
          },
          "asana_workspace_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Asana workspace used by the project's Asana integration. Null clears it."
          },
          "customer_throttle": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Notices accepted per minute before throttling kicks in. Null clears it."
          },
          "purge_days": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Days to retain notices. Changing it requires custom retention on the account; without it, only the current value (on create, the default) is accepted. Null clears it.\n"
          }
        }
      },
      "IngestionKey": {
        "type": "object",
        "description": "The key your app uses to send data to Honeybadger, set as `ingestion_key` in the client's config (`api_key` in older clients). It can't authenticate to this API; use an API token for that.\n",
        "required": [
          "id",
          "project_id",
          "key",
          "label",
          "created_at"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "type": "string",
            "description": "Identifier for this key. Use it in paths.",
            "example": "Kp7mZq2x"
          },
          "project_id": {
            "readOnly": true,
            "type": "string",
            "description": "Identifier of the project the key belongs to.",
            "example": "Xk9mZp"
          },
          "key": {
            "readOnly": true,
            "type": "string",
            "description": "The Ingestion Key value a notifier sends. Returned in full: unlike an API Token, it's meant to ship with your application.\n",
            "example": "hbp_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345aB12Cd"
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "description": "Optional human-readable name.",
            "example": "CI"
          },
          "created_at": {
            "readOnly": true,
            "type": "string",
            "format": "date-time",
            "description": "When the key was created"
          }
        }
      },
      "IngestionKeyInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "label": {
            "type": [
              "string",
              "null"
            ],
            "description": "Optional human-readable name.",
            "example": "CI"
          }
        }
      },
      "ResponseMeta": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Unique identifier for the request, for correlating with support",
            "example": "6f1c2b0e-8d4a-4f6e-9b2a-3c5d7e9f1a2b"
          }
        }
      },
      "Site": {
        "type": "object",
        "description": "A URL Honeybadger checks for uptime from several locations on a schedule, alerting when it goes down and when it recovers.\n",
        "required": [
          "id",
          "project_id",
          "name",
          "url",
          "active",
          "links",
          "state",
          "last_checked_at",
          "match_type",
          "match",
          "request_method",
          "frequency",
          "locations",
          "validate_ssl",
          "request_headers",
          "request_body",
          "outage_threshold",
          "timeout",
          "created_at"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "type": "string",
            "format": "uuid",
            "example": "9f8b6d2e-4c1a-4b7f-9e35-2a6c8d0f1b47"
          },
          "project_id": {
            "readOnly": true,
            "type": "string",
            "description": "ID of the project this site belongs to",
            "example": "Xk9mZp"
          },
          "name": {
            "type": "string",
            "description": "Display name for the site",
            "example": "Production App"
          },
          "url": {
            "type": "string",
            "description": "URL to monitor. Includes the scheme.",
            "example": "https://app.example.com"
          },
          "active": {
            "type": "boolean",
            "description": "Whether monitoring is active. After 740 consecutive failed checks the server sets it to false."
          },
          "state": {
            "readOnly": true,
            "type": "string",
            "description": "Current state of the site",
            "enum": [
              "pending",
              "up",
              "down"
            ],
            "example": "up"
          },
          "last_checked_at": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the site was last checked"
          },
          "match_type": {
            "$ref": "#/components/schemas/SiteMatchType"
          },
          "match": {
            "type": [
              "string",
              "null"
            ],
            "description": "Value to match in the response",
            "example": null
          },
          "request_method": {
            "$ref": "#/components/schemas/SiteRequestMethod"
          },
          "frequency": {
            "$ref": "#/components/schemas/SiteFrequency"
          },
          "locations": {
            "type": "array",
            "uniqueItems": true,
            "items": {
              "$ref": "#/components/schemas/SiteLocation"
            },
            "description": "Locations checks run from. Unordered. [] means every location.",
            "example": [
              "Virginia",
              "London"
            ]
          },
          "validate_ssl": {
            "type": "boolean",
            "description": "Whether to validate SSL certificates"
          },
          "request_headers": {
            "type": "object",
            "description": "Custom headers sent with check requests, as header name to value; {} when there are none",
            "additionalProperties": {
              "type": "string",
              "format": "password"
            }
          },
          "request_body": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "description": "Request body for POST/PUT checks",
            "example": null
          },
          "outage_threshold": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Number of failed checks before declaring an outage",
            "example": 2
          },
          "timeout": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The stored request timeout in seconds; null means the default, 30. On a plan without custom timeouts the default applies whatever is stored.\n",
            "example": 30
          },
          "created_at": {
            "readOnly": true,
            "type": "string",
            "format": "date-time",
            "description": "When the site was created"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "SiteMatchType": {
        "type": "string",
        "enum": [
          "success",
          "exact",
          "include",
          "exclude",
          "jmespath"
        ],
        "description": "How a response is judged. `success`: any 2xx; `match` must be left out. `exact`: the response status code equals `match`. `include` / `exclude`: the body does / doesn't contain `match`. `jmespath`: `match` is a JMESPath expression evaluated against the JSON body; numbers in it use backticks, not quotes.\n"
      },
      "SiteFrequency": {
        "type": "integer",
        "enum": [
          1,
          2,
          5,
          15
        ],
        "description": "Minutes between checks. A value below the plan's floor is refused."
      },
      "SiteLocation": {
        "type": "string",
        "enum": [
          "Virginia",
          "Frankfurt",
          "Singapore",
          "London",
          "Oregon"
        ],
        "description": "A location uptime checks run from."
      },
      "SiteRequestMethod": {
        "type": "string",
        "enum": [
          "GET",
          "POST",
          "PUT",
          "PATCH",
          "DELETE"
        ]
      },
      "SiteCreateInput": {
        "description": "Attributes for creating a site. `name` defaults to the URL.",
        "allOf": [
          {
            "$ref": "#/components/schemas/SiteInput"
          },
          {
            "required": [
              "url"
            ]
          }
        ]
      },
      "SiteInput": {
        "type": "object",
        "description": "Writable uptime-check site attributes. Omitted fields are unchanged; null resets or clears the fields marked nullable. Read-only fields are ignored.\n",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name shown for the site in Honeybadger and on status pages.",
            "example": "Marketing site"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "pattern": "^https?://\\S",
            "description": "Must start with http:// or https://, with no surrounding whitespace.",
            "example": "https://www.example.com/health"
          },
          "match_type": {
            "default": "success",
            "description": "How a check decides the site is up (see SiteMatchType). Null resets it to success.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/SiteMatchType"
              },
              {
                "type": "null"
              }
            ]
          },
          "match": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255,
            "description": "What `match_type` compares against (see SiteMatchType). Required unless `match_type` is `success`, and must be left out with `success`. Null clears it.\n",
            "example": "status == 'ok'"
          },
          "request_method": {
            "default": "GET",
            "description": "HTTP method each check sends. Null resets it to GET.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/SiteRequestMethod"
              },
              {
                "type": "null"
              }
            ]
          },
          "validate_ssl": {
            "type": [
              "boolean",
              "null"
            ],
            "default": true,
            "description": "Fail the check when the TLS certificate does not validate. Null resets it to true."
          },
          "request_body": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "maxLength": 32768,
            "description": "Body to send with the request, up to 32 KB. Null clears it."
          },
          "request_headers": {
            "type": [
              "object",
              "null"
            ],
            "default": {},
            "description": "Headers to send with the request, as header name to value. Replaces the stored headers; null or `{}` clears them.\n",
            "additionalProperties": {
              "type": "string",
              "format": "password"
            },
            "example": {
              "Authorization": "Bearer abc123"
            }
          },
          "frequency": {
            "default": 5,
            "description": "Minutes between checks. The plan sets the most frequent allowed. Null resets it to 5.\n",
            "anyOf": [
              {
                "$ref": "#/components/schemas/SiteFrequency"
              },
              {
                "type": "null"
              }
            ]
          },
          "locations": {
            "type": [
              "array",
              "null"
            ],
            "uniqueItems": true,
            "default": [],
            "description": "A set of location names to check from. Null or empty means every location. A set; order is ignored and duplicates are dropped.\n",
            "items": {
              "$ref": "#/components/schemas/SiteLocation"
            }
          },
          "outage_threshold": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 1,
            "description": "Consecutive failures before an outage is declared. null means down once failures reach 50% of locations.\n"
          },
          "active": {
            "type": [
              "boolean",
              "null"
            ],
            "default": true,
            "description": "Whether monitoring is active. After 740 consecutive failed checks the server sets it to false. Null resets it to true.\n"
          },
          "timeout": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Request timeout in seconds, 1 to 120, default 30, and less than the frequency in seconds. Changing it requires the uptime timeout feature on the account; without it, only the current value (on create, the default) is accepted. Null resets it to the default.\n"
          }
        }
      },
      "StatusPage": {
        "type": "object",
        "description": "A public status page. Readable and deletable after the plan loses status pages; creating and editing need the feature.\n",
        "required": [
          "id",
          "account_id",
          "name",
          "url",
          "features",
          "hide_branding",
          "password_protected",
          "username",
          "links",
          "domain",
          "created_at",
          "domain_verified_at",
          "sites",
          "check_ins",
          "incidents_enabled",
          "search_engine_indexing_disabled",
          "message_enabled",
          "message_title",
          "message_body",
          "google_analytics_id"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "type": "string",
            "example": "Sp7bMq"
          },
          "account_id": {
            "readOnly": true,
            "type": "string",
            "description": "ID of the account this status page belongs to",
            "example": "Ab3kL9"
          },
          "name": {
            "type": "string",
            "description": "Status page name",
            "example": "Acme Status"
          },
          "domain": {
            "type": [
              "string",
              "null"
            ],
            "description": "Custom domain for the status page",
            "example": "status.acme.com"
          },
          "features": {
            "$ref": "#/components/schemas/StatusPageFeatures"
          },
          "hide_branding": {
            "type": "boolean"
          },
          "password_protected": {
            "type": "boolean"
          },
          "username": {
            "type": [
              "string",
              "null"
            ],
            "description": "Basic-auth user when password protected. The password is never returned.",
            "example": null
          },
          "incidents_enabled": {
            "type": "boolean",
            "description": "Whether the page shows incidents"
          },
          "search_engine_indexing_disabled": {
            "type": "boolean",
            "description": "Whether search engines are asked not to index the page"
          },
          "message_enabled": {
            "type": "boolean",
            "description": "Whether the message banner shows"
          },
          "message_title": {
            "type": [
              "string",
              "null"
            ],
            "description": "The message banner's title",
            "example": "Scheduled maintenance"
          },
          "message_body": {
            "type": [
              "string",
              "null"
            ],
            "description": "The message banner's text",
            "example": "We're upgrading our database on Saturday at 02:00 UTC."
          },
          "google_analytics_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "The page's Google Analytics measurement ID",
            "example": null
          },
          "url": {
            "readOnly": true,
            "type": "string",
            "description": "URL of the status page",
            "example": "https://acme.statuspage.honeybadger.io"
          },
          "created_at": {
            "readOnly": true,
            "type": "string",
            "format": "date-time",
            "description": "When the status page was created"
          },
          "domain_verified_at": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the custom domain was verified"
          },
          "sites": {
            "type": "array",
            "description": "Uptime sites displayed on the status page. An ordered list; the order is the order on the page.",
            "items": {
              "$ref": "#/components/schemas/StatusPageSite"
            }
          },
          "check_ins": {
            "type": "array",
            "description": "Check-ins displayed on the status page. An ordered list; the order is the order on the page.",
            "items": {
              "$ref": "#/components/schemas/StatusPageCheckIn"
            }
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "StatusPageIncident": {
        "type": "object",
        "description": "An incident on a status page. An incident is a container for a thread of updates: the prose lives on each update, and `current_status`, `current_severity` and `closed_at` are derived from them and are never writable.",
        "required": [
          "id",
          "status_page_id",
          "title",
          "build_type",
          "retro_should_notify",
          "retro_notify_message",
          "updates",
          "links"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "In3pKr"
          },
          "status_page_id": {
            "type": "string",
            "description": "ID of the status page",
            "example": "Sp7bMq"
          },
          "title": {
            "type": "string",
            "description": "Incident title",
            "example": "Database connectivity issues"
          },
          "retro_should_notify": {
            "type": "boolean",
            "description": "For a retroactive incident, whether to announce it once on the status page's connected accounts"
          },
          "retro_notify_message": {
            "type": [
              "string",
              "null"
            ],
            "description": "The announcement sent when `retro_should_notify` is true",
            "example": null
          },
          "build_type": {
            "$ref": "#/components/schemas/IncidentBuildType"
          },
          "current_status": {
            "description": "Status of the update in effect now. Derived from the updates.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/IncidentStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "current_severity": {
            "description": "Severity of the update in effect now. Derived from the updates.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              },
              {
                "type": "null"
              }
            ]
          },
          "start_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the incident starts. Derived from the updates."
          },
          "closed_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the incident closed, or null while it is open. Derived from the updates: it is set once an update reaches resolved or maintenance_complete."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the incident was created"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the incident was last updated"
          },
          "updates": {
            "type": "array",
            "description": "The incident's thread, newest first. Always at least one update.",
            "items": {
              "$ref": "#/components/schemas/IncidentUpdate"
            }
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "StatusPageIncidentCreateInput": {
        "type": "object",
        "description": "An incident and the updates it opens with",
        "required": [
          "title",
          "updates"
        ],
        "additionalProperties": false,
        "properties": {
          "title": {
            "type": "string",
            "example": "Elevated error rates"
          },
          "build_type": {
            "$ref": "#/components/schemas/IncidentBuildType"
          },
          "retro_should_notify": {
            "type": "boolean",
            "description": "Announce a retroactive incident when it is created"
          },
          "retro_notify_message": {
            "type": [
              "string",
              "null"
            ],
            "description": "Message accompanying that announcement"
          },
          "updates": {
            "type": "array",
            "minItems": 1,
            "example": [
              {
                "status": "investigating",
                "severity": "partial_outage",
                "message": "Some requests to the API are failing. We're looking into it."
              }
            ],
            "description": "Updates to create with the incident; at least one",
            "items": {
              "$ref": "#/components/schemas/IncidentUpdateInput"
            }
          }
        }
      },
      "StatusPageIncidentUpdateInput": {
        "type": "object",
        "description": "Writable incident attributes",
        "additionalProperties": false,
        "properties": {
          "title": {
            "type": "string"
          },
          "retro_should_notify": {
            "type": "boolean"
          },
          "retro_notify_message": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "StatusPageCreateInput": {
        "description": "Attributes for creating a status page.",
        "allOf": [
          {
            "$ref": "#/components/schemas/StatusPageInput"
          },
          {
            "required": [
              "name"
            ]
          }
        ]
      },
      "StatusPageInput": {
        "type": "object",
        "description": "Writable status-page attributes. Omitted fields are unchanged; null resets or clears the fields marked nullable. Read-only fields, including each monitor's state, are ignored.\n",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "example": "Acme Status"
          },
          "domain": {
            "type": [
              "string",
              "null"
            ],
            "description": "Custom domain the page is served on. Unique across Honeybadger. An account can set at most 30 domains a week. Null clears it.\n",
            "example": "status.example.com"
          },
          "incidents_enabled": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether the page shows incidents. Changing it requires status page incidents on the plan. On create, defaults to whether the plan has them. Null resets it to that same create default.\n"
          },
          "search_engine_indexing_disabled": {
            "type": [
              "boolean",
              "null"
            ],
            "default": false,
            "description": "Asks search engines not to index the page. Null resets it to false."
          },
          "message_enabled": {
            "type": [
              "boolean",
              "null"
            ],
            "default": false,
            "description": "Shows the message banner. Null resets it to false."
          },
          "message_title": {
            "type": [
              "string",
              "null"
            ],
            "description": "The message banner's title. Null clears it."
          },
          "message_body": {
            "type": [
              "string",
              "null"
            ],
            "description": "The message banner's text. Null clears it."
          },
          "google_analytics_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "A Google Analytics measurement ID for the page. Null clears it."
          },
          "hide_branding": {
            "type": [
              "boolean",
              "null"
            ],
            "default": false,
            "description": "Changing it requires advanced status pages on the plan; the default (false) or the stored value is accepted on any plan. Null resets it to false.\n"
          },
          "password_protected": {
            "type": [
              "boolean",
              "null"
            ],
            "default": false,
            "description": "Changing it requires advanced status pages and password protection on the plan; the default (false) or the stored value is accepted on any plan. Turning it on needs a username and password, sent or already stored. Null resets it to false.\n"
          },
          "username": {
            "type": [
              "string",
              "null"
            ],
            "description": "Basic-auth user when password protected. Requires advanced status pages and password protection on the plan."
          },
          "password": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "writeOnly": true,
            "description": "Basic-auth password when password protected. Never returned. Requires advanced status pages and password protection on the plan."
          },
          "features": {
            "default": {},
            "description": "Presentation copy and styling. Replaces the whole object; null clears it. Changing it requires advanced status pages on the plan; the default ({}) or the stored value is accepted on any plan.\n",
            "anyOf": [
              {
                "$ref": "#/components/schemas/StatusPageFeatures"
              },
              {
                "type": "null"
              }
            ]
          },
          "sites": {
            "type": [
              "array",
              "null"
            ],
            "default": [],
            "description": "Sites listed on the page, in page order, replacing the current list. Null or empty removes every site.\n",
            "items": {
              "$ref": "#/components/schemas/StatusPageSiteInput"
            }
          },
          "check_ins": {
            "type": [
              "array",
              "null"
            ],
            "default": [],
            "description": "Check-ins listed on the page, in page order, replacing the current list. Null or empty removes every check-in.\n",
            "items": {
              "$ref": "#/components/schemas/StatusPageCheckInInput"
            }
          }
        }
      },
      "StatusPageSite": {
        "type": "object",
        "description": "A site listed on a status page.",
        "required": [
          "site_id",
          "display_name",
          "description"
        ],
        "properties": {
          "site_id": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of the site",
            "example": "9f8b6d2e-4c1a-4b7f-9e35-2a6c8d0f1b47"
          },
          "display_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Display name on the status page",
            "example": "Website"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Description shown on the status page",
            "example": null
          }
        }
      },
      "StatusPageCheckIn": {
        "type": "object",
        "description": "A check-in listed on a status page.",
        "required": [
          "check_in_id",
          "display_name",
          "description"
        ],
        "properties": {
          "check_in_id": {
            "type": "string",
            "description": "ID of the check-in",
            "example": "Ci5xWq"
          },
          "display_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Display name on the status page",
            "example": "Nightly backup"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Description shown on the status page",
            "example": null
          }
        }
      },
      "StatusPageFeatures": {
        "type": "object",
        "description": "Presentation copy and styling. Replaced whole by an update. A key that was never set is absent from a read; one sent as null reads back as null.\n",
        "additionalProperties": false,
        "properties": {
          "home_link": {
            "type": [
              "string",
              "null"
            ],
            "description": "URL the page header links to, usually your own site.",
            "example": "https://www.example.com"
          },
          "up_caption": {
            "type": [
              "string",
              "null"
            ],
            "description": "Text shown when every check is up. Unset, the page says \"All systems are operational\".",
            "example": "Everything is running smoothly"
          },
          "down_caption": {
            "type": [
              "string",
              "null"
            ],
            "description": "Text shown when every check is down. Unset, the page says \"All systems are experiencing issues\".",
            "example": "We're working on an outage"
          },
          "mixed_caption": {
            "type": [
              "string",
              "null"
            ],
            "description": "Text shown when only some checks are down. Unset, the page says \"Some systems are experiencing issues\".",
            "example": "Some services are degraded"
          },
          "custom_css": {
            "type": [
              "string",
              "null"
            ],
            "description": "CSS added to the page after its own styles.",
            "example": ".header { background: #1d4ed8; }"
          }
        }
      },
      "StatusPageSiteInput": {
        "type": "object",
        "description": "A site listed on a status page.",
        "required": [
          "site_id"
        ],
        "properties": {
          "site_id": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of a site on this account",
            "example": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
          },
          "display_name": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "null uses the monitor's own name; \"\" is refused."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "maxLength": 80,
            "description": "null shows no description; \"\" is refused."
          }
        }
      },
      "StatusPageCheckInInput": {
        "type": "object",
        "description": "A check-in listed on a status page.",
        "required": [
          "check_in_id"
        ],
        "properties": {
          "check_in_id": {
            "type": "string",
            "description": "ID of a check-in on this account",
            "example": "XZbIlD"
          },
          "display_name": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "null uses the monitor's own name; \"\" is refused."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "maxLength": 80,
            "description": "null shows no description; \"\" is refused."
          }
        }
      },
      "Stream": {
        "type": "object",
        "description": "An Insights event stream",
        "properties": {
          "id": {
            "type": "string",
            "description": "Stream ID: 12 lowercase hex characters, randomly assigned. Pass it in `stream_ids` when querying.\n",
            "pattern": "^[0-9a-f]{12}$",
            "example": "a3f19c02b7de"
          },
          "name": {
            "type": "string",
            "description": "Display name",
            "example": "Default"
          },
          "slug": {
            "type": "string",
            "description": "Stable short name",
            "enum": [
              "default",
              "internal"
            ]
          },
          "internal": {
            "type": "boolean",
            "description": "True for the stream carrying Honeybadger-generated event types (`notice`, `deploy`, `uptime_check`, `check_in`). Those event classes are only queryable when this stream is selected.\n"
          },
          "project_id": {
            "type": "string",
            "description": "ID of the project this stream belongs to",
            "example": "Xk9mZp"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Team": {
        "type": "object",
        "description": "A group of account members. Members of a team can access the team's projects.\n",
        "required": [
          "id",
          "account_id",
          "name",
          "links",
          "created_at",
          "member_count",
          "project_ids"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "type": "string",
            "example": "Tm8qJv"
          },
          "account_id": {
            "readOnly": true,
            "type": "string",
            "description": "ID of the account this team belongs to",
            "example": "Ab3kL9"
          },
          "name": {
            "type": "string",
            "description": "Team name",
            "example": "Backend Team"
          },
          "created_at": {
            "readOnly": true,
            "type": "string",
            "format": "date-time",
            "description": "When the team was created"
          },
          "member_count": {
            "readOnly": true,
            "type": "integer",
            "description": "Number of members in the team",
            "example": 4
          },
          "project_ids": {
            "uniqueItems": true,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "IDs of projects assigned to this team"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "TeamCreateInput": {
        "description": "Attributes for creating a team.",
        "allOf": [
          {
            "$ref": "#/components/schemas/TeamInput"
          },
          {
            "required": [
              "name"
            ]
          }
        ]
      },
      "TeamInput": {
        "type": "object",
        "description": "Writable team attributes",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "example": "Platform"
          },
          "project_ids": {
            "type": [
              "array",
              "null"
            ],
            "uniqueItems": true,
            "default": [],
            "description": "IDs of projects this team can access: the whole membership. A project's create-time `team_id` only attaches it to one team. A set; order is ignored and duplicates are dropped.\n",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "TeamInvitation": {
        "type": "object",
        "description": "An invitation to join a team",
        "required": [
          "id",
          "team_id",
          "email"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Ti2hNp"
          },
          "team_id": {
            "type": "string",
            "description": "ID of the team",
            "example": "Tm8qJv"
          },
          "email": {
            "type": "string",
            "description": "Email address of the invitee",
            "example": "newmember@example.com"
          },
          "admin": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether the invitation grants admin privileges"
          },
          "message": {
            "type": [
              "string",
              "null"
            ],
            "description": "Optional message included with the invitation",
            "example": null
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the invitation was created"
          },
          "accepted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the invitation was accepted"
          },
          "created_by": {
            "type": [
              "object",
              "null"
            ],
            "description": "User who created the invitation",
            "properties": {
              "id": {
                "type": "string",
                "description": "ID of the user",
                "example": "Uz4wKm"
              },
              "name": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "User name",
                "example": "Jane Smith"
              },
              "email": {
                "type": "string",
                "description": "User email",
                "example": "jane@example.com"
              }
            }
          },
          "accepted_by": {
            "type": [
              "object",
              "null"
            ],
            "description": "User who accepted the invitation",
            "properties": {
              "id": {
                "type": "string",
                "description": "ID of the user",
                "example": "Uz4wKm"
              },
              "name": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "User name",
                "example": "Jane Smith"
              },
              "email": {
                "type": "string",
                "description": "User email",
                "example": "jane@example.com"
              }
            }
          }
        }
      },
      "TeamInvitationCreateInput": {
        "description": "Attributes for creating a team invitation.",
        "allOf": [
          {
            "$ref": "#/components/schemas/TeamInvitationInput"
          },
          {
            "required": [
              "email"
            ]
          }
        ]
      },
      "TeamInvitationInput": {
        "type": "object",
        "description": "Writable team-invitation attributes",
        "additionalProperties": false,
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          },
          "admin": {
            "type": "boolean"
          },
          "message": {
            "type": [
              "string",
              "null"
            ],
            "description": "Note included in the invitation email"
          }
        }
      },
      "TeamMember": {
        "type": "object",
        "description": "A member of a team",
        "required": [
          "id",
          "team_id",
          "user_id",
          "admin",
          "email"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Mm5rWk"
          },
          "team_id": {
            "type": "string",
            "description": "ID of the team",
            "example": "Tm8qJv"
          },
          "user_id": {
            "type": "string",
            "description": "ID of the user",
            "example": "Uz4wKm"
          },
          "admin": {
            "type": "boolean",
            "description": "Whether the member has admin privileges on the team"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Member name",
            "example": "Jane Smith"
          },
          "email": {
            "type": "string",
            "description": "Member email",
            "example": "jane@example.com"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the member was added to the team"
          }
        }
      },
      "TeamMemberInput": {
        "type": "object",
        "description": "Writable team-member attributes",
        "required": [
          "admin"
        ],
        "additionalProperties": false,
        "properties": {
          "admin": {
            "type": "boolean",
            "description": "Team admins can manage the team's projects and membership"
          }
        }
      },
      "TimeSeriesLinks": {
        "type": "object",
        "description": "Navigation links for a time-ordered collection. Each link is a root-relative path (`/v3/...`); resolve it against the API host.",
        "required": [
          "self"
        ],
        "properties": {
          "self": {
            "type": "string",
            "format": "uri-reference",
            "description": "This page",
            "example": "/v3/projects/Xk9mZp/deploys?limit=25"
          },
          "older": {
            "type": [
              "string",
              "null"
            ],
            "description": "Page of older items, or null when none exist",
            "example": "/v3/projects/Xk9mZp/deploys?before=eyJ0IjoxNzA0MDY3MjAwMTIzNDU2LCJpIjoiRHAyeU5rIn0&limit=25"
          },
          "newer": {
            "type": [
              "string",
              "null"
            ],
            "description": "Page of newer items, or null when none exist. Always null on one-directional collections, which are documented as such.\n",
            "example": "/v3/projects/Xk9mZp/deploys?after=eyJ0IjoxNzA0MTUzNjAwMTIzNDU2LCJpIjoiRHA4d1FzIn0&limit=25"
          }
        }
      },
      "TimeSeriesPagination": {
        "type": "object",
        "description": "Pagination for a time-ordered collection",
        "required": [
          "limit",
          "has_older",
          "has_newer"
        ],
        "properties": {
          "limit": {
            "type": "integer",
            "description": "Maximum items per page",
            "minimum": 1,
            "maximum": 100,
            "example": 25
          },
          "has_older": {
            "type": "boolean",
            "description": "Whether older items exist. When true, follow `links.older`."
          },
          "has_newer": {
            "type": "boolean",
            "description": "Whether newer items exist. When true, follow `links.newer`."
          },
          "oldest_cursor": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cursor for the oldest item on this page. Pass it back unchanged as `before`. Absent or null on collections that page on a timestamp rather than a cursor; use `links.older` instead.\n",
            "example": "eyJ0IjoxNzA0MDY3MjAwLCJpIjoiTm04cFF4In0"
          },
          "newest_cursor": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cursor for the newest item on this page. Pass it back unchanged as `after`. Absent or null on collections that page on a timestamp rather than a cursor, and on one-directional collections; use `links.newer` instead.\n",
            "example": "eyJ0IjoxNzA0MTUzNjAwLCJpIjoiWGs5bVpwIn0"
          }
        }
      },
      "UptimeCheck": {
        "type": "object",
        "description": "An individual uptime check result",
        "required": [
          "created_at"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "When the check was performed"
          },
          "duration": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Response time in whole milliseconds",
            "example": 182
          },
          "location": {
            "description": "Monitoring location that performed the check",
            "anyOf": [
              {
                "$ref": "#/components/schemas/SiteLocation"
              },
              {
                "type": "null"
              }
            ]
          },
          "up": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether the site was up"
          }
        }
      },
      "User": {
        "type": "object",
        "description": "A Honeybadger user",
        "required": [
          "id",
          "email"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Uz4wKm"
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "User email address",
            "example": "jane@example.com"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "User display name",
            "example": "Jane Smith"
          }
        }
      },
      "WebLinks": {
        "type": "object",
        "description": "Links into the Honeybadger web UI",
        "readOnly": true,
        "required": [
          "web"
        ],
        "properties": {
          "web": {
            "type": "string",
            "format": "uri",
            "description": "The resource's page in the Honeybadger web UI, as an absolute URL. Resources without a page, such as outages and deploys, don't have `links`. For a project provisioned through Heroku, error, notice and comment links go through Heroku's single sign-on.\n",
            "example": "https://app.honeybadger.io/projects/Xk9mZp"
          }
        }
      },
      "AccountRole": {
        "type": "string",
        "description": "A member's role in the account.",
        "enum": [
          "Owner",
          "Admin",
          "Member"
        ]
      },
      "IncidentStatus": {
        "type": "string",
        "description": "An incident's status.",
        "enum": [
          "maintenance_scheduled",
          "in_maintenance",
          "maintenance_complete",
          "investigating",
          "identified",
          "resolving",
          "monitoring",
          "resolved"
        ]
      },
      "IncidentSeverity": {
        "type": "string",
        "description": "An incident's severity.",
        "enum": [
          "problem_detected",
          "degraded_performance",
          "partial_outage",
          "outage",
          "operational"
        ]
      },
      "IncidentBuildType": {
        "type": "string",
        "description": "How the incident was opened. `current` is happening now, `retroactive` records something already over, `scheduled_maintenance` is planned. Only a scheduled_maintenance incident may have updates starting in the future.\n",
        "enum": [
          "current",
          "retroactive",
          "scheduled_maintenance"
        ]
      },
      "DashboardWidgetType": {
        "type": "string",
        "description": "Which kind of widget, and therefore which config shape applies.",
        "enum": [
          "insights_vis",
          "alarms",
          "deployments",
          "checkins",
          "uptime",
          "errors"
        ]
      },
      "WebhookV3Event": {
        "type": "object",
        "description": "The fields every v3 webhook body carries. Each event adds the records it's about.\n",
        "required": [
          "event",
          "message",
          "payload_version",
          "project",
          "links"
        ],
        "properties": {
          "event": {
            "type": "string",
            "description": "The event's name, the same as its key under `webhooks`.",
            "example": "occurred"
          },
          "message": {
            "type": "string",
            "description": "A one-line summary of the event, as notifications show it.",
            "example": "[Billing API/production] NoMethodError: undefined method 'foo' for nil"
          },
          "payload_version": {
            "type": "string",
            "const": "v3",
            "description": "The integration's payload version."
          },
          "actor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WebhookV3Person"
              }
            ],
            "description": "The person who caused the event. Absent when Honeybadger did."
          },
          "credential": {
            "$ref": "#/components/schemas/WebhookV3Credential"
          },
          "project": {
            "$ref": "#/components/schemas/WebhookV3Project"
          },
          "links": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WebLinks"
              }
            ],
            "description": "The page to open for this event."
          }
        }
      },
      "WebhookV3OccurredEvent": {
        "description": "An error occurred, or a fault passed its notification rate threshold.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV3Event"
          },
          {
            "type": "object",
            "required": [
              "fault",
              "notice"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "occurred",
                  "rate_exceeded"
                ]
              },
              "fault": {
                "$ref": "#/components/schemas/WebhookV3Fault"
              },
              "notice": {
                "$ref": "#/components/schemas/WebhookV3Notice"
              }
            }
          }
        ]
      },
      "WebhookV3ResolutionEvent": {
        "description": "A fault was resolved or reopened.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV3Event"
          },
          {
            "type": "object",
            "required": [
              "fault"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "resolved",
                  "unresolved"
                ]
              },
              "fault": {
                "$ref": "#/components/schemas/WebhookV3Fault"
              }
            }
          }
        ]
      },
      "WebhookV3AssignedEvent": {
        "description": "A fault, or a bulk action's faults, were assigned.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV3Event"
          },
          {
            "type": "object",
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "assigned"
                ]
              },
              "fault": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV3Fault"
                  }
                ],
                "description": "The fault. Absent for a bulk action, which sends `fault_ids` instead."
              },
              "fault_ids": {
                "type": "array",
                "description": "The faults a bulk action changed. Sent in place of `fault`.",
                "items": {
                  "type": "string"
                }
              },
              "assignee": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV3Person"
                  }
                ],
                "description": "Absent when the fault was unassigned before the webhook was sent."
              }
            }
          }
        ]
      },
      "WebhookV3CommentedEvent": {
        "description": "A comment was added to a fault, or to a bulk action's faults.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV3Event"
          },
          {
            "type": "object",
            "required": [
              "comment"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "commented"
                ]
              },
              "fault": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV3Fault"
                  }
                ],
                "description": "The fault. Absent for a bulk action, which sends `fault_ids` instead."
              },
              "fault_ids": {
                "type": "array",
                "description": "The faults a bulk action changed. Sent in place of `fault`.",
                "items": {
                  "type": "string"
                }
              },
              "comment": {
                "$ref": "#/components/schemas/WebhookV3Comment"
              }
            }
          }
        ]
      },
      "WebhookV3DeployedEvent": {
        "description": "A deploy was recorded.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV3Event"
          },
          {
            "type": "object",
            "required": [
              "deploy"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "deployed"
                ]
              },
              "deploy": {
                "$ref": "#/components/schemas/WebhookV3Deploy"
              }
            }
          }
        ]
      },
      "WebhookV3OutageEvent": {
        "description": "An uptime site went down or came back up.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV3Event"
          },
          {
            "type": "object",
            "required": [
              "site",
              "outage"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "up",
                  "down"
                ]
              },
              "site": {
                "$ref": "#/components/schemas/WebhookV3Site"
              },
              "outage": {
                "$ref": "#/components/schemas/WebhookV3Outage"
              }
            }
          }
        ]
      },
      "WebhookV3CertExpirationEvent": {
        "description": "An uptime site's TLS certificate is about to expire.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV3Event"
          },
          {
            "type": "object",
            "required": [
              "site"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "cert_will_expire"
                ]
              },
              "site": {
                "$ref": "#/components/schemas/WebhookV3Site"
              }
            }
          }
        ]
      },
      "WebhookV3CheckInEvent": {
        "description": "A check-in missed its schedule, or started reporting again.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV3Event"
          },
          {
            "type": "object",
            "required": [
              "check_in"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "check_in_missing",
                  "check_in_reporting"
                ]
              },
              "check_in": {
                "$ref": "#/components/schemas/WebhookV3CheckIn"
              }
            }
          }
        ]
      },
      "WebhookV3AlarmEvent": {
        "description": "An Insights alarm was triggered, or returned to normal.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV3Event"
          },
          {
            "type": "object",
            "required": [
              "alarm"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "alarm_alert",
                  "alarm_ok"
                ]
              },
              "alarm": {
                "$ref": "#/components/schemas/WebhookV3Alarm"
              }
            }
          }
        ]
      },
      "WebhookV3VolumeSpikeEvent": {
        "description": "A project's error volume rose well above its usual level.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV3Event"
          },
          {
            "type": "object",
            "required": [
              "volume_spike"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "volume_spike"
                ]
              },
              "volume_spike": {
                "$ref": "#/components/schemas/WebhookV3VolumeSpike"
              }
            }
          }
        ]
      },
      "WebhookV3Person": {
        "type": "object",
        "description": "A person, by ID, name and email.",
        "required": [
          "id",
          "name",
          "email"
        ],
        "properties": {
          "id": {
            "type": [
              "string",
              "null"
            ],
            "description": "The user's ID, or null when the person has no Honeybadger account.\n",
            "example": "Ur4kTq"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "example": "Jane Doe"
          },
          "email": {
            "type": [
              "string",
              "null"
            ],
            "example": "jane@example.com"
          }
        }
      },
      "WebhookV3Credential": {
        "type": "object",
        "description": "The API token or OAuth grant the event was caused through. Absent when the event wasn't caused through the API.\n",
        "required": [
          "type",
          "id",
          "name"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "`ApiToken` for an API token, `OauthAccessToken` for an OAuth grant.",
            "example": "ApiToken"
          },
          "id": {
            "type": "string",
            "example": "4821"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "The token's name. For an OAuth grant, the name the user gave the connection, or the application's name if none.\n",
            "example": "CI deploys"
          }
        }
      },
      "WebhookV3Project": {
        "type": "object",
        "description": "The project the event belongs to.",
        "required": [
          "id",
          "name",
          "language",
          "created_at",
          "links"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Xk9mZp"
          },
          "name": {
            "type": "string",
            "example": "Billing API"
          },
          "language": {
            "type": [
              "string",
              "null"
            ],
            "example": "ruby"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "WebhookV3Fault": {
        "type": "object",
        "description": "The fault (a unique error) the event is about.",
        "required": [
          "id",
          "project_id",
          "klass",
          "message",
          "component",
          "action",
          "environment",
          "resolved",
          "ignored",
          "tags",
          "assignee",
          "notices_count",
          "created_at",
          "last_notice_at",
          "links"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "12345"
          },
          "project_id": {
            "type": "string",
            "example": "Xk9mZp"
          },
          "klass": {
            "type": [
              "string",
              "null"
            ],
            "description": "Error class name",
            "example": "NoMethodError"
          },
          "message": {
            "type": [
              "string",
              "null"
            ],
            "example": "undefined method 'foo' for nil"
          },
          "component": {
            "type": [
              "string",
              "null"
            ],
            "example": "UsersController"
          },
          "action": {
            "type": [
              "string",
              "null"
            ],
            "example": "show"
          },
          "environment": {
            "type": [
              "string",
              "null"
            ],
            "example": "production"
          },
          "resolved": {
            "type": "boolean"
          },
          "ignored": {
            "type": "boolean"
          },
          "tags": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "assignee": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookV3Person"
              },
              {
                "type": "null"
              }
            ]
          },
          "notices_count": {
            "type": "integer"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_notice_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "WebhookV3Notice": {
        "type": "object",
        "description": "The occurrence that triggered the event.",
        "required": [
          "id",
          "fault_id",
          "project_id",
          "environment",
          "message",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "example": "f3a1c2d4-5b6e-4f70-8a91-b2c3d4e5f607"
          },
          "fault_id": {
            "type": [
              "string",
              "null"
            ],
            "example": "12345"
          },
          "project_id": {
            "type": [
              "string",
              "null"
            ],
            "example": "Xk9mZp"
          },
          "environment": {
            "type": [
              "string",
              "null"
            ],
            "example": "production"
          },
          "message": {
            "type": [
              "string",
              "null"
            ],
            "example": "undefined method 'foo' for nil"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "WebhookV3Site": {
        "type": "object",
        "description": "The uptime site the event is about.",
        "required": [
          "id",
          "project_id",
          "name",
          "url",
          "state",
          "frequency",
          "last_checked_at",
          "created_at",
          "links"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "example": "9f8b6d2e-4c1a-4b7f-9e35-2a6c8d0f1b47"
          },
          "project_id": {
            "type": "string",
            "example": "Xk9mZp"
          },
          "name": {
            "type": "string",
            "example": "Checkout"
          },
          "url": {
            "type": "string",
            "description": "The checked URL, with any credentials in it removed.",
            "example": "https://example.com/health"
          },
          "state": {
            "type": "string",
            "enum": [
              "pending",
              "up",
              "down"
            ]
          },
          "frequency": {
            "$ref": "#/components/schemas/SiteFrequency"
          },
          "last_checked_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "WebhookV3Outage": {
        "type": "object",
        "description": "The site's latest outage. Every field is null when the site has none on record. Outages have no page of their own; the site's `links` has its page.\n",
        "required": [
          "id",
          "site_id",
          "down_at",
          "up_at",
          "duration_seconds",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "example": "3d7a1c94-6f28-4e5b-8a13-c5e9b204d6f8"
          },
          "site_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "example": "9f8b6d2e-4c1a-4b7f-9e35-2a6c8d0f1b47"
          },
          "down_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "up_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Null while the site is still down."
          },
          "duration_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Null until the site is back up.",
            "example": 420
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "WebhookV3Deploy": {
        "type": "object",
        "description": "The deploy the event is about.",
        "required": [
          "id",
          "project_id",
          "environment",
          "revision",
          "repository",
          "local_username",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Dp2yNk"
          },
          "project_id": {
            "type": "string",
            "example": "Xk9mZp"
          },
          "environment": {
            "type": "string",
            "example": "production"
          },
          "revision": {
            "type": [
              "string",
              "null"
            ],
            "example": "850510ab072102729e6967cf89f28b740c61311b"
          },
          "repository": {
            "type": [
              "string",
              "null"
            ],
            "description": "The repository URL, with any credentials in it removed.",
            "example": "git@github.com:acme/billing.git"
          },
          "local_username": {
            "type": [
              "string",
              "null"
            ],
            "example": "deploy-bot"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "WebhookV3Alarm": {
        "type": "object",
        "description": "The Insights alarm the event is about.",
        "required": [
          "id",
          "project_id",
          "name",
          "description",
          "state",
          "created_at",
          "links"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Qx7LmP2vRt9K"
          },
          "project_id": {
            "type": "string",
            "example": "Xk9mZp"
          },
          "name": {
            "type": "string",
            "example": "Checkout errors"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "state": {
            "type": "string",
            "enum": [
              "initial",
              "alarm",
              "ok"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "WebhookV3CheckIn": {
        "type": "object",
        "description": "The check-in the event is about.",
        "required": [
          "id",
          "project_id",
          "name",
          "slug",
          "schedule_type",
          "state",
          "reported_at",
          "expected_at",
          "missed_count",
          "created_at",
          "links"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Ci5xWq"
          },
          "project_id": {
            "type": "string",
            "example": "Xk9mZp"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "example": "Nightly backup"
          },
          "slug": {
            "type": [
              "string",
              "null"
            ],
            "example": "nightly-backup"
          },
          "schedule_type": {
            "$ref": "#/components/schemas/CheckInScheduleType"
          },
          "state": {
            "type": "string",
            "enum": [
              "pending",
              "reporting",
              "missing",
              "paused"
            ]
          },
          "reported_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "expected_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "missed_count": {
            "type": "integer"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "WebhookV3Comment": {
        "type": "object",
        "description": "The comment that was added.",
        "required": [
          "id",
          "fault_id",
          "body",
          "source",
          "created_at",
          "author",
          "links"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "Cm7pLx"
          },
          "fault_id": {
            "type": "string",
            "example": "12345"
          },
          "body": {
            "type": [
              "string",
              "null"
            ]
          },
          "source": {
            "type": "string",
            "description": "Where the comment was made, such as `web` or `email`.",
            "example": "web"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "author": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookV3Person"
              },
              {
                "type": "null"
              }
            ]
          },
          "links": {
            "$ref": "#/components/schemas/WebLinks"
          }
        }
      },
      "WebhookV3VolumeSpike": {
        "type": "object",
        "description": "The error volume that triggered the spike alert.",
        "required": [
          "observed",
          "baseline_median",
          "factor",
          "z_score",
          "window_minutes"
        ],
        "properties": {
          "observed": {
            "type": "integer",
            "description": "Errors in the window just checked.",
            "example": 412
          },
          "baseline_median": {
            "type": "integer",
            "description": "The median for a window of the same length over the baseline.",
            "example": 128
          },
          "factor": {
            "type": [
              "number",
              "null"
            ],
            "description": "`observed` over `baseline_median`, to one decimal.",
            "example": 3.2
          },
          "z_score": {
            "type": [
              "number",
              "null"
            ],
            "example": 9.1
          },
          "window_minutes": {
            "type": "integer",
            "example": 60
          }
        }
      },
      "WebhookV2User": {
        "type": "object",
        "description": "A Honeybadger user, or an account by its owner's details.",
        "required": [
          "id",
          "email",
          "name"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "example": 4821
          },
          "email": {
            "type": "string",
            "example": "jane@example.com"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "example": "Jane Doe"
          }
        }
      },
      "WebhookV2Project": {
        "type": "object",
        "description": "The project the event belongs to.",
        "required": [
          "id",
          "name",
          "created_at",
          "disable_public_links",
          "pivotal_project_id",
          "asana_workspace_id",
          "token",
          "github_project",
          "environments",
          "owner",
          "last_notice_at",
          "earliest_notice_at",
          "unresolved_fault_count",
          "fault_count",
          "active",
          "users",
          "sites",
          "team_id"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "example": 1234
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "example": "Billing API"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "disable_public_links": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "pivotal_project_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "asana_workspace_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "token": {
            "type": "string",
            "description": "The project's ingestion key, the one its notifiers report with."
          },
          "github_project": {
            "type": [
              "string",
              "null"
            ],
            "description": "The repository of the project's newest GitHub integration.",
            "example": "acme/billing"
          },
          "environments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookV2Environment"
            }
          },
          "owner": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WebhookV2User"
              }
            ],
            "description": "The account that owns the project."
          },
          "last_notice_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "earliest_notice_at": {
            "type": "string",
            "format": "date-time",
            "description": "The oldest notice the plan's retention keeps."
          },
          "unresolved_fault_count": {
            "type": "integer"
          },
          "fault_count": {
            "type": "integer"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the account is active."
          },
          "users": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookV2User"
            }
          },
          "sites": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookV2ProjectSite"
            }
          },
          "team_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The project's errors page. Sent on `volume_spike` only."
          }
        }
      },
      "WebhookV2ProjectRef": {
        "type": "object",
        "description": "The project the event belongs to, by ID and name.",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "example": 1234
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "example": "Billing API"
          }
        }
      },
      "WebhookV2Environment": {
        "type": "object",
        "description": "One of the project's environments.",
        "required": [
          "id",
          "project_id",
          "name",
          "notifications",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "project_id": {
            "type": "integer"
          },
          "name": {
            "type": "string",
            "example": "production"
          },
          "notifications": {
            "type": "boolean",
            "description": "Whether errors in this environment send notifications."
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "WebhookV2ProjectSite": {
        "type": "object",
        "description": "One of the project's uptime sites, in brief.",
        "required": [
          "id",
          "active",
          "last_checked_at",
          "name",
          "state",
          "url"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "active": {
            "type": "boolean"
          },
          "last_checked_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "name": {
            "type": "string"
          },
          "state": {
            "type": "string",
            "example": "up"
          },
          "url": {
            "type": "string",
            "description": "The checked URL, as entered."
          }
        }
      },
      "WebhookV2Fault": {
        "type": "object",
        "description": "The fault (a unique error) the event is about. When the account is inactive, only `id`, `project_id`, `message` and `created_at` are sent.\n",
        "required": [
          "id",
          "project_id",
          "message",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "example": 12345
          },
          "project_id": {
            "type": "integer",
            "example": 1234
          },
          "klass": {
            "type": [
              "string",
              "null"
            ],
            "description": "Error class name",
            "example": "NoMethodError"
          },
          "message": {
            "type": [
              "string",
              "null"
            ],
            "description": "The error message, without the class name.",
            "example": "undefined method 'foo' for nil"
          },
          "component": {
            "type": [
              "string",
              "null"
            ],
            "example": "UsersController"
          },
          "action": {
            "type": [
              "string",
              "null"
            ],
            "example": "show"
          },
          "environment": {
            "type": [
              "string",
              "null"
            ],
            "example": "production"
          },
          "resolved": {
            "type": "boolean"
          },
          "ignored": {
            "type": "boolean"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "project_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "comments_count": {
            "type": "integer"
          },
          "notices_count": {
            "type": "integer"
          },
          "last_notice_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "tags": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "assignee": {
            "type": [
              "string",
              "null"
            ],
            "description": "The assignee's email address.",
            "example": "jane@example.com"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "deploy": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookV2Deploy"
              },
              {
                "type": "null"
              }
            ],
            "description": "The latest deploy to the fault's environment."
          }
        }
      },
      "WebhookV2BacktraceLine": {
        "type": "object",
        "description": "One backtrace frame, as the notifier reported it or a source map rewrote it. Notifiers can send keys beyond the ones listed here, such as `column`.\n",
        "additionalProperties": true,
        "properties": {
          "number": {
            "type": [
              "string",
              "integer",
              "null"
            ],
            "description": "The line number. Ruby notifiers send a string, PHP and JavaScript an integer.",
            "example": "42"
          },
          "file": {
            "type": [
              "string",
              "null"
            ],
            "example": "[PROJECT_ROOT]/app/models/user.rb"
          },
          "method": {
            "type": [
              "string",
              "null"
            ],
            "example": "full_name"
          },
          "context": {
            "type": "string",
            "description": "`app` for a frame in the project's own code, otherwise `all`.",
            "enum": [
              "app",
              "all"
            ]
          },
          "application_file": {
            "type": "string",
            "description": "The file's path within the project. Sent for `app` frames."
          },
          "source": {
            "description": "Lines of source around the frame, usually an object keyed by line number. Null when a source map has no source for the frame, and notifiers can send other shapes.\n"
          }
        }
      },
      "WebhookV2Notice": {
        "type": "object",
        "description": "The occurrence that triggered the event. When the account is inactive, only `id`, `fault_id` and `created_at` are sent. When the notice is older than the plan keeps, its request and environment data are sent empty.\n",
        "required": [
          "id",
          "fault_id",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "fault_id": {
            "type": "integer"
          },
          "token": {
            "type": "string",
            "format": "uuid",
            "description": "The notice's UUID."
          },
          "message": {
            "type": [
              "string",
              "null"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "environment": {
            "description": "The server environment the notifier reported (`environment-name`, hostname and the like). Defined by the notifier.\n"
          },
          "request": {
            "type": "object",
            "description": "The request the error happened in. `context` is moved to the body's top-level `context`.\n",
            "properties": {
              "url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "component": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "action": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "params": {
                "description": "Request parameters, as the notifier sent them. Usually an object, but any JSON value.\n"
              },
              "session": {
                "description": "Session data, as the notifier sent it. Usually an object, but any JSON value, including null.\n"
              }
            }
          },
          "backtrace": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookV2BacktraceLine"
            }
          },
          "application_trace": {
            "type": "array",
            "description": "The frames of `backtrace` in the project's own code.",
            "items": {
              "$ref": "#/components/schemas/WebhookV2BacktraceLine"
            }
          },
          "web_environment": {
            "description": "CGI-style request environment, as the notifier sent it."
          },
          "deploy": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebhookV2Deploy"
              },
              {
                "type": "null"
              }
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "WebhookV2Deploy": {
        "type": "object",
        "description": "A deploy.",
        "required": [
          "environment",
          "revision",
          "repository",
          "local_username",
          "created_at",
          "changelog",
          "url"
        ],
        "properties": {
          "environment": {
            "type": "string",
            "example": "production"
          },
          "revision": {
            "type": [
              "string",
              "null"
            ],
            "example": "850510ab072102729e6967cf89f28b740c61311b"
          },
          "repository": {
            "type": [
              "string",
              "null"
            ],
            "example": "git@github.com:acme/billing.git"
          },
          "local_username": {
            "type": [
              "string",
              "null"
            ],
            "example": "deploy-bot"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "changelog": {
            "type": [
              "array",
              "null"
            ],
            "description": "Commits in the deploy, as the deploy notification sent them.",
            "items": {}
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "WebhookV2Site": {
        "type": "object",
        "description": "The uptime site the event is about.",
        "required": [
          "id",
          "name",
          "url",
          "frequency",
          "match_type",
          "match",
          "state",
          "active",
          "last_checked_at",
          "retries",
          "proxy",
          "cert_will_expire_at",
          "timeout",
          "response_headers",
          "details_url"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "description": "The checked URL, as entered."
          },
          "frequency": {
            "type": "integer",
            "description": "Minutes between checks."
          },
          "match_type": {
            "type": "string",
            "example": "success"
          },
          "match": {
            "type": [
              "string",
              "null"
            ]
          },
          "state": {
            "type": "string",
            "enum": [
              "pending",
              "up",
              "down"
            ]
          },
          "active": {
            "type": "boolean"
          },
          "last_checked_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "retries": {
            "type": [
              "integer",
              "null"
            ]
          },
          "proxy": {
            "type": "integer"
          },
          "cert_will_expire_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "timeout": {
            "type": [
              "integer",
              "null"
            ]
          },
          "response_headers": {
            "type": [
              "object",
              "null"
            ],
            "description": "Headers the site is set to expect in each check's response."
          },
          "details_url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "WebhookV2Outage": {
        "type": "object",
        "description": "The site's latest outage. Every field but `details_url` is null when the site has none on record.\n",
        "required": [
          "down_at",
          "up_at",
          "status",
          "reason",
          "headers",
          "details_url"
        ],
        "properties": {
          "down_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "up_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Null while the site is still down."
          },
          "status": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The HTTP status the failing check got.",
            "example": 503
          },
          "reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "headers": {
            "type": [
              "object",
              "null"
            ],
            "description": "Headers from the failing check's response."
          },
          "details_url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "WebhookV2CheckIn": {
        "type": "object",
        "description": "The check-in the event is about.",
        "required": [
          "id",
          "name",
          "slug",
          "state",
          "schedule_type",
          "reported_at",
          "expected_at",
          "missed_count",
          "grace_period",
          "url",
          "details_url"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "NeI9K5"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "state": {
            "type": "string",
            "enum": [
              "pending",
              "reporting",
              "missing",
              "paused"
            ]
          },
          "schedule_type": {
            "type": "string",
            "enum": [
              "simple",
              "cron"
            ]
          },
          "reported_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "expected_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "missed_count": {
            "type": "integer"
          },
          "grace_period": {
            "type": "string",
            "description": "How late a report can be before the check-in is missing, as a duration such as `5 minutes`. Empty when there's no grace period.\n"
          },
          "report_period": {
            "type": "string",
            "description": "How often the job reports, as a duration such as `1 day`. Sent for `simple` check-ins."
          },
          "cron_schedule": {
            "type": "string",
            "description": "Sent for `cron` check-ins."
          },
          "cron_timezone": {
            "type": "string",
            "description": "Sent for `cron` check-ins."
          },
          "url": {
            "type": "string",
            "description": "The URL the job reports to."
          },
          "details_url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "WebhookV2Comment": {
        "type": "object",
        "description": "The comment that was added.",
        "required": [
          "id",
          "fault_id",
          "event",
          "source",
          "created_at",
          "email",
          "author",
          "body"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "fault_id": {
            "type": "integer"
          },
          "event": {
            "type": [
              "string",
              "null"
            ]
          },
          "source": {
            "type": "string",
            "example": "web"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "email": {
            "type": [
              "string",
              "null"
            ],
            "description": "The commenter's email, for a comment from someone without an account."
          },
          "author": {
            "type": [
              "string",
              "null"
            ],
            "description": "The commenter's name."
          },
          "body": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "WebhookV2Alarm": {
        "type": "object",
        "description": "The Insights alarm the event is about.",
        "required": [
          "id",
          "name",
          "state",
          "created_at",
          "url",
          "details_url"
        ],
        "properties": {
          "id": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "state": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "initial",
              "alarm",
              "ok",
              null
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "details_url": {
            "type": "string",
            "format": "uri",
            "description": "The same as `url`."
          }
        }
      },
      "WebhookV2VolumeSpike": {
        "type": "object",
        "description": "The error volume that triggered the spike alert.",
        "required": [
          "observed",
          "baseline_median",
          "factor",
          "z_score",
          "window_minutes"
        ],
        "properties": {
          "observed": {
            "type": "integer",
            "description": "Errors in the window just checked."
          },
          "baseline_median": {
            "type": "integer"
          },
          "factor": {
            "type": [
              "number",
              "null"
            ]
          },
          "z_score": {
            "type": [
              "number",
              "null"
            ]
          },
          "window_minutes": {
            "type": "integer"
          }
        }
      },
      "WebhookV2Event": {
        "type": "object",
        "description": "The fields every v2 webhook body carries. Each event adds the records it's about. A v2 body has no `payload_version`; that's how it differs from the later versions.\n",
        "required": [
          "event",
          "message"
        ],
        "not": {
          "required": [
            "payload_version"
          ]
        },
        "properties": {
          "event": {
            "type": "string",
            "description": "The event's name, the same as its key under `webhooks`.",
            "example": "occurred"
          },
          "message": {
            "type": "string",
            "description": "A one-line summary of the event, as notifications show it."
          },
          "actor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WebhookV2User"
              }
            ],
            "description": "The person who caused the event. Absent when Honeybadger, or an API token with no user, did."
          }
        }
      },
      "WebhookV2OccurredEvent": {
        "description": "An error occurred, or a fault passed its notification rate threshold.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV2Event"
          },
          {
            "type": "object",
            "required": [
              "project",
              "fault",
              "notice"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "occurred",
                  "rate_exceeded"
                ]
              },
              "project": {
                "$ref": "#/components/schemas/WebhookV2Project"
              },
              "fault": {
                "$ref": "#/components/schemas/WebhookV2Fault"
              },
              "notice": {
                "$ref": "#/components/schemas/WebhookV2Notice"
              },
              "context": {
                "description": "The notice's request context, as the notifier sent it. Usually an object, but any JSON value. Moved here from `notice.request`.\n"
              },
              "custom_fields": {
                "description": "The integration's custom fields, when it has any."
              }
            }
          }
        ]
      },
      "WebhookV2ResolutionEvent": {
        "description": "A fault was resolved or reopened.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV2Event"
          },
          {
            "type": "object",
            "required": [
              "fault"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "resolved",
                  "unresolved"
                ]
              },
              "fault": {
                "$ref": "#/components/schemas/WebhookV2Fault"
              }
            }
          }
        ]
      },
      "WebhookV2AssignedEvent": {
        "description": "A fault, or a bulk action's faults, were assigned.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV2Event"
          },
          {
            "type": "object",
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "assigned"
                ]
              },
              "fault": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2Fault"
                  }
                ],
                "description": "The fault. Absent for a bulk action, which sends `fault_ids` instead."
              },
              "fault_ids": {
                "type": "array",
                "description": "The faults a bulk action changed. Sent in place of `fault`.",
                "items": {
                  "type": "string"
                }
              },
              "assignee": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2User"
                  }
                ],
                "description": "Absent when the fault was unassigned before the webhook was sent."
              }
            }
          }
        ]
      },
      "WebhookV2CommentedEvent": {
        "description": "A comment was added to a fault, or to a bulk action's faults.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV2Event"
          },
          {
            "type": "object",
            "required": [
              "comment"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "commented"
                ]
              },
              "fault": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WebhookV2Fault"
                  }
                ],
                "description": "The fault. Absent for a bulk action, which sends `fault_ids` instead."
              },
              "fault_ids": {
                "type": "array",
                "description": "The faults a bulk action changed. Sent in place of `fault`.",
                "items": {
                  "type": "string"
                }
              },
              "comment": {
                "$ref": "#/components/schemas/WebhookV2Comment"
              }
            }
          }
        ]
      },
      "WebhookV2DeployedEvent": {
        "description": "A deploy was recorded.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV2Event"
          },
          {
            "type": "object",
            "required": [
              "project",
              "deploy"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "deployed"
                ]
              },
              "project": {
                "$ref": "#/components/schemas/WebhookV2Project"
              },
              "deploy": {
                "$ref": "#/components/schemas/WebhookV2Deploy"
              }
            }
          }
        ]
      },
      "WebhookV2OutageEvent": {
        "description": "An uptime site went down or came back up.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV2Event"
          },
          {
            "type": "object",
            "required": [
              "project",
              "site",
              "outage"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "up",
                  "down"
                ]
              },
              "project": {
                "$ref": "#/components/schemas/WebhookV2Project"
              },
              "site": {
                "$ref": "#/components/schemas/WebhookV2Site"
              },
              "outage": {
                "$ref": "#/components/schemas/WebhookV2Outage"
              }
            }
          }
        ]
      },
      "WebhookV2CertExpirationEvent": {
        "description": "An uptime site's TLS certificate is about to expire.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV2Event"
          },
          {
            "type": "object",
            "required": [
              "project",
              "site"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "cert_will_expire"
                ]
              },
              "project": {
                "$ref": "#/components/schemas/WebhookV2ProjectRef"
              },
              "site": {
                "$ref": "#/components/schemas/WebhookV2Site"
              }
            }
          }
        ]
      },
      "WebhookV2CheckInEvent": {
        "description": "A check-in missed its schedule, or started reporting again.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV2Event"
          },
          {
            "type": "object",
            "required": [
              "project",
              "check_in"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "check_in_missing",
                  "check_in_reporting"
                ]
              },
              "project": {
                "$ref": "#/components/schemas/WebhookV2Project"
              },
              "check_in": {
                "$ref": "#/components/schemas/WebhookV2CheckIn"
              }
            }
          }
        ]
      },
      "WebhookV2AlarmEvent": {
        "description": "An Insights alarm was triggered, or returned to normal.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV2Event"
          },
          {
            "type": "object",
            "required": [
              "alarm"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "alarm_alert",
                  "alarm_ok"
                ]
              },
              "alarm": {
                "$ref": "#/components/schemas/WebhookV2Alarm"
              }
            }
          }
        ]
      },
      "WebhookV2VolumeSpikeEvent": {
        "description": "A project's error volume rose well above its usual level.",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookV2Event"
          },
          {
            "type": "object",
            "required": [
              "project",
              "volume_spike"
            ],
            "properties": {
              "event": {
                "type": "string",
                "enum": [
                  "volume_spike"
                ]
              },
              "project": {
                "$ref": "#/components/schemas/WebhookV2Project"
              },
              "volume_spike": {
                "$ref": "#/components/schemas/WebhookV2VolumeSpike"
              }
            }
          }
        ]
      },
      "IntegrationRate": {
        "type": "string",
        "enum": [
          "min",
          "hour",
          "wday",
          "week"
        ],
        "description": "Period the `rate_exceeded` threshold counts over: `min` a minute, `hour` an hour, `wday` a day (24 hours, not a weekday), `week` a week."
      },
      "IntegrationEvent": {
        "type": "string",
        "description": "An event an integration can notify on. Each type supports a subset, which IntegrationCreateInput lists per type.",
        "enum": [
          "occurred",
          "rate_exceeded",
          "assigned",
          "resolved",
          "unresolved",
          "commented",
          "deployed",
          "up",
          "down",
          "cert_will_expire",
          "flooded",
          "check_in_missing",
          "check_in_reporting",
          "alarm_alert",
          "alarm_ok",
          "volume_spike"
        ]
      },
      "IntegrationFilterEvent": {
        "type": "string",
        "description": "An event a filter applies to, or `all` for every event.",
        "enum": [
          "occurred",
          "rate_exceeded",
          "assigned",
          "resolved",
          "unresolved",
          "commented",
          "deployed",
          "up",
          "down",
          "cert_will_expire",
          "flooded",
          "check_in_missing",
          "check_in_reporting",
          "alarm_alert",
          "alarm_ok",
          "volume_spike",
          "all"
        ]
      },
      "IntegrationConfigCampfire": {
        "type": "object",
        "title": "Campfire settings",
        "additionalProperties": false,
        "properties": {
          "subdomain": {
            "type": [
              "string",
              "null"
            ],
            "title": "Subdomain",
            "description": "Your Campfire subdomain."
          },
          "room_name": {
            "type": [
              "string",
              "null"
            ],
            "title": "Room name",
            "description": "The Campfire room notifications are posted to."
          },
          "token": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Token",
            "description": "Never returned. Leave it out of an update to keep it.",
            "writeOnly": true
          }
        }
      },
      "IntegrationConfigCampfireV2": {
        "type": "object",
        "title": "Campfire settings",
        "additionalProperties": false,
        "properties": {
          "campfire_url": {
            "type": [
              "string",
              "null"
            ],
            "title": "Campfire url",
            "description": "Add the URL for your Campfire channel. ex: https://3.basecamp.com/3537905/buckets/7994437/chats/828327173.",
            "example": "https://example.com"
          }
        }
      },
      "IntegrationConfigCampfireV3": {
        "type": "object",
        "title": "Campfire settings",
        "additionalProperties": false,
        "properties": {
          "chatbot_url": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Chatbot URL",
            "description": "The [integration URL](https://docs.honeybadger.io/guides/integrations/campfire/#2-create-a-chatbot-integration-in-basecamp) for your Campfire chatbot.",
            "example": "https://example.com"
          }
        }
      },
      "IntegrationConfigDatadog": {
        "type": "object",
        "title": "Datadog settings",
        "additionalProperties": false,
        "properties": {
          "api_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Api key",
            "description": "Your Datadog API key. Never returned. Leave it out of an update to keep it.",
            "example": "0123456789abcdef0123456789abcdef",
            "writeOnly": true
          },
          "endpoint": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "US1",
              "US3",
              "US5",
              "US1-FED",
              "EU1",
              "AP1",
              null
            ],
            "default": "US1",
            "title": "Endpoint",
            "description": "The Datadog site your account is on: `US1` is datadoghq.com, `EU1` is datadoghq.eu."
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          },
          "send_metrics": {
            "type": [
              "boolean",
              "null"
            ],
            "title": "Send metrics",
            "description": "Report the number of notifications processed every minute."
          }
        }
      },
      "IntegrationConfigDiscordWebhook": {
        "type": "object",
        "title": "Discord settings",
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Webhook URL",
            "description": "Get a Webhook URL in Discord under Channel Settings → Webhooks.",
            "example": "https://example.com/hook"
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigGithub": {
        "type": "object",
        "title": "GitHub settings",
        "additionalProperties": false,
        "properties": {
          "repo": {
            "type": [
              "string",
              "null"
            ],
            "title": "Repository name",
            "description": "e.g. honeybadger-io/crywolf.",
            "example": "honeybadger-io/crywolf"
          },
          "labels": {
            "type": [
              "string",
              "null"
            ],
            "title": "Labels",
            "description": "A comma-delimited list of labels to add when creating issues."
          },
          "issue_type": {
            "type": [
              "string",
              "null"
            ],
            "title": "Issue type",
            "description": "The [issue type](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/managing-issue-types-in-an-organization) to use when creating issues (e.g., 'Bug').",
            "example": "Bug"
          },
          "issue_fields": {
            "type": [
              "string",
              "null"
            ],
            "title": "Issue fields",
            "description": "[Issue fields](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/adding-and-managing-issue-fields) to set when creating issues, one per line (e.g., 'Priority: High'). Enter dates as YYYY-MM-DD.",
            "example": "Priority: High"
          },
          "title_format": {
            "type": [
              "string",
              "null"
            ],
            "title": "Title format",
            "description": "You can customize the Github issue title, or you can leave this blank for the default title. Please see [our documentation](https://docs.honeybadger.io/guides/integrations/#custom-formatters) for details."
          },
          "rich_body": {
            "type": [
              "boolean",
              "null"
            ],
            "title": "Send a detailed issue body",
            "description": "When enabled, new issues are created with a detailed body that includes context, parameters, and the backtrace. When disabled, only a short backtrace excerpt and a link back to Honeybadger are sent. Note that enabling this sends more potentially sensitive data to GitHub."
          }
        }
      },
      "IntegrationConfigGitlab": {
        "type": "object",
        "title": "GitLab settings",
        "additionalProperties": false,
        "properties": {
          "repo": {
            "type": [
              "string",
              "null"
            ],
            "title": "Repository name",
            "description": "e.g. honeybadger-io/crywolf.",
            "example": "honeybadger-io/crywolf"
          },
          "labels": {
            "type": [
              "string",
              "null"
            ],
            "title": "Labels",
            "description": "A comma-separated list of labels to add to new issues."
          },
          "server_url": {
            "type": [
              "string",
              "null"
            ],
            "default": "https://gitlab.com",
            "title": "Server URL",
            "description": "You only need to change this if you are using a self-hosted installation of GitLab.",
            "example": "https://gitlab.com"
          },
          "personal_access_token": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Personal access token",
            "description": "Leave this blank unless you are using a self-hosted installation of GitLab. An access token can be generated in Settings -> Access Tokens in the GitLab UI. Never returned. Leave it out of an update to keep it.",
            "writeOnly": true
          },
          "title_format": {
            "type": [
              "string",
              "null"
            ],
            "title": "Title format",
            "description": "You can customize the GitLab issue title, or you can leave this blank for the default title. Please see [our documentation](https://docs.honeybadger.io/guides/integrations/#custom-formatters) for details."
          },
          "rich_body": {
            "type": [
              "boolean",
              "null"
            ],
            "title": "Send a detailed issue body",
            "description": "When enabled, new issues are created with a detailed body that includes context, parameters, and the backtrace. When disabled, only a short backtrace excerpt and a link back to Honeybadger are sent. Note that enabling this sends more potentially sensitive data to GitLab."
          }
        }
      },
      "IntegrationConfigBitbucket": {
        "type": "object",
        "title": "Bitbucket settings",
        "additionalProperties": false,
        "properties": {
          "repo": {
            "type": [
              "string",
              "null"
            ],
            "title": "Repository name",
            "description": "e.g. honeybadger-io/crywolf.",
            "example": "honeybadger-io/crywolf"
          }
        }
      },
      "IntegrationConfigPivotalTracker": {
        "type": "object",
        "title": "Pivotal Tracker settings",
        "additionalProperties": false,
        "properties": {
          "api_token": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "API Token",
            "description": "To create stories from the UI, each project member must also add their personal Pivotal Tracker API token on their project settings page. Never returned. Leave it out of an update to keep it.",
            "writeOnly": true
          },
          "pivotal_project_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Project ID",
            "description": "e.g. pivotaltracker.com/projects/**1337**/overview.",
            "example": "1337"
          },
          "labels": {
            "type": [
              "string",
              "null"
            ],
            "title": "Labels",
            "description": "A comma-separated list of labels to add to new stories."
          },
          "name_format": {
            "type": [
              "string",
              "null"
            ],
            "title": "Name format",
            "description": "Customize the Pivotal Tracker story name, or leave blank for the default name. Please see [our documentation](https://docs.honeybadger.io/guides/integrations/#custom-formatters) for details."
          },
          "description_format": {
            "type": [
              "string",
              "null"
            ],
            "default": "## Backtrace\n[backtrace]\n\nView full backtrace and more info at [url]",
            "title": "Description format",
            "description": "Customize the Pivotal Tracker description. Please see [our documentation](https://docs.honeybadger.io/guides/integrations/#custom-formatters) for details.",
            "example": "## Backtrace\n[backtrace]\n\nView full backtrace and more info at [url]"
          }
        }
      },
      "IntegrationConfigFlowdock": {
        "type": "object",
        "title": "Flowdock settings",
        "additionalProperties": false,
        "properties": {
          "api_token": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Api token",
            "description": "Never returned. Leave it out of an update to keep it.",
            "writeOnly": true
          },
          "tags": {
            "type": [
              "string",
              "null"
            ],
            "title": "Tags",
            "description": "A comma-separated list of tags."
          }
        }
      },
      "IntegrationConfigAsana": {
        "type": "object",
        "title": "Asana settings",
        "additionalProperties": false,
        "properties": {
          "asana_project_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Project ID",
            "description": "e.g. from a project view: app.asana.com/0/**3456789012345**/3456789012345.",
            "example": "3456789012345"
          }
        }
      },
      "IntegrationConfigHipChat": {
        "type": "object",
        "title": "HipChat settings",
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ],
            "default": "https://api.hipchat.com",
            "title": "Server URL",
            "description": "Base URL of the HipChat server.",
            "example": "https://api.hipchat.com"
          },
          "auth_token": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Auth token",
            "description": "Never returned. Leave it out of an update to keep it.",
            "writeOnly": true
          },
          "room": {
            "type": [
              "string",
              "null"
            ],
            "title": "Room name",
            "description": "The HipChat room notifications are posted to."
          },
          "color": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "yellow",
              "red",
              "green",
              "purple",
              "gray",
              "random",
              null
            ],
            "default": "yellow",
            "title": "Color",
            "description": "Background color of each message."
          },
          "alert": {
            "type": [
              "boolean",
              "null"
            ],
            "title": "Alert",
            "description": "Whether each message triggers a HipChat notification."
          }
        }
      },
      "IntegrationConfigJira": {
        "type": "object",
        "title": "Jira settings",
        "additionalProperties": false,
        "properties": {
          "username": {
            "type": [
              "string",
              "null"
            ],
            "title": "Username",
            "description": "Your Jira email address.",
            "example": "ops@example.com"
          },
          "password": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "API Token",
            "description": "You can find or generate your API Token [here](https://id.atlassian.com/manage/api-tokens). Never returned. Leave it out of an update to keep it.",
            "example": "0123456789abcdef0123456789abcdef",
            "writeOnly": true
          },
          "server_url": {
            "type": [
              "string",
              "null"
            ],
            "title": "Server URL",
            "description": "Base URL of your Jira server, e.g. https://jira.example.com.",
            "example": "https://jira.example.com"
          },
          "project_key": {
            "type": [
              "string",
              "null"
            ],
            "title": "Project key",
            "description": "Key of the Jira project new issues are created in, e.g. OPS.",
            "example": "OPS"
          },
          "resolve_transition": {
            "type": [
              "string",
              "null"
            ],
            "default": "5",
            "title": "Resolve transition",
            "description": "The ID of the transition to be performed when resolved."
          },
          "reopen_transition": {
            "type": [
              "string",
              "null"
            ],
            "default": "3",
            "title": "Reopen transition",
            "description": "The ID of the transition to be performed when unresolved."
          },
          "labels": {
            "type": [
              "string",
              "null"
            ],
            "title": "Labels",
            "description": "A comma-delimited list of labels to be added to the issues created by Honeybadger."
          },
          "component_names": {
            "type": [
              "string",
              "null"
            ],
            "title": "Component names",
            "description": "A comma-delimited list of components to be added to the issues created by Honeybadger."
          },
          "issue_type": {
            "type": [
              "string",
              "null"
            ],
            "default": "Bug",
            "title": "Issue type",
            "description": "Type of each new issue, as Jira names it.",
            "example": "Bug"
          },
          "summary_format": {
            "type": [
              "string",
              "null"
            ],
            "title": "Summary format",
            "description": "You can customize the JIRA issue summary, or you can leave this blank for the default title. Please see [our documentation](https://docs.honeybadger.io/guides/integrations/#custom-formatters) for details."
          },
          "rich_body": {
            "type": [
              "boolean",
              "null"
            ],
            "title": "Send a detailed issue description",
            "description": "When enabled, new issues are created with a detailed description that includes context, parameters, and the backtrace. When disabled, only a short backtrace excerpt and a link back to Honeybadger are sent. Note that enabling this sends more potentially sensitive data to JIRA."
          }
        }
      },
      "IntegrationConfigJiraCloud": {
        "type": "object",
        "title": "Jira Cloud settings",
        "additionalProperties": false,
        "properties": {
          "project_key": {
            "type": [
              "string",
              "null"
            ],
            "title": "Project key",
            "description": "Key of the Jira project new issues are created in, e.g. OPS.",
            "example": "OPS"
          },
          "resolve_transition": {
            "type": [
              "string",
              "null"
            ],
            "default": "5",
            "title": "Resolve transition",
            "description": "The ID of the transition to be performed when resolved."
          },
          "reopen_transition": {
            "type": [
              "string",
              "null"
            ],
            "default": "3",
            "title": "Reopen transition",
            "description": "The ID of the transition to be performed when unresolved."
          },
          "labels": {
            "type": [
              "string",
              "null"
            ],
            "title": "Labels",
            "description": "A comma-delimited list of labels to be added to the issues created by Honeybadger."
          },
          "component_names": {
            "type": [
              "string",
              "null"
            ],
            "title": "Component names",
            "description": "A comma-delimited list of components to be added to the issues created by Honeybadger. **NOTE: Components are not available for next-gen projects.**"
          },
          "issue_type": {
            "type": [
              "string",
              "null"
            ],
            "default": "Bug",
            "title": "Issue type",
            "description": "Type of each new issue, as Jira names it.",
            "example": "Bug"
          },
          "summary_format": {
            "type": [
              "string",
              "null"
            ],
            "title": "Summary format",
            "description": "You can customize the JIRA issue summary, or you can leave this blank for the default title. Please see [our documentation](https://docs.honeybadger.io/guides/integrations/#custom-formatters) for details."
          },
          "rich_body": {
            "type": [
              "boolean",
              "null"
            ],
            "title": "Send a detailed issue description",
            "description": "When enabled, new issues are created with a detailed description that includes context, parameters, and the backtrace. When disabled, only a short backtrace excerpt and a link back to Honeybadger are sent. Note that enabling this sends more potentially sensitive data to JIRA."
          }
        }
      },
      "IntegrationConfigOpsGenie": {
        "type": "object",
        "title": "OpsGenie settings",
        "additionalProperties": false,
        "properties": {
          "api_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Api key",
            "description": "The API key from your [Honeybadger integration](https://app.opsgenie.com/integration) in OpsGenie. Never returned. Leave it out of an update to keep it.",
            "writeOnly": true
          },
          "endpoint": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "US",
              "EU",
              "Sandbox",
              null
            ],
            "default": "US",
            "title": "Endpoint",
            "description": "The Opsgenie region your account is on."
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigOpsGenieV2": {
        "type": "object",
        "title": "OpsGenie settings",
        "additionalProperties": false,
        "properties": {
          "api_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "API Key",
            "description": "The API key from your [API integration](https://support.atlassian.com/opsgenie/docs/create-a-default-api-integration/) in OpsGenie. Never returned. Leave it out of an update to keep it.",
            "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
            "writeOnly": true
          },
          "endpoint": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "US",
              "EU",
              "Sandbox",
              null
            ],
            "default": "US",
            "title": "Endpoint",
            "description": "The Opsgenie region your account is on."
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigRedmine": {
        "type": "object",
        "title": "Redmine settings",
        "additionalProperties": false,
        "properties": {
          "server_url": {
            "type": [
              "string",
              "null"
            ],
            "title": "Server URL",
            "description": "The full path to the project: http://redmine.yourserver.com/projects/project-name.",
            "example": "https://example.com"
          },
          "api_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Api key",
            "description": "Never returned. Leave it out of an update to keep it.",
            "example": "0123456789abcdef0123456789abcdef01234567",
            "writeOnly": true
          },
          "resolve_transition": {
            "type": [
              "string",
              "null"
            ],
            "default": "3",
            "title": "Resolve transition",
            "description": "The ID of the status for resolved issues."
          },
          "reopen_transition": {
            "type": [
              "string",
              "null"
            ],
            "default": "4",
            "title": "Reopen transition",
            "description": "The ID of the status for unresolved issues."
          }
        }
      },
      "IntegrationConfigPagerDuty": {
        "type": "object",
        "title": "PagerDuty settings",
        "additionalProperties": false,
        "properties": {
          "api_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Service API Key",
            "description": "32 character alphanumeric service key. Select \"Honeybadger\" from the Integration Type menu when creating a service for Honeybadger in PagerDuty. Never returned. Leave it out of an update to keep it.",
            "writeOnly": true
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigPagerDutyV2": {
        "type": "object",
        "title": "PagerDuty settings",
        "additionalProperties": false,
        "properties": {
          "integration_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Integration Key",
            "description": "32 character alphanumeric integration key. Select \"Honeybadger\" from the Integration Type menu when creating a service for Honeybadger in PagerDuty. Never returned. Leave it out of an update to keep it.",
            "example": "0123456789abcdef0123456789abcdef",
            "writeOnly": true
          },
          "severity": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "critical",
              "error",
              "warning",
              "info",
              null
            ],
            "default": "error",
            "title": "Severity",
            "description": "The perceived severity of the events generated by this integration."
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigSprintly": {
        "type": "object",
        "title": "Sprintly settings",
        "additionalProperties": false,
        "properties": {
          "account_email": {
            "type": [
              "string",
              "null"
            ],
            "title": "Account email",
            "description": "Email address of the Sprint.ly account Honeybadger signs in as.",
            "example": "dev@example.com"
          },
          "api_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Api key",
            "description": "Never returned. Leave it out of an update to keep it.",
            "example": "0123456789abcdef0123456789abcdef",
            "writeOnly": true
          },
          "product_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Product ID",
            "description": "e.g. sprint.ly/product/**1337**/#!/.",
            "example": "1337"
          },
          "tags": {
            "type": [
              "string",
              "null"
            ],
            "title": "Tags",
            "description": "A comma-separated list of tags to add to new defects."
          }
        }
      },
      "IntegrationConfigTrello": {
        "type": "object",
        "title": "Trello settings",
        "additionalProperties": false,
        "properties": {
          "board_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Board",
            "description": "The value that service's API uses for it, usually an ID.",
            "example": "5f1a2b3c4d5e6f7a8b9c0d1e"
          },
          "list_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "List",
            "description": "The value that service's API uses for it, usually an ID.",
            "example": "5f1a2b3c4d5e6f7a8b9c0d2f"
          },
          "title_format": {
            "type": [
              "string",
              "null"
            ],
            "title": "Title format",
            "description": "You can customize the trello card title, or you can leave this blank for the default title. Please see [our documentation](https://docs.honeybadger.io/guides/integrations/#custom-formatters) for details."
          }
        }
      },
      "IntegrationConfigLinear": {
        "type": "object",
        "title": "Linear settings",
        "additionalProperties": false,
        "properties": {
          "team_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Team",
            "description": "The value that service's API uses for it, usually an ID.",
            "example": "9cfb482a-81e3-4154-b5b9-2c805e70a02d"
          },
          "linear_project_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Project",
            "description": "The value that service's API uses for it, usually an ID."
          },
          "label_ids": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "title": "Labels",
            "description": "IDs of the Linear labels to add to new issues, as Linear's API returns them."
          },
          "unresolved_state_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Unresolved state",
            "description": "We will use this state for new issues and when an existing issue is reopened. The value that service's API uses for it, usually an ID."
          },
          "resolved_state_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Resolved state",
            "description": "The value that service's API uses for it, usually an ID."
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          },
          "title_format": {
            "type": [
              "string",
              "null"
            ],
            "default": "[[project]] Occurred: [class] ([fault_id])",
            "title": "Title format",
            "description": "Title of each new Linear issue. Placeholders such as `[class]`, `[message]` and `[fault_id]` are filled in; see [custom formatters](https://docs.honeybadger.io/guides/integrations/#custom-formatters).",
            "example": "[[project]] Occurred: [class] ([fault_id])"
          },
          "description_format": {
            "type": [
              "string",
              "null"
            ],
            "default": "[class]: [message]\n\nBacktrace:\n\n[backtrace]\n\nView full backtrace and more info at honeybadger.io: [url]",
            "title": "Description format",
            "description": "Description of each new Linear issue. Placeholders such as `[class]`, `[message]` and `[fault_id]` are filled in; see [custom formatters](https://docs.honeybadger.io/guides/integrations/#custom-formatters).",
            "example": "[class]: [message]\n\nBacktrace:\n\n[backtrace]\n\nView full backtrace and more info at honeybadger.io: [url]\n"
          }
        }
      },
      "IntegrationConfigSlack": {
        "type": "object",
        "title": "Slack settings",
        "additionalProperties": false,
        "properties": {
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          },
          "disable_backtrace": {
            "type": [
              "boolean",
              "null"
            ],
            "title": "Disable backtrace",
            "description": "Remove backtrace from error event notifications."
          }
        }
      },
      "IntegrationConfigMattermost": {
        "type": "object",
        "title": "Mattermost settings",
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Webhook URL",
            "description": "The Mattermost incoming webhook URL notifications are posted to.",
            "example": "https://example.com/hook"
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigGoogleHangoutsChat": {
        "type": "object",
        "title": "Google Chat settings",
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Webhook URL",
            "description": "Please see [our documentation](https://docs.honeybadger.io/guides/integrations/google-chat/) for info on how to generate this.",
            "example": "https://example.com/hook"
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigVictorOps": {
        "type": "object",
        "title": "Splunk On-Call settings",
        "additionalProperties": false,
        "properties": {
          "api_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Api key",
            "description": "Your Splunk On-Call API key. Never returned. Leave it out of an update to keep it.",
            "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
            "writeOnly": true
          },
          "routing_key": {
            "type": [
              "string",
              "null"
            ],
            "title": "Routing key",
            "description": "Optional routing key for alert."
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigWebHook": {
        "type": "object",
        "title": "Webhook settings",
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "URL",
            "description": "The URL Honeybadger sends each notification to, as a JSON POST.",
            "example": "https://example.com/hook"
          },
          "bearer_token": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Bearer token",
            "description": "Optional. When set, requests are sent with `Authorization: Bearer <token>`, for endpoints that require it. Never returned. Leave it out of an update to keep it.",
            "writeOnly": true
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          },
          "payload_version": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "v2",
              "v3",
              null
            ],
            "default": "v2",
            "title": "Payload version",
            "description": "The JSON payload format. v2 by default."
          }
        }
      },
      "IntegrationConfigEmail": {
        "type": "object",
        "title": "Email settings",
        "additionalProperties": false,
        "properties": {
          "email": {
            "type": [
              "string",
              "null"
            ],
            "title": "Email address",
            "description": "Address each notification is emailed to.",
            "example": "alerts@example.com"
          },
          "email_subject": {
            "type": [
              "string",
              "null"
            ],
            "title": "Email subject",
            "description": "You can customize the subject line for emails related to errors (when they occur, are assigned, etc.), or you can leave this blank for the default subject. Please see [our documentation](https://docs.honeybadger.io/guides/integrations/#custom-formatters) for details."
          }
        }
      },
      "IntegrationConfigIntercom": {
        "type": "object",
        "title": "Intercom settings",
        "additionalProperties": false,
        "properties": {
          "context_field": {
            "type": [
              "string",
              "null"
            ],
            "title": "Context field",
            "description": "The field from the context hash that will be sent to Intercom as the user ID.",
            "example": "user_id"
          }
        }
      },
      "IntegrationConfigAlertOps": {
        "type": "object",
        "title": "AlertOps settings",
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "URL",
            "description": "The URL from your [Honeybadger integration](https://honeybadger.alertops.com/admin/MappingRulesList.aspx) in AlertOps.",
            "example": "https://example.com/hook"
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigMicrosoftTeams": {
        "type": "object",
        "title": "Microsoft Teams settings",
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Webhook URL",
            "description": "Get a Webhook URL in Microsoft Teams under Apps → Search all → Honeybadger.",
            "example": "https://example.com/hook"
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "A name for this integration, shown in Honeybadger."
          }
        }
      },
      "IntegrationConfigMicrosoftTeamsV2": {
        "type": "object",
        "title": "Microsoft Teams settings",
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Webhook URL",
            "description": "Get a Webhook URL in Microsoft Teams under Connectors → Incoming Webhook.",
            "example": "https://example.com/hook"
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigShortcut": {
        "type": "object",
        "title": "Shortcut settings",
        "additionalProperties": false,
        "properties": {
          "organization_name": {
            "type": [
              "string",
              "null"
            ],
            "title": "Organization name",
            "description": "e.g. app.shortcut.com/**yourorg**/dashboard.",
            "example": "yourorg"
          },
          "api_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "API Token",
            "description": "Available from Settings > Your Account > API Tokens. Never returned. Leave it out of an update to keep it.",
            "writeOnly": true
          },
          "title_format": {
            "type": [
              "string",
              "null"
            ],
            "default": "[[project]] Occurred: [class] ([fault_id])",
            "title": "Story Title",
            "description": "Title of each new Shortcut story. Placeholders such as `[class]`, `[message]` and `[fault_id]` are filled in; see [custom formatters](https://docs.honeybadger.io/guides/integrations/#custom-formatters).",
            "example": "[[project]] Occurred: [class] ([fault_id])"
          },
          "description_format": {
            "type": [
              "string",
              "null"
            ],
            "default": "[class]: [message]\n\nBacktrace:\n\n[backtrace]\n\nView full backtrace and more info at honeybadger.io: [url]",
            "title": "Story Description",
            "description": "Description of each new Shortcut story. Placeholders such as `[class]`, `[message]` and `[fault_id]` are filled in; see [custom formatters](https://docs.honeybadger.io/guides/integrations/#custom-formatters).",
            "example": "[class]: [message]\n\nBacktrace:\n\n[backtrace]\n\nView full backtrace and more info at honeybadger.io: [url]\n"
          },
          "external_project_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Project ID",
            "description": "The value that service's API uses for it, usually an ID."
          },
          "resolve_transition": {
            "type": [
              "string",
              "null"
            ],
            "title": "Resolved workflow state",
            "description": "The value that service's API uses for it, usually an ID."
          },
          "reopen_transition": {
            "type": [
              "string",
              "null"
            ],
            "title": "Reopened workflow state",
            "description": "The value that service's API uses for it, usually an ID."
          }
        }
      },
      "IntegrationConfigShortcutV2": {
        "type": "object",
        "title": "Shortcut settings",
        "additionalProperties": false,
        "properties": {
          "organization_name": {
            "type": [
              "string",
              "null"
            ],
            "title": "Organization name",
            "description": "e.g. app.shortcut.com/**yourorg**/dashboard.",
            "example": "yourorg"
          },
          "api_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "API Token",
            "description": "Available from Settings > Your Account > API Tokens. Never returned. Leave it out of an update to keep it.",
            "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
            "writeOnly": true
          },
          "title_format": {
            "type": [
              "string",
              "null"
            ],
            "default": "[[project]] Occurred: [class] ([fault_id])",
            "title": "Story Title",
            "description": "Title of each new Shortcut story. Placeholders such as `[class]`, `[message]` and `[fault_id]` are filled in; see [custom formatters](https://docs.honeybadger.io/guides/integrations/#custom-formatters).",
            "example": "[[project]] Occurred: [class] ([fault_id])"
          },
          "description_format": {
            "type": [
              "string",
              "null"
            ],
            "default": "[class]: [message]\n\nBacktrace:\n\n[backtrace]\n\nView full backtrace and more info at honeybadger.io: [url]",
            "title": "Story Description",
            "description": "Description of each new Shortcut story. Placeholders such as `[class]`, `[message]` and `[fault_id]` are filled in; see [custom formatters](https://docs.honeybadger.io/guides/integrations/#custom-formatters).",
            "example": "[class]: [message]\n\nBacktrace:\n\n[backtrace]\n\nView full backtrace and more info at honeybadger.io: [url]\n"
          },
          "custom_fields": {
            "type": [
              "string",
              "null"
            ],
            "title": "Custom Fields",
            "description": "Custom field values to set on new stories: a comma-separated list of `field_id:value_id` pairs, with IDs from Shortcut."
          },
          "team": {
            "type": [
              "string",
              "null"
            ],
            "title": "Team",
            "description": "The value that service's API uses for it, usually an ID.",
            "example": "5f1a2b3c-4d5e-6f7a-8b9c-0d1e2f3a4b5c"
          },
          "initial_state": {
            "type": [
              "string",
              "null"
            ],
            "title": "Initial state",
            "description": "The value that service's API uses for it, usually an ID.",
            "example": "500000007"
          },
          "resolve_transition": {
            "type": [
              "string",
              "null"
            ],
            "title": "Resolved workflow state",
            "description": "The value that service's API uses for it, usually an ID.",
            "example": "500000010"
          },
          "reopen_transition": {
            "type": [
              "string",
              "null"
            ],
            "title": "Reopened workflow state",
            "description": "The value that service's API uses for it, usually an ID.",
            "example": "500000007"
          }
        }
      },
      "IntegrationConfigPagerTree": {
        "type": "object",
        "title": "PagerTree settings",
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "URL",
            "description": "Please see [PagerTree documentation](https://pagertree.com/knowledge-base/integration-honeybadger/) for info on generating this.",
            "example": "https://example.com/hook"
          }
        }
      },
      "IntegrationConfigInstatus": {
        "type": "object",
        "title": "Instatus settings",
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Webhook URL",
            "description": "The Instatus webhook URL notifications are posted to.",
            "example": "https://example.com/hook"
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigClickUp": {
        "type": "object",
        "title": "ClickUp settings",
        "additionalProperties": false,
        "properties": {
          "workspace_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Workspace",
            "description": "The value that service's API uses for it, usually an ID.",
            "example": "9012345678"
          },
          "teamspace_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Teamspace",
            "description": "The value that service's API uses for it, usually an ID.",
            "example": "90120123456"
          },
          "folder_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Folder",
            "description": "The value that service's API uses for it, usually an ID."
          },
          "list_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "List",
            "description": "The ID of the list to create tasks for. The value that service's API uses for it, usually an ID.",
            "example": "901201234567"
          },
          "initial_status_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Initial status",
            "description": "The initial status when a task is created. The value that service's API uses for it, usually an ID.",
            "example": "sc901201234567_AbCd1234"
          },
          "resolve_status_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Resolve status",
            "description": "The task status when an error is resolved. The value that service's API uses for it, usually an ID.",
            "example": "sc901201234567_EfGh5678"
          },
          "reopen_status_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Reopen status",
            "description": "The task status when an error is reopened. The value that service's API uses for it, usually an ID.",
            "example": "sc901201234567_AbCd1234"
          },
          "tags": {
            "type": [
              "string",
              "null"
            ],
            "title": "Tags",
            "description": "Comma-separated list of tags."
          },
          "title_format": {
            "type": [
              "string",
              "null"
            ],
            "default": "[[project]] Occurred: [class] ([fault_id])",
            "title": "Title format",
            "description": "You can customize the ClickUp task name, or you can leave this blank for the default name. Please see [our documentation](https://docs.honeybadger.io/guides/integrations/#custom-formatters) for details.",
            "example": "[[project]] Occurred: [class] ([fault_id])"
          },
          "description_format": {
            "type": [
              "string",
              "null"
            ],
            "default": "[class]: [message]\n\nBacktrace:\n\n[backtrace]\n\nView full backtrace and more info at honeybadger.io: [url]",
            "title": "Description format",
            "description": "Description of each new ClickUp task. Placeholders such as `[class]`, `[message]` and `[fault_id]` are filled in; see [custom formatters](https://docs.honeybadger.io/guides/integrations/#custom-formatters).",
            "example": "[class]: [message]\n\nBacktrace:\n\n[backtrace]\n\nView full backtrace and more info at honeybadger.io: [url]\n"
          }
        }
      },
      "IntegrationConfigClickUpChat": {
        "type": "object",
        "title": "ClickUp Chat settings",
        "additionalProperties": false,
        "properties": {
          "workspace_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Workspace",
            "description": "The value that service's API uses for it, usually an ID.",
            "example": "9012345678"
          },
          "channel_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Channel",
            "description": "The value that service's API uses for it, usually an ID.",
            "example": "4-90120123456-8"
          }
        }
      },
      "IntegrationConfigIlert": {
        "type": "object",
        "title": "ilert settings",
        "additionalProperties": false,
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "URL",
            "description": "The URL from your [Honeybadger integration](https://docs.ilert.com/inbound-integrations/honeybadger) in ilert.",
            "example": "https://example.com/hook"
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigZulip": {
        "type": "object",
        "title": "Zulip settings",
        "additionalProperties": false,
        "properties": {
          "bot_email": {
            "type": [
              "string",
              "null"
            ],
            "title": "Bot email",
            "description": "Email address of the Zulip bot that posts notifications.",
            "example": "honeybadger-bot@example.zulipchat.com"
          },
          "api_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Api key",
            "description": "Never returned. Leave it out of an update to keep it.",
            "example": "AbCdEf0123456789AbCdEf0123456789",
            "writeOnly": true
          },
          "zulip_domain": {
            "type": [
              "string",
              "null"
            ],
            "title": "Zulip Cloud subdomain",
            "description": "For Zulip Cloud, your organization's subdomain (`example` for example.zulipchat.com). Leave blank if you run your own Zulip server."
          },
          "server_url": {
            "type": [
              "string",
              "null"
            ],
            "title": "Server URL",
            "description": "For a self-hosted Zulip server, its HTTPS address (for example, https://chat.example.com). When set, it is used instead of the Zulip Cloud subdomain.",
            "example": "https://example.com"
          },
          "channel": {
            "type": [
              "string",
              "null"
            ],
            "title": "Channel",
            "description": "The Zulip channel notifications are posted to.",
            "example": "alerts"
          },
          "topic": {
            "type": [
              "string",
              "null"
            ],
            "title": "Topic",
            "description": "The topic within that channel.",
            "example": "Honeybadger"
          }
        }
      },
      "IntegrationConfigIncidentIo": {
        "type": "object",
        "title": "incident.io settings",
        "additionalProperties": false,
        "properties": {
          "api_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "API Key",
            "description": "Never returned. Leave it out of an update to keep it.",
            "example": "0123456789abcdef0123456789abcdef",
            "writeOnly": true
          },
          "alert_source_label": {
            "type": [
              "string",
              "null"
            ],
            "title": "Alert source label",
            "description": "Name of the incident.io HTTP alert source that receives alerts. Honeybadger finds the source by this name, or creates it.",
            "example": "Honeybadger"
          }
        }
      },
      "IntegrationConfigRootly": {
        "type": "object",
        "title": "Rootly settings",
        "additionalProperties": false,
        "properties": {
          "webhook_authorization_token": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "Webhook authorization token",
            "description": "Never returned. Leave it out of an update to keep it.",
            "example": "0123456789abcdef0123456789abcdef",
            "writeOnly": true
          },
          "notification_target_type": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "service",
              "team",
              "escalationPolicy",
              null
            ],
            "title": "Notification target type",
            "description": "What Rootly pages: a service, a team or an escalation policy."
          },
          "notification_target_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Notification target ID",
            "description": "ID of the Rootly service, team or escalation policy that's paged."
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          }
        }
      },
      "IntegrationConfigBacklog": {
        "type": "object",
        "title": "Backlog settings",
        "additionalProperties": false,
        "properties": {
          "space_url": {
            "type": [
              "string",
              "null"
            ],
            "title": "Space URL",
            "description": "Your Backlog space URL (e.g., https://example.backlog.com or https://example.backlog.jp).",
            "example": "https://example.backlog.com"
          },
          "api_key": {
            "type": [
              "string",
              "null"
            ],
            "format": "password",
            "title": "API Key",
            "description": "Your Backlog API key (generate one in Personal Settings > API). Never returned. Leave it out of an update to keep it.",
            "example": "AbCdEf0123456789AbCdEf0123456789AbCdEf0123456789AbCdEf0123456789",
            "writeOnly": true
          },
          "backlog_project_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Project",
            "description": "The Backlog project to create issues in. The value that service's API uses for it, usually an ID.",
            "example": "123456"
          },
          "issue_type_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Issue Type",
            "description": "The type of issue to create. The value that service's API uses for it, usually an ID.",
            "example": "1074711"
          },
          "priority_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Priority",
            "description": "The priority level for new issues. The value that service's API uses for it, usually an ID.",
            "example": "3"
          },
          "resolve_status_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Closed Status",
            "description": "The status to use when resolving errors. The value that service's API uses for it, usually an ID.",
            "example": "4"
          },
          "reopen_status_id": {
            "type": [
              "string",
              "null"
            ],
            "title": "Open Status",
            "description": "The status to use when unresolving errors. The value that service's API uses for it, usually an ID.",
            "example": "1"
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 100,
            "title": "Label",
            "description": "Optional label to show in the integrations list."
          },
          "enable_webhook": {
            "type": [
              "boolean",
              "null"
            ],
            "default": true,
            "title": "Sync status from Backlog",
            "description": "When enabled Honeybadger will create a webhook in Backlog to sync issue status changes back to Honeybadger."
          },
          "subject_format": {
            "type": [
              "string",
              "null"
            ],
            "title": "Issue Subject",
            "description": "Subject of each new Backlog issue. Placeholders such as `[class]`, `[message]` and `[fault_id]` are filled in; see [custom formatters](https://docs.honeybadger.io/guides/integrations/#custom-formatters).",
            "example": "[[project]] Occurred: [class] ([fault_id])"
          },
          "description_format": {
            "type": [
              "string",
              "null"
            ],
            "title": "Issue Description",
            "description": "Body of each new Backlog issue. Placeholders such as `[class]`, `[message]` and `[fault_id]` are filled in; see [custom formatters](https://docs.honeybadger.io/guides/integrations/#custom-formatters).",
            "example": "[class]: [message]\n\nBacktrace:\n\n[backtrace]\n\nView full backtrace and more info at honeybadger.io: [url]\n"
          }
        }
      },
      "DashboardChartConfigTable": {
        "type": "object",
        "description": "Raw result rows and columns. No config.",
        "additionalProperties": false
      },
      "DashboardChartConfigBillboard": {
        "type": "object",
        "description": "Big-number stat tiles: one tile per result row (or one per result field when `groupType` is `fields`).",
        "additionalProperties": false,
        "properties": {
          "titleField": {
            "type": "string",
            "description": "Alias shown as the tile title"
          },
          "valueField": {
            "type": "string",
            "description": "Alias shown as the big number; required when `groupType` is `events`"
          },
          "titleURLField": {
            "type": "string",
            "description": "Alias containing a URL; makes the tile title a link"
          },
          "subtitleField": {
            "type": "string",
            "description": "Alias shown below the value"
          },
          "statusField": {
            "type": "string",
            "description": "Alias whose value drives the tile's status indicator"
          },
          "groupType": {
            "type": "string",
            "enum": [
              "fields",
              "events"
            ],
            "description": "`events` (default): one tile per result row using `valueField`; `fields`: one tile per result field"
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "groupType": {
                  "const": "events"
                }
              },
              "required": [
                "groupType"
              ]
            },
            "then": {
              "required": [
                "valueField"
              ]
            }
          }
        ]
      },
      "DashboardChartConfigBar": {
        "type": "object",
        "description": "Bar chart of a value per category.",
        "required": [
          "categoryField",
          "valueField"
        ],
        "additionalProperties": false,
        "properties": {
          "categoryField": {
            "type": "string",
            "description": "Alias for the category axis; one bar per distinct value"
          },
          "valueField": {
            "type": "string",
            "description": "Alias for bar height"
          },
          "valueFieldUnit": {
            "type": "string",
            "description": "Unit used to format values: `percent`, `microseconds`, or `milliseconds`"
          },
          "labelField": {
            "type": "string",
            "description": "Alias rendered as a label on each bar"
          },
          "groupType": {
            "type": "string",
            "enum": [
              "fields",
              "events"
            ],
            "description": "`events` (default): series come from `groupField`; `fields`: every result field except `categoryField` becomes its own series"
          },
          "groupField": {
            "type": "string",
            "description": "Alias whose distinct values split bars into series (with `groupType` `events`)"
          },
          "horizontal": {
            "type": "boolean",
            "description": "Render bars horizontally"
          },
          "stacked": {
            "type": "boolean",
            "description": "Stack series instead of grouping side by side"
          },
          "groups": {
            "type": "object",
            "description": "Per-series display options keyed by series name, e.g. `{\"web\": {\"color\": \"#4A90D9\"}}`. Advanced — usually omit",
            "patternProperties": {
              "^.*$": {
                "type": "object",
                "properties": {
                  "color": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "DashboardChartConfigLine": {
        "type": "object",
        "description": "One or more series plotted over an x axis, usually time.",
        "additionalProperties": false,
        "properties": {
          "xField": {
            "type": "string",
            "description": "Alias for the x axis, typically a time bin such as `bin(1h)`"
          },
          "yField": {
            "type": "string",
            "description": "Alias plotted as the series value; required when `groupType` is `events`"
          },
          "zField": {
            "type": "string",
            "description": "Alias whose distinct values split results into one series each"
          },
          "colorField": {
            "type": "string",
            "description": "Alias whose values supply explicit series colors"
          },
          "xFieldUnit": {
            "type": "string",
            "description": "Unit used to format x values: `percent`, `microseconds`, or `milliseconds`"
          },
          "yFieldUnit": {
            "type": "string",
            "description": "Unit used to format y values: `percent`, `microseconds`, or `milliseconds`"
          },
          "groupType": {
            "type": "string",
            "enum": [
              "fields",
              "events"
            ],
            "description": "`events` (default): one series from `yField`, split by `zField` if set; `fields`: every result field except `xField` becomes its own series"
          },
          "yAxisLabel": {
            "type": "string",
            "description": "Left y-axis label (stored, but charts don't use it yet)"
          },
          "yAxisMin": {
            "type": "number",
            "description": "Left y-axis minimum (stored, but charts don't use it yet)"
          },
          "yAxisMax": {
            "type": "number",
            "description": "Left y-axis maximum (stored, but charts don't use it yet)"
          },
          "rightYAxisFormat": {
            "type": "string",
            "description": "Right y-axis format (stored, but charts don't use it yet)"
          },
          "rightYAxisLabel": {
            "type": "string",
            "description": "Right y-axis label (stored, but charts don't use it yet)"
          },
          "rightYAxisMin": {
            "type": "number",
            "description": "Right y-axis minimum (stored, but charts don't use it yet)"
          },
          "rightYAxisMax": {
            "type": "number",
            "description": "Right y-axis maximum (stored, but charts don't use it yet)"
          },
          "groups": {
            "type": "object",
            "description": "Per-series display options keyed by series name, e.g. `{\"web\": {\"color\": \"#4A90D9\"}}`; entries may also set `axis` (`left`|`right`) to plot a series on the right y axis. Advanced — usually omit",
            "patternProperties": {
              "^.*$": {
                "type": "object",
                "properties": {
                  "color": {
                    "type": "string"
                  },
                  "axis": {
                    "type": "string",
                    "enum": [
                      "left",
                      "right"
                    ]
                  }
                }
              }
            }
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "groupType": {
                  "const": "events"
                }
              },
              "required": [
                "groupType"
              ]
            },
            "then": {
              "required": [
                "yField"
              ]
            }
          }
        ]
      },
      "DashboardChartConfigArea": {
        "type": "object",
        "description": "Like line, with the area under each series filled; series can be stacked.",
        "additionalProperties": false,
        "properties": {
          "xField": {
            "type": "string",
            "description": "Alias for the x axis, typically a time bin such as `bin(1h)`"
          },
          "yField": {
            "type": "string",
            "description": "Alias plotted as the series value; required when `groupType` is `events`"
          },
          "zField": {
            "type": "string",
            "description": "Alias whose distinct values split results into one series each"
          },
          "groupType": {
            "type": "string",
            "enum": [
              "fields",
              "events"
            ],
            "description": "`events` (default): one series from `yField`, split by `zField` if set; `fields`: every result field except `xField` becomes its own series"
          },
          "stacked": {
            "type": "boolean",
            "description": "Stack series instead of overlaying them"
          },
          "groups": {
            "type": "object",
            "description": "Per-series display options keyed by series name, e.g. `{\"web\": {\"color\": \"#4A90D9\"}}`. Advanced — usually omit",
            "patternProperties": {
              "^.*$": {
                "type": "object",
                "properties": {
                  "color": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "groupType": {
                  "const": "events"
                }
              },
              "required": [
                "groupType"
              ]
            },
            "then": {
              "required": [
                "yField"
              ]
            }
          }
        ]
      },
      "DashboardChartConfigHistogram": {
        "type": "object",
        "description": "Distribution of values across buckets.",
        "required": [
          "xField",
          "yField"
        ],
        "additionalProperties": false,
        "properties": {
          "xField": {
            "type": "string",
            "description": "Alias for the x axis"
          },
          "yField": {
            "type": "string",
            "description": "Alias for the y axis"
          },
          "zField": {
            "type": "string",
            "description": "Alias whose distinct values split results into one series each"
          },
          "xFieldUnit": {
            "type": "string",
            "description": "Unit used to format x values: `percent`, `microseconds`, or `milliseconds`"
          },
          "yFieldUnit": {
            "type": "string",
            "description": "Unit used to format y values: `percent`, `microseconds`, or `milliseconds`"
          },
          "groups": {
            "type": "object",
            "description": "Per-series display options keyed by series name, e.g. `{\"web\": {\"color\": \"#4A90D9\"}}`. Advanced — usually omit",
            "patternProperties": {
              "^.*$": {
                "type": "object",
                "properties": {
                  "color": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "DashboardChartConfigScatter": {
        "type": "object",
        "description": "Individual points plotted on two axes.",
        "required": [
          "xField",
          "yField"
        ],
        "additionalProperties": false,
        "properties": {
          "xField": {
            "type": "string",
            "description": "Alias for the x axis"
          },
          "yField": {
            "type": "string",
            "description": "Alias for the y axis"
          },
          "groupField": {
            "type": "string",
            "description": "Alias whose distinct values color the points"
          },
          "scaleField": {
            "type": "string",
            "description": "Alias that scales point size"
          },
          "groups": {
            "type": "object",
            "description": "Per-series display options keyed by series name, e.g. `{\"web\": {\"color\": \"#4A90D9\"}}`. Advanced — usually omit",
            "patternProperties": {
              "^.*$": {
                "type": "object",
                "properties": {
                  "color": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "DashboardChartConfigHeatmap": {
        "type": "object",
        "description": "Grid of cells colored by intensity. The query must sort by the x and y fields (`| sort x, y`) to render correctly.",
        "required": [
          "xField",
          "yField",
          "zField"
        ],
        "additionalProperties": false,
        "properties": {
          "xField": {
            "type": "string",
            "description": "Alias for the x axis, typically a time bin such as `bin(1h)`"
          },
          "yField": {
            "type": "string",
            "description": "Alias for the y axis"
          },
          "zField": {
            "type": "string",
            "description": "Alias for cell value/intensity"
          },
          "yFieldUnit": {
            "type": "string",
            "description": "Unit used to format y values: `percent`, `microseconds`, or `milliseconds`"
          },
          "steps": {
            "type": "integer",
            "minimum": 1,
            "description": "Number of color steps (default 5)"
          },
          "groups": {
            "type": "object",
            "description": "Per-series display options keyed by series name, e.g. `{\"web\": {\"color\": \"#4A90D9\"}}`. Advanced — usually omit",
            "patternProperties": {
              "^.*$": {
                "type": "object",
                "properties": {
                  "color": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "DashboardChartConfigPie": {
        "type": "object",
        "description": "Proportional slices; one slice per result row.",
        "required": [
          "nameField",
          "valueField"
        ],
        "additionalProperties": false,
        "properties": {
          "nameField": {
            "type": "string",
            "description": "Alias for slice labels"
          },
          "valueField": {
            "type": "string",
            "description": "Alias for slice sizes"
          },
          "groups": {
            "type": "object",
            "description": "Per-slice display options keyed by slice name, e.g. `{\"web\": {\"color\": \"#4A90D9\"}}`. Advanced — usually omit",
            "patternProperties": {
              "^.*$": {
                "type": "object",
                "properties": {
                  "color": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "DashboardWidgetConfigInsightsVis": {
        "additionalProperties": false,
        "properties": {
          "streams": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "default",
                "internal"
              ]
            },
            "description": "Streams to query, by slug: `default` (the project's own stream) or `internal`. Anything else is refused (422). Left out or empty, set to the project's current streams. A slug whose stream the project doesn't have yet, right after it's created, is dropped."
          },
          "query": {
            "type": "string",
            "description": "BadgerQL query producing the widget's data"
          },
          "vis": {
            "type": "object",
            "required": [
              "view"
            ],
            "additionalProperties": false,
            "properties": {
              "view": {
                "type": "string",
                "enum": [
                  "billboard",
                  "bar",
                  "line",
                  "pie",
                  "area",
                  "histogram",
                  "scatter",
                  "heatmap",
                  "table"
                ]
              },
              "chart_config": {
                "type": "object"
              }
            },
            "allOf": [
              {
                "if": {
                  "properties": {
                    "view": {
                      "const": "table"
                    }
                  }
                },
                "then": {
                  "properties": {
                    "chart_config": {
                      "$ref": "#/components/schemas/DashboardChartConfigTable"
                    }
                  }
                }
              },
              {
                "if": {
                  "properties": {
                    "view": {
                      "const": "billboard"
                    }
                  }
                },
                "then": {
                  "properties": {
                    "chart_config": {
                      "$ref": "#/components/schemas/DashboardChartConfigBillboard"
                    }
                  }
                }
              },
              {
                "if": {
                  "properties": {
                    "view": {
                      "const": "bar"
                    }
                  }
                },
                "then": {
                  "properties": {
                    "chart_config": {
                      "$ref": "#/components/schemas/DashboardChartConfigBar"
                    }
                  }
                }
              },
              {
                "if": {
                  "properties": {
                    "view": {
                      "const": "line"
                    }
                  }
                },
                "then": {
                  "properties": {
                    "chart_config": {
                      "$ref": "#/components/schemas/DashboardChartConfigLine"
                    }
                  }
                }
              },
              {
                "if": {
                  "properties": {
                    "view": {
                      "const": "area"
                    }
                  }
                },
                "then": {
                  "properties": {
                    "chart_config": {
                      "$ref": "#/components/schemas/DashboardChartConfigArea"
                    }
                  }
                }
              },
              {
                "if": {
                  "properties": {
                    "view": {
                      "const": "histogram"
                    }
                  }
                },
                "then": {
                  "properties": {
                    "chart_config": {
                      "$ref": "#/components/schemas/DashboardChartConfigHistogram"
                    }
                  }
                }
              },
              {
                "if": {
                  "properties": {
                    "view": {
                      "const": "scatter"
                    }
                  }
                },
                "then": {
                  "properties": {
                    "chart_config": {
                      "$ref": "#/components/schemas/DashboardChartConfigScatter"
                    }
                  }
                }
              },
              {
                "if": {
                  "properties": {
                    "view": {
                      "const": "heatmap"
                    }
                  }
                },
                "then": {
                  "properties": {
                    "chart_config": {
                      "$ref": "#/components/schemas/DashboardChartConfigHeatmap"
                    }
                  }
                }
              },
              {
                "if": {
                  "properties": {
                    "view": {
                      "const": "pie"
                    }
                  }
                },
                "then": {
                  "properties": {
                    "chart_config": {
                      "$ref": "#/components/schemas/DashboardChartConfigPie"
                    }
                  }
                }
              }
            ],
            "description": "How to render the result: `{view, chart_config}`"
          }
        }
      },
      "DashboardWidgetConfigAlarms": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "description": "Max alarms shown"
          },
          "filter_state": {
            "type": "string",
            "enum": [
              "all",
              "triggered",
              "ok"
            ],
            "description": "Show all alarms or only those in one state"
          }
        }
      },
      "DashboardWidgetConfigErrors": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "description": "Max errors shown"
          },
          "query": {
            "type": "string",
            "description": "Error search query string to filter the list"
          },
          "sort": {
            "type": "string",
            "enum": [
              "last_seen_desc",
              "last_seen_asc",
              "times_desc",
              "times_asc"
            ],
            "description": "Sort order"
          }
        }
      },
      "DashboardWidgetConfigDeployments": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "description": "Max deploys shown"
          },
          "override_time": {
            "type": "boolean",
            "description": "Use `ts` instead of the dashboard's time range"
          },
          "ts": {
            "type": "string",
            "description": "Time range used when `override_time` is true"
          }
        }
      },
      "DashboardWidgetConfigCheckins": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "description": "Max check-ins shown"
          },
          "sort_order": {
            "type": "string",
            "enum": [
              "state_name",
              "name",
              "last_reported"
            ],
            "description": "Sort by state, name, or last report time"
          }
        }
      },
      "DashboardWidgetConfigUptime": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "description": "Max uptime monitors shown"
          }
        }
      },
      "DashboardWidgetInput": {
        "type": "object",
        "required": [
          "type"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Kept as sent. Unique within its dashboard; another dashboard can use the same ID. Left out, the server assigns one. Use letters, digits, `-` and `_`."
          },
          "type": {
            "$ref": "#/components/schemas/DashboardWidgetType"
          },
          "grid": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "x": {
                "type": "integer",
                "minimum": 0
              },
              "y": {
                "type": "integer",
                "minimum": 0
              },
              "w": {
                "type": "integer",
                "minimum": 1
              },
              "h": {
                "type": "integer",
                "minimum": 1
              }
            },
            "default": {
              "x": 0,
              "y": 0,
              "w": 12,
              "h": 3
            },
            "description": "Merged into the default {x: 0, y: 0, w: 12, h: 3}: left out, the widget gets the default, and a key left out takes the default's value."
          },
          "presentation": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "title": {
                "type": "string",
                "maxLength": 255,
                "example": "Checkout errors"
              },
              "subtitle": {
                "type": "string",
                "maxLength": 255,
                "example": "Last 24 hours"
              }
            }
          },
          "config": {
            "type": "object",
            "additionalProperties": true,
            "description": "The widget's settings, as described by DashboardWidgetConfig<Type> for its `type`."
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "type": {
                  "const": "insights_vis"
                }
              }
            },
            "then": {
              "properties": {
                "config": {
                  "$ref": "#/components/schemas/DashboardWidgetConfigInsightsVis"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "alarms"
                }
              }
            },
            "then": {
              "properties": {
                "config": {
                  "$ref": "#/components/schemas/DashboardWidgetConfigAlarms"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "errors"
                }
              }
            },
            "then": {
              "properties": {
                "config": {
                  "$ref": "#/components/schemas/DashboardWidgetConfigErrors"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "deployments"
                }
              }
            },
            "then": {
              "properties": {
                "config": {
                  "$ref": "#/components/schemas/DashboardWidgetConfigDeployments"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "checkins"
                }
              }
            },
            "then": {
              "properties": {
                "config": {
                  "$ref": "#/components/schemas/DashboardWidgetConfigCheckins"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "type": {
                  "const": "uptime"
                }
              }
            },
            "then": {
              "properties": {
                "config": {
                  "$ref": "#/components/schemas/DashboardWidgetConfigUptime"
                }
              }
            }
          }
        ],
        "description": "A dashboard widget. Responses leave out empty values (null, \"\", [], {}); false and 0 are kept."
      }
    },
    "parameters": {
      "ProjectId": {
        "name": "project_id",
        "in": "path",
        "required": true,
        "description": "Project ID",
        "schema": {
          "type": "string",
          "example": "Xk9mZp"
        }
      },
      "FaultId": {
        "name": "fault_id",
        "in": "path",
        "required": true,
        "description": "Fault ID",
        "schema": {
          "type": "string",
          "example": "12345"
        }
      },
      "Unmapped": {
        "name": "unmapped",
        "in": "query",
        "description": "Return the backtrace as the client reported it instead of source-mapped. Accepts `true`/`false`, `1`/`0`, `yes`/`no`, `on`/`off`.\n",
        "schema": {
          "type": "boolean",
          "default": false
        }
      },
      "Page": {
        "name": "page",
        "in": "query",
        "description": "Page number (1-indexed)",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "default": 1
        }
      },
      "PerPage": {
        "name": "per_page",
        "in": "query",
        "description": "Items per page",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 25
        }
      },
      "Limit": {
        "name": "limit",
        "in": "query",
        "description": "Maximum items to return. Values above 100 are treated as 100.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 25
        }
      },
      "Before": {
        "name": "before",
        "in": "query",
        "description": "Cursor for fetching older items",
        "schema": {
          "type": "string"
        }
      },
      "After": {
        "name": "after",
        "in": "query",
        "description": "Cursor for fetching newer items",
        "schema": {
          "type": "string"
        }
      },
      "CreatedAfter": {
        "name": "created_after",
        "in": "query",
        "description": "Only items created after this Unix timestamp (seconds, not ISO 8601). Take it from `links.newer`; fractional seconds count.\n",
        "schema": {
          "type": "number",
          "format": "double",
          "example": 1704067200.123456
        }
      },
      "PageCreatedAfter": {
        "name": "created_after",
        "in": "query",
        "description": "With `created_before`, limits the list to a window. Alone, returns the items just after it, newest first. A Unix timestamp (seconds, not ISO 8601). Take it from `links.newer`; fractional seconds count.\n",
        "schema": {
          "type": "number",
          "format": "double",
          "example": 1704067200.123456
        }
      },
      "CreatedBefore": {
        "name": "created_before",
        "in": "query",
        "description": "Only items created before this Unix timestamp (seconds, not ISO 8601). Take it from `links.older`; fractional seconds count.\n",
        "schema": {
          "type": "number",
          "format": "double",
          "example": 1704153600.123456
        }
      },
      "OccurrencePeriod": {
        "name": "period",
        "in": "query",
        "description": "Window to report over. Both ends are inclusive: `hour` gives 61 one-minute buckets, `day` 25 hourly, `week` 8 daily, `month` 31 daily.\n",
        "schema": {
          "type": "string",
          "enum": [
            "hour",
            "day",
            "week",
            "month"
          ],
          "default": "hour"
        }
      },
      "OccurrenceEnvironment": {
        "name": "environment",
        "in": "query",
        "description": "Only count notices from faults in this environment",
        "schema": {
          "type": "string",
          "example": "production"
        }
      },
      "FaultOrder": {
        "name": "order",
        "in": "query",
        "description": "`recent` sorts by last occurrence, `frequent` by occurrence count. Left out, by creation time.\n",
        "schema": {
          "type": "string",
          "enum": [
            "recent",
            "frequent"
          ]
        }
      },
      "Sort": {
        "name": "sort",
        "in": "query",
        "description": "Direction for `order`. Defaults to `desc` for `recent` and `frequent`, `asc` for creation time.\n",
        "schema": {
          "type": "string",
          "enum": [
            "asc",
            "desc"
          ]
        }
      },
      "FaultCreatedAfter": {
        "name": "created_after",
        "in": "query",
        "description": "Only faults first seen after this Unix timestamp (seconds, not ISO 8601).",
        "schema": {
          "type": "number",
          "format": "double"
        }
      },
      "FaultOccurredAfter": {
        "name": "occurred_after",
        "in": "query",
        "description": "Only occurrences after this Unix timestamp (seconds, not ISO 8601). A value before the project's retention window is moved up to it. On the fault list, occurrence counts cover this window.\n",
        "schema": {
          "type": "number",
          "format": "double"
        }
      },
      "FaultOccurredBefore": {
        "name": "occurred_before",
        "in": "query",
        "description": "Only occurrences before this Unix timestamp (seconds, not ISO 8601).\n",
        "schema": {
          "type": "number",
          "format": "double"
        }
      },
      "SearchFilter": {
        "name": "q",
        "in": "query",
        "description": "Search query, in the syntax of the web UI's error search, such as `environment:production`, `is:resolved` or `class:ArgumentError`. Prefix a filter with `-` to negate it. See [Error search](https://docs.honeybadger.io/guides/errors/search/) for the syntax and filters. Filters that need the search index return nothing when it holds no data for the project.\n",
        "schema": {
          "type": "string"
        }
      }
    },
    "responses": {
      "MergedFault": {
        "description": "This fault was merged into another fault. Location is the same resource on the fault it was merged into: `…/faults/<survivor>` for the fault, or the same subresource path and query for occurrences, affected users and notices. Only reads redirect; writes get a 409 `fault_merged`.\n",
        "headers": {
          "Location": {
            "required": true,
            "description": "Absolute URL of the same resource on the surviving fault.",
            "schema": {
              "type": "string",
              "format": "uri"
            }
          }
        }
      },
      "FaultMergedConflict": {
        "description": "This fault was merged into another, so the write wasn't applied. `error.details` names the fault it was merged into.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "fault_merged",
                "message": "This fault was merged into fault 12345",
                "details": {
                  "merged_into": "12345",
                  "location": "https://app.honeybadger.io/v3/projects/Xk9mZp/faults/12345"
                }
              },
              "meta": {
                "request_id": "abc123"
              }
            }
          }
        }
      },
      "ServiceUnavailable": {
        "description": "Temporarily unavailable. Retry shortly.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "service_unavailable",
                "message": "Occurrence counts are unavailable. Try again shortly."
              },
              "meta": {
                "request_id": "abc123"
              }
            }
          }
        }
      },
      "AlarmServiceUnavailable": {
        "description": "Alarms are temporarily unavailable. Retry later.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "service_unavailable",
                "message": "Alarm service unavailable, please try again later"
              },
              "meta": {
                "request_id": "abc123"
              }
            }
          }
        }
      },
      "Unauthorized": {
        "description": "The credential is missing, invalid, expired or revoked (`unauthorized`), or was sent in a way v3 doesn't accept (see the examples).\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "unauthorized": {
                "summary": "Missing, malformed, expired or revoked credential",
                "value": {
                  "error": {
                    "code": "unauthorized",
                    "message": "Access denied"
                  },
                  "meta": {
                    "request_id": "abc123"
                  }
                }
              },
              "unsupported_auth_scheme": {
                "summary": "Sent as HTTP basic, which v3 does not accept",
                "description": "The token sent as the HTTP basic username, as `curl -u` does. v3 takes Bearer only.\n",
                "value": {
                  "error": {
                    "code": "unsupported_auth_scheme",
                    "message": "Send the credential as `Authorization: Bearer <token>`; v3 does not accept HTTP basic"
                  },
                  "meta": {
                    "request_id": "abc123"
                  }
                }
              },
              "credential_in_query": {
                "summary": "Sent as the `auth_token` query parameter",
                "value": {
                  "error": {
                    "code": "credential_in_query",
                    "message": "Credentials must be sent in the Authorization header"
                  },
                  "meta": {
                    "request_id": "abc123"
                  }
                }
              }
            }
          }
        }
      },
      "Forbidden": {
        "description": "The credential isn't allowed to do this. `error.code` says why. An account or project the credential doesn't cover is 404 `not_found`, not 403.\n",
        "headers": {
          "WWW-Authenticate": {
            "description": "Present as `Bearer error=\"insufficient_scope\"` when the code is `insufficient_scope`. Absent for the other reasons.\n",
            "schema": {
              "type": "string"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "access_denied": {
                "summary": "The credential isn't allowed to do this to this record",
                "value": {
                  "error": {
                    "code": "access_denied",
                    "message": "Access denied"
                  },
                  "meta": {
                    "request_id": "abc123"
                  }
                }
              },
              "insufficient_scope": {
                "summary": "The credential lacks the permission this endpoint requires",
                "description": "`details.required_scope` names the missing scope and `details.token_scopes` lists the credential's scopes.\n",
                "value": {
                  "error": {
                    "code": "insufficient_scope",
                    "message": "Insufficient scope",
                    "details": {
                      "required_scope": "faults:write",
                      "token_scopes": [
                        "faults:read",
                        "insights:read"
                      ]
                    }
                  },
                  "meta": {
                    "request_id": "abc123"
                  }
                }
              },
              "requires_user_token": {
                "summary": "The endpoint records who acted, and an account token has nobody",
                "description": "Sending an invitation records who sent it, so it needs a user token. An account token can't, whatever its scopes.\n",
                "value": {
                  "error": {
                    "code": "requires_user_token",
                    "message": "This endpoint records the person who acted, so it requires a user credential rather than an account token"
                  },
                  "meta": {
                    "request_id": "abc123"
                  }
                }
              },
              "project_restricted": {
                "summary": "A project-restricted credential cannot create a project",
                "value": {
                  "error": {
                    "code": "project_restricted",
                    "message": "Project-restricted tokens cannot create projects"
                  },
                  "meta": {
                    "request_id": "abc123"
                  }
                }
              }
            }
          }
        }
      },
      "NotFound": {
        "description": "Resource not found",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "not_found",
                "message": "Resource not found"
              },
              "meta": {
                "request_id": "abc123"
              }
            }
          }
        }
      },
      "ValidationError": {
        "description": "Validation error",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "validation_error",
                "message": "Name can't be blank",
                "details": [
                  {
                    "field": "name",
                    "message": "can't be blank"
                  }
                ]
              },
              "meta": {
                "request_id": "abc123"
              }
            }
          }
        }
      },
      "AmbiguousAccount": {
        "description": "No path names the account, so the API token has to. This is returned when the token covers more than one account and the account a request applies to cannot be determined. Use a token bound to a single account.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "ambiguous_account",
                "message": "This credential covers more than one account, so the account a request applies to is ambiguous. Use a token bound to a single account."
              },
              "meta": {
                "request_id": "abc123"
              }
            }
          }
        }
      },
      "FaultBulkRejected": {
        "description": "The request was refused and nothing was changed. `error.code` and `error.details` say why — see the examples below.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "missing_selection": {
                "summary": "The body named no faults",
                "description": "Name faults with `fault_ids`, narrow them with `q` or a time filter, or pass `all: true` for every fault.\n",
                "value": {
                  "error": {
                    "code": "validation_error",
                    "message": "Name the faults to change with fault_ids, narrow them with a filter, or pass all=true to change every fault in the project.",
                    "details": [
                      {
                        "field": "fault_ids",
                        "message": "required unless a filter or all=true is given"
                      }
                    ]
                  },
                  "meta": {
                    "request_id": "abc123"
                  }
                }
              },
              "unrecognised_filter": {
                "summary": "q contained a filter that matches nothing",
                "description": "An unknown filter is ignored, so the change would have applied to everything the rest of `q` matched. A common mistake is `is:unresolved`; the filter is `-is:resolved`.\n",
                "value": {
                  "error": {
                    "code": "validation_error",
                    "message": "Unrecognised search filters: is:unresolved. They match nothing, so this would have applied to every fault the rest of the query matched.",
                    "details": [
                      {
                        "field": "q",
                        "message": "unrecognised filter is:unresolved"
                      }
                    ]
                  },
                  "meta": {
                    "request_id": "abc123"
                  }
                }
              },
              "unknown_fault_ids": {
                "summary": "`fault_ids` named a fault that isn't in this project",
                "description": "Every ID must be a fault in the project. One that isn't, including a fault merged away since it was listed, fails the whole request.\n",
                "value": {
                  "error": {
                    "code": "validation_error",
                    "message": "fault_ids has unknown ids: 99999",
                    "details": [
                      {
                        "field": "fault_ids",
                        "message": "has unknown ids: 99999"
                      }
                    ]
                  },
                  "meta": {
                    "request_id": "abc123"
                  }
                }
              },
              "ambiguous_account": {
                "summary": "`assignee:me` in q, from a credential that covers more than one account",
                "value": {
                  "error": {
                    "code": "ambiguous_account",
                    "message": "This credential covers more than one account, so \"me\" is ambiguous."
                  },
                  "meta": {
                    "request_id": "abc123"
                  }
                }
              }
            }
          }
        }
      },
      "RateLimitExceeded": {
        "description": "Rate limit exceeded. The limit is per credential owner per hour: a person's tokens share one budget, and an account token uses the account's. Wait `Retry-After` seconds and retry.\n",
        "headers": {
          "Retry-After": {
            "description": "Seconds until the hourly window resets.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "rate_limit_exceeded",
                "message": "Rate limit exceeded"
              },
              "meta": {
                "request_id": "abc123"
              }
            }
          }
        }
      },
      "ConcurrentCreate": {
        "description": "Another project is being created in this account at the same moment (`concurrent_request`), or the rate limit is exceeded (`rate_limit_exceeded`). Nothing was created. Wait `Retry-After` seconds and retry.\n",
        "headers": {
          "Retry-After": {
            "description": "Seconds to wait before retrying.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "concurrent_request",
                "message": "Another project is being created in this account; retry shortly"
              },
              "meta": {
                "request_id": "abc123"
              }
            }
          }
        }
      },
      "StreamsProvisioning": {
        "description": "`stream_ids` was left out (or null) and the project's streams are still being set up, which a new project's are for a short time after it's created (`streams_provisioning`); or the rate limit is exceeded (`rate_limit_exceeded`). Nothing was created. Wait `Retry-After` seconds and retry.\n",
        "headers": {
          "Retry-After": {
            "description": "Seconds to wait before retrying.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "streams_provisioning",
                "message": "The project's streams are still being set up; retry shortly"
              },
              "meta": {
                "request_id": "abc123"
              }
            }
          }
        }
      },
      "BadRequest": {
        "description": "A query parameter is malformed or outside its allowed values. `error.details` names the parameter.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "invalid_parameter",
                "message": "unmapped must be true or false",
                "details": [
                  {
                    "field": "unmapped",
                    "message": "must be true or false"
                  }
                ]
              },
              "meta": {
                "request_id": "abc123"
              }
            }
          }
        }
      }
    }
  }
}
