All Quiet Incidents API

Create, retrieve, search, update (PATCH), and delete incidents, including severity, status, team assignment, user assignments, and attributes. A Markdown rendering of any incident is also available.

OpenAPI Specification

allquiet-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: All Quiet Public API
  description: >-
    The All Quiet Public REST API lets you manage incident management and on-call
    resources programmatically. It is available in the US (https://allquiet.app/api)
    and EU (https://allquiet.eu/api) regions and requires a Pro or Enterprise plan.
    Authenticate with an organization API key sent either as an `X-Api-Key` header
    or as a `Authorization: Bearer` token. This document captures the documented
    Incidents, Inbound Integrations, Teams, On-Call Schedules, and Webhooks
    (outbound integrations) surfaces of the public v1 API.
  termsOfService: https://allquiet.app/legal/terms
  contact:
    name: All Quiet Support
    email: support@allquiet.app
  version: v1
servers:
  - url: https://allquiet.app/api
    description: US region
  - url: https://allquiet.eu/api
    description: EU region
security:
  - ApiKeyHeader: []
  - BearerAuth: []
tags:
  - name: Incidents
    description: Create, search, read, update, and delete incidents.
  - name: Inbound Integrations
    description: Integrations that turn external signals into All Quiet incidents.
  - name: Teams
    description: Teams, team membership, and organization membership (users).
  - name: On-Call Schedules
    description: On-call lookups, escalation tiers, and on-call overrides.
  - name: Webhooks
    description: Outbound integrations that forward incidents to third-party platforms.
paths:
  /public/v1/incident:
    post:
      tags:
        - Incidents
      summary: Create an incident
      description: Creates a new incident with a title, severity, status, and optional team and user assignments.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IncidentCreateRequest'
      responses:
        '200':
          description: The created incident.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Incident'
  /public/v1/incident/search/list:
    get:
      tags:
        - Incidents
      summary: Search incidents
      description: Returns a paged list of incidents filtered by status, severity, team, user, integration, and time range.
      parameters:
        - { name: Statuses, in: query, schema: { type: array, items: { type: string } } }
        - { name: Severities, in: query, schema: { type: array, items: { type: string } } }
        - { name: IntegrationIds, in: query, schema: { type: array, items: { type: string } } }
        - { name: TeamIds, in: query, schema: { type: array, items: { type: string } } }
        - { name: UserIds, in: query, schema: { type: array, items: { type: string } } }
        - { name: SearchTerm, in: query, schema: { type: string } }
        - { name: IsArchived, in: query, schema: { type: boolean } }
        - { name: CreatedFrom, in: query, schema: { type: string, format: date-time } }
        - { name: CreatedUntil, in: query, schema: { type: string, format: date-time } }
        - { name: Limit, in: query, schema: { type: integer } }
        - { name: Offset, in: query, schema: { type: integer } }
        - { name: SortBy, in: query, schema: { type: string } }
        - { name: Asc, in: query, schema: { type: boolean } }
      responses:
        '200':
          description: A paged list of incidents.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Incident'
  /public/v1/incident/search/{incidentId}:
    get:
      tags:
        - Incidents
      summary: Get an incident
      parameters:
        - name: incidentId
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: The requested incident.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Incident'
  /public/v1/incident/search/{incidentId}/markdown:
    get:
      tags:
        - Incidents
      summary: Get an incident as Markdown
      parameters:
        - name: incidentId
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: A Markdown rendering of the incident.
          content:
            text/markdown:
              schema: { type: string }
  /public/v1/incident/{incidentId}:
    patch:
      tags:
        - Incidents
      summary: Update an incident
      description: Applies a list of patch operations (e.g. change status, severity, assignments) to an incident.
      parameters:
        - name: incidentId
          in: path
          required: true
          schema: { type: string }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IncidentPatchRequest'
      responses:
        '200':
          description: The updated incident.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Incident'
    delete:
      tags:
        - Incidents
      summary: Delete an incident
      parameters:
        - name: incidentId
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: The incident was deleted.
  /public/v1/inbound-integration:
    post:
      tags:
        - Inbound Integrations
      summary: Create an inbound integration
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InboundIntegrationCreateRequest'
      responses:
        '200':
          description: The created inbound integration.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InboundIntegration'
  /public/v1/inbound-integration/{id}:
    get:
      tags: [Inbound Integrations]
      summary: Get an inbound integration
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      responses:
        '200':
          description: The requested inbound integration.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InboundIntegration'
    put:
      tags: [Inbound Integrations]
      summary: Update an inbound integration
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InboundIntegrationCreateRequest'
      responses:
        '200':
          description: The updated inbound integration.
    delete:
      tags: [Inbound Integrations]
      summary: Delete an inbound integration
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      responses:
        '200':
          description: The inbound integration was deleted.
  /public/v1/inbound-integration/types:
    get:
      tags: [Inbound Integrations]
      summary: List inbound integration types
      responses:
        '200':
          description: The supported inbound integration types.
  /public/v1/inbound-integration/search/list:
    get:
      tags: [Inbound Integrations]
      summary: Search inbound integrations
      responses:
        '200':
          description: A list of inbound integrations.
  /public/v1/team:
    post:
      tags: [Teams]
      summary: Create a team
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TeamRequest'
      responses:
        '200':
          description: The created team.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Team'
  /public/v1/team/{id}:
    get:
      tags: [Teams]
      summary: Get a team
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      responses:
        '200':
          description: The requested team.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Team'
    put:
      tags: [Teams]
      summary: Update a team
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TeamRequest'
      responses:
        '200':
          description: The updated team.
    delete:
      tags: [Teams]
      summary: Delete a team
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      responses:
        '200':
          description: The team was deleted.
  /public/v1/team/search/list:
    get:
      tags: [Teams]
      summary: Search teams
      responses:
        '200':
          description: A list of teams.
  /public/v1/team-membership:
    post:
      tags: [Teams]
      summary: Add a team membership
      responses:
        '200':
          description: The created team membership.
  /public/v1/organization-membership:
    post:
      tags: [Teams]
      summary: Add an organization membership (user)
      responses:
        '200':
          description: The created organization membership.
  /public/v1/user:
    post:
      tags: [Teams]
      summary: Create a user
      responses:
        '200':
          description: The created user.
  /public/v1/on-call:
    get:
      tags: [On-Call Schedules]
      summary: Get who is on call
      description: Returns the users on call for the given teams or users at the supplied timestamp (defaults to now).
      parameters:
        - { name: TeamIds, in: query, schema: { type: array, items: { type: string } } }
        - { name: UserIds, in: query, schema: { type: array, items: { type: string } } }
        - { name: Timestamp, in: query, schema: { type: string, format: date-time } }
      responses:
        '200':
          description: The on-call result set.
  /public/v1/team-escalations:
    post:
      tags: [On-Call Schedules]
      summary: Create team escalations
      description: Defines escalation tiers, schedules, and rotations for a team.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TeamEscalationsRequest'
      responses:
        '200':
          description: The created team escalations.
  /public/v1/team-escalations/{id}:
    get:
      tags: [On-Call Schedules]
      summary: Get team escalations
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      responses:
        '200':
          description: The requested team escalations.
    put:
      tags: [On-Call Schedules]
      summary: Update team escalations
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TeamEscalationsRequest'
      responses:
        '200':
          description: The updated team escalations.
    delete:
      tags: [On-Call Schedules]
      summary: Delete team escalations
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      responses:
        '200':
          description: The team escalations were deleted.
  /public/v1/on-call-override:
    post:
      tags: [On-Call Schedules]
      summary: Create an on-call override
      description: Overrides who is on call for a team and escalation tier over a time window.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OnCallOverrideRequest'
      responses:
        '200':
          description: The created on-call override.
  /public/v1/on-call-override/{id}:
    get:
      tags: [On-Call Schedules]
      summary: Get an on-call override
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      responses:
        '200':
          description: The requested on-call override.
    put:
      tags: [On-Call Schedules]
      summary: Update an on-call override
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OnCallOverrideRequest'
      responses:
        '200':
          description: The updated on-call override.
    delete:
      tags: [On-Call Schedules]
      summary: Delete an on-call override
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      responses:
        '200':
          description: The on-call override was deleted.
  /public/v1/outbound-integration:
    post:
      tags: [Webhooks]
      summary: Create an outbound integration
      description: Creates an outbound integration (e.g. generic webhook, Slack, Mattermost) that forwards incidents to a third-party platform.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OutboundIntegrationCreateRequest'
      responses:
        '200':
          description: The created outbound integration.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OutboundIntegration'
  /public/v1/outbound-integration/{id}:
    get:
      tags: [Webhooks]
      summary: Get an outbound integration
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      responses:
        '200':
          description: The requested outbound integration.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OutboundIntegration'
    put:
      tags: [Webhooks]
      summary: Update an outbound integration
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OutboundIntegrationCreateRequest'
      responses:
        '200':
          description: The updated outbound integration.
    delete:
      tags: [Webhooks]
      summary: Delete an outbound integration
      parameters:
        - { name: id, in: path, required: true, schema: { type: string } }
      responses:
        '200':
          description: The outbound integration was deleted.
  /public/v1/outbound-integration/types:
    get:
      tags: [Webhooks]
      summary: List outbound integration types
      responses:
        '200':
          description: The supported outbound integration types.
components:
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: X-Api-Key
      description: Organization API key sent in the X-Api-Key header.
    BearerAuth:
      type: http
      scheme: bearer
      description: Organization API key sent as a Bearer token in the Authorization header.
  schemas:
    IncidentCreateRequest:
      type: object
      required:
        - title
        - severity
        - status
      properties:
        title: { type: string }
        message: { type: string }
        messageIsPublic: { type: boolean }
        integrationId: { type: string }
        teamIds:
          type: array
          items: { type: string }
        status: { type: string, description: 'Incident status, e.g. Open, Resolved.' }
        severity: { type: string, description: 'Incident severity, e.g. Critical, Warning, Minor.' }
        serviceIds:
          type: array
          items: { type: string }
        excludeFromUptimeCalculation: { type: boolean }
        userAssignments:
          type: array
          items: { type: object }
        attributes:
          type: array
          items: { type: object }
        publicComment: { type: string }
    IncidentPatchRequest:
      type: object
      required:
        - operations
      properties:
        operations:
          type: array
          description: A list of patch operations to apply to the incident.
          items: { type: object }
    Incident:
      type: object
      properties:
        id: { type: string }
        title: { type: string }
        status: { type: string }
        severity: { type: string }
        teamIds:
          type: array
          items: { type: string }
        createdAt: { type: string, format: date-time }
    InboundIntegrationCreateRequest:
      type: object
      required:
        - displayName
        - teamId
        - type
      properties:
        displayName: { type: string }
        teamId: { type: string }
        type: { type: string, description: 'Integration type, e.g. Webhook, Datadog, Prometheus.' }
        isMuted: { type: boolean }
        isInMaintenance: { type: boolean }
        snoozeSettings: { type: object }
        webhookAuthentication: { type: object }
        integrationSettings: { type: object }
        labels:
          type: array
          items: { type: string }
    InboundIntegration:
      type: object
      properties:
        id: { type: string }
        displayName: { type: string }
        teamId: { type: string }
        type: { type: string }
    TeamRequest:
      type: object
      required:
        - displayName
        - timeZoneId
      properties:
        displayName: { type: string }
        timeZoneId: { type: string }
        labels:
          type: array
          items: { type: string }
        incidentEngagementReportSettings: { type: object }
        calendarPublishingSettings: { type: object }
    Team:
      type: object
      properties:
        id: { type: string }
        displayName: { type: string }
        timeZoneId: { type: string }
    TeamEscalationsRequest:
      type: object
      properties:
        teamId: { type: string }
        tiers:
          type: array
          description: Escalation tiers with their schedules and rotations.
          items: { type: object }
    OnCallOverrideRequest:
      type: object
      required:
        - type
        - userId
      properties:
        userId: { type: string }
        teamId: { type: string }
        escalationTier: { type: integer }
        replacementUserIds:
          type: array
          items: { type: string }
        start: { type: string, format: date-time }
        end: { type: string, format: date-time }
        type: { type: string }
    OutboundIntegrationCreateRequest:
      type: object
      required:
        - displayName
        - teamId
        - type
      properties:
        displayName: { type: string }
        teamId: { type: string }
        type: { type: string, description: 'Integration type, e.g. Webhook, Slack, Mattermost.' }
        triggersOnlyOnForwarded: { type: boolean }
        skipUpdatingAfterForwarding: { type: boolean }
        teamConnectionSettings: { type: object }
        slackSettings: { type: object }
        mattermostSettings: { type: object }
    OutboundIntegration:
      type: object
      properties:
        id: { type: string }
        displayName: { type: string }
        teamId: { type: string }
        type: { type: string }