> ## Documentation Index
> Fetch the complete documentation index at: https://checkly-422f444a-mintlify-f27640bd.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a multi-step check

> Creates a new Multi-Step check. Will return a `402` when you are over the limit of your plan.
    When using the `globalAlertSetting`, the `alertSetting` can be `null`



## OpenAPI

````yaml post /v1/checks/multistep
openapi: 3.0.0
info:
  title: Checkly Public API
  version: v1
  description: >-
    These are the docs for the newly released Checkly Public API. If you have
    any questions, please do not hesitate to get in touch with us.
servers:
  - url: https://api.checklyhq.com
security:
  - Bearer: []
tags: []
paths:
  /v1/checks/multistep:
    post:
      tags:
        - Checks
      summary: Create a multi-step check
      description: >-
        Creates a new Multi-Step check. Will return a `402` when you are over
        the limit of your plan.
            When using the `globalAlertSetting`, the `alertSetting` can be `null`
      operationId: postV1ChecksMultistep
      parameters:
        - schema:
            type: boolean
            description: >-
              Determines whether a new check will automatically be added as a
              subscriber to all existing alert channels when it gets created.
            default: true
          required: false
          description: >-
            Determines whether a new check will automatically be added as a
            subscriber to all existing alert channels when it gets created.
          name: autoAssignAlerts
          in: query
        - schema:
            type: string
            format: uuid
            description: >-
              Your Checkly account ID, you can find it at
              https://app.checklyhq.com/settings/account/general
          required: false
          description: >-
            Your Checkly account ID, you can find it at
            https://app.checklyhq.com/settings/account/general
          name: x-checkly-account
          in: header
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChecksV1MultiStepCheckCreate'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChecksV1MultiStepCheck'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '402':
          description: Payment Required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
components:
  schemas:
    ChecksV1MultiStepCheckCreate:
      type: object
      properties:
        name:
          type: string
          minLength: 1
        activated:
          type: boolean
          default: true
        muted:
          type: boolean
          default: false
        doubleCheck:
          type: boolean
          default: true
        shouldFail:
          type: boolean
          default: false
        locations:
          type: array
          nullable: true
          items:
            type: string
            enum:
              - us-east-1
              - us-east-2
              - us-west-1
              - us-west-2
              - ca-central-1
              - sa-east-1
              - eu-west-1
              - eu-central-1
              - eu-west-2
              - eu-west-3
              - eu-north-1
              - eu-south-1
              - me-south-1
              - ap-southeast-1
              - ap-northeast-1
              - ap-east-1
              - ap-southeast-2
              - ap-southeast-3
              - ap-northeast-2
              - ap-northeast-3
              - ap-south-1
              - af-south-1
          default: []
        tags:
          type: array
          items:
            type: string
            minLength: 1
          default: []
        alertSettings:
          $ref: '#/components/schemas/ChecksV1AlertSettingsCreate'
        useGlobalAlertSettings:
          type: boolean
          default: true
        groupId:
          type: number
          nullable: true
          default: null
        groupOrder:
          type: number
          nullable: true
          minimum: 0
          default: null
        runtimeId:
          type: string
          nullable: true
          enum:
            - '2026.04'
            - '2025.04'
            - '2024.09'
            - '2024.02'
            - '2023.09'
            - '2023.02'
            - '2022.10'
            - null
          default: null
        alertChannelSubscriptions:
          type: array
          items:
            $ref: '#/components/schemas/ChecksV1AlertChannelSubscription'
        retryStrategy:
          $ref: '#/components/schemas/ChecksV1RetryStrategy'
        triggerIncident:
          $ref: '#/components/schemas/ChecksV1TriggerIncident'
        runParallel:
          type: boolean
          default: false
        description:
          type: string
          nullable: true
          maxLength: 510
          default: null
        intent:
          type: object
          nullable: true
          properties:
            goal:
              type: string
              minLength: 1
              maxLength: 2000
              description: The user or system outcome this check protects.
            requiredOutcomes:
              type: array
              items:
                type: string
                minLength: 1
                maxLength: 1000
              maxItems: 20
              default: []
              description: Observable outcomes the check must continue to prove.
            mustPreserve:
              type: array
              items:
                type: string
                minLength: 1
                maxLength: 1000
              maxItems: 20
              default: []
              description: Guardrails an AI repair must not weaken or bypass.
          default: null
          required:
            - goal
          additionalProperties: false
        aiAutoRepairEnabled:
          type: boolean
          nullable: true
          default: null
        checkType:
          type: string
          enum:
            - MULTI_STEP
          default: MULTI_STEP
        environmentVariables:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/ChecksV1EnvironmentVariable'
          maxItems: 200
        frequency:
          type: integer
          enum:
            - 1
            - 2
            - 5
            - 10
            - 15
            - 30
            - 60
            - 120
            - 180
            - 360
            - 720
            - 1440
          default: 10
        script:
          type: string
          nullable: true
          minLength: 1
        scriptPath:
          type: string
          nullable: true
          minLength: 1
        privateLocations:
          type: array
          nullable: true
          items:
            type: string
            minLength: 1
        dependencies:
          $ref: '#/components/schemas/ChecksV1DependencyList'
      required:
        - name
        - script
    ChecksV1MultiStepCheck:
      type: object
      properties:
        name:
          type: string
          minLength: 1
        activated:
          type: boolean
          default: true
        muted:
          type: boolean
          default: false
        doubleCheck:
          type: boolean
          default: true
        shouldFail:
          type: boolean
          default: false
        locations:
          type: array
          nullable: true
          items:
            type: string
            enum:
              - us-east-1
              - us-east-2
              - us-west-1
              - us-west-2
              - ca-central-1
              - sa-east-1
              - eu-west-1
              - eu-central-1
              - eu-west-2
              - eu-west-3
              - eu-north-1
              - eu-south-1
              - me-south-1
              - ap-southeast-1
              - ap-northeast-1
              - ap-east-1
              - ap-southeast-2
              - ap-southeast-3
              - ap-northeast-2
              - ap-northeast-3
              - ap-south-1
              - af-south-1
          default: []
        tags:
          type: array
          items:
            type: string
            minLength: 1
          default: []
        alertSettings:
          $ref: '#/components/schemas/ChecksV1AlertSettings'
        useGlobalAlertSettings:
          type: boolean
          default: true
        groupId:
          type: number
          nullable: true
          default: null
        groupOrder:
          type: number
          nullable: true
          minimum: 0
          default: null
        runtimeId:
          type: string
          nullable: true
          enum:
            - '2026.04'
            - '2025.04'
            - '2024.09'
            - '2024.02'
            - '2023.09'
            - '2023.02'
            - '2022.10'
            - null
          default: null
        alertChannelSubscriptions:
          type: array
          items:
            $ref: '#/components/schemas/ChecksV1AlertChannelSubscription'
        retryStrategy:
          $ref: '#/components/schemas/ChecksV1RetryStrategy'
        triggerIncident:
          $ref: '#/components/schemas/ChecksV1TriggerIncident'
        runParallel:
          type: boolean
          default: false
        description:
          type: string
          nullable: true
          maxLength: 500
          default: null
        intent:
          type: object
          nullable: true
          properties:
            goal:
              type: string
              minLength: 1
              maxLength: 2000
              description: The user or system outcome this check protects.
            requiredOutcomes:
              type: array
              items:
                type: string
                minLength: 1
                maxLength: 1000
              maxItems: 20
              default: []
              description: Observable outcomes the check must continue to prove.
            mustPreserve:
              type: array
              items:
                type: string
                minLength: 1
                maxLength: 1000
              maxItems: 20
              default: []
              description: Guardrails an AI repair must not weaken or bypass.
          default: null
          required:
            - goal
          additionalProperties: false
        aiAutoRepairEnabled:
          type: boolean
          nullable: true
          default: null
        id:
          type: string
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          nullable: true
          format: date-time
        alertChannels:
          $ref: '#/components/schemas/ChecksV1AlertChannels'
        project:
          $ref: '#/components/schemas/ChecksV1CheckProject'
        logicalId:
          type: string
          nullable: true
          description: >-
            The check's logical ID within the managing project, or null when it
            is not managed by code.
        member:
          type: boolean
          nullable: true
          description: >-
            True when the project owns this check, false when it merely
            references a check owned outside the project. Null when not managed
            by code. The same relationship appears structurally in
            `projectBindings`: an owning project under `projectBindings.owner`,
            a referencing one under `projectBindings.references`.
        pending:
          type: boolean
          nullable: true
          description: >-
            True when the binding is reserved by an import plan that has not
            been deployed yet. Null when not managed by code.
        projectBindings:
          $ref: '#/components/schemas/ProjectBindingsV1'
        privateLocations:
          type: array
          nullable: true
          items:
            type: string
            minLength: 1
        checkType:
          type: string
          enum:
            - MULTI_STEP
        frequency:
          type: integer
          enum:
            - 1
            - 2
            - 5
            - 10
            - 15
            - 30
            - 60
            - 120
            - 180
            - 360
            - 720
            - 1440
          default: 10
        script:
          type: string
          nullable: true
        environmentVariables:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/ChecksV1EnvironmentVariable'
          maxItems: 200
      required:
        - name
        - script
    ApiError:
      type: object
      properties:
        statusCode:
          type: number
        error:
          type: string
        message:
          type: string
      required:
        - statusCode
        - error
        - message
    ChecksV1AlertSettingsCreate:
      type: object
      properties:
        escalationType:
          type: string
          enum:
            - RUN_BASED
            - TIME_BASED
          default: RUN_BASED
        reminders:
          type: object
          properties:
            amount:
              type: integer
              enum:
                - 0
                - 1
                - 2
                - 3
                - 4
                - 5
                - 100000
              default: 0
            interval:
              type: integer
              enum:
                - 1
                - 2
                - 3
                - 4
                - 5
                - 10
                - 15
                - 30
              default: 5
        sslCertificates:
          type: object
          properties:
            enabled:
              type: boolean
            alertThreshold:
              type: integer
        runBasedEscalation:
          $ref: '#/components/schemas/ChecksV1AlertSettingsRunBasedEscalation'
        timeBasedEscalation:
          $ref: '#/components/schemas/ChecksV1AlertSettingsTimeBasedEscalation'
        parallelRunFailureThreshold:
          type: object
          properties:
            enabled:
              type: boolean
              default: false
            percentage:
              type: integer
              enum:
                - 10
                - 20
                - 30
                - 40
                - 50
                - 60
                - 70
                - 80
                - 90
                - 100
              default: 10
      default:
        escalationType: RUN_BASED
        runBasedEscalation:
          failedRunThreshold: 1
        reminders:
          amount: 0
          interval: 5
        parallelRunFailureThreshold:
          enabled: false
          percentage: 10
    ChecksV1AlertChannelSubscription:
      type: object
      properties:
        alertChannelId:
          type: number
        activated:
          type: boolean
      required:
        - alertChannelId
        - activated
    ChecksV1RetryStrategy:
      type: object
      nullable: true
      properties:
        type:
          type: string
          enum:
            - FIXED
            - LINEAR
            - EXPONENTIAL
            - SINGLE_RETRY
        baseBackoffSeconds:
          type: number
          default: 60
        sameRegion:
          type: boolean
          default: true
        maxRetries:
          type: number
          minimum: 1
          maximum: 10
        maxDurationSeconds:
          type: number
          minimum: 0
          maximum: 600
        onlyOn:
          type: array
          items:
            type: string
            enum:
              - NETWORK_ERROR
      required:
        - type
    ChecksV1TriggerIncident:
      type: object
      nullable: true
      properties:
        serviceId:
          type: string
          minLength: 1
          format: uuid
        severity:
          type: string
          enum:
            - CRITICAL
            - MAJOR
            - MEDIUM
            - MINOR
        name:
          type: string
        description:
          type: string
        notifySubscribers:
          type: boolean
      required:
        - serviceId
        - severity
        - name
        - description
        - notifySubscribers
    ChecksV1EnvironmentVariable:
      type: object
      properties:
        key:
          type: string
          minLength: 1
        value:
          type: string
          nullable: true
        locked:
          type: boolean
          default: false
        secret:
          type: boolean
          default: false
      required:
        - key
        - value
    ChecksV1DependencyList:
      type: array
      nullable: true
      items:
        $ref: '#/components/schemas/ChecksV1Dependency'
    ChecksV1AlertSettings:
      type: object
      nullable: true
      properties:
        escalationType:
          type: string
          enum:
            - RUN_BASED
            - TIME_BASED
          default: RUN_BASED
        reminders:
          type: object
          properties:
            amount:
              type: integer
              enum:
                - 0
                - 1
                - 2
                - 3
                - 4
                - 5
                - 100000
              default: 0
            interval:
              type: integer
              enum:
                - 1
                - 2
                - 3
                - 4
                - 5
                - 10
                - 15
                - 30
              default: 5
        sslCertificates:
          type: object
          properties:
            enabled:
              type: boolean
            alertThreshold:
              type: integer
        runBasedEscalation:
          $ref: '#/components/schemas/ChecksV1AlertSettingsRunBasedEscalation'
        timeBasedEscalation:
          $ref: '#/components/schemas/ChecksV1AlertSettingsTimeBasedEscalation'
        parallelRunFailureThreshold:
          type: object
          properties:
            enabled:
              type: boolean
              default: false
            percentage:
              type: integer
              enum:
                - 10
                - 20
                - 30
                - 40
                - 50
                - 60
                - 70
                - 80
                - 90
                - 100
              default: 10
      default:
        escalationType: RUN_BASED
        runBasedEscalation:
          failedRunThreshold: 1
        reminders:
          amount: 0
          interval: 5
        parallelRunFailureThreshold:
          enabled: false
          percentage: 10
    ChecksV1AlertChannels:
      type: object
      nullable: true
      properties:
        email:
          type: array
          items:
            $ref: '#/components/schemas/ChecksV1AlertEmail'
        webhook:
          type: array
          items:
            $ref: '#/components/schemas/ChecksV1AlertWebhook'
        slack:
          type: array
          items:
            $ref: '#/components/schemas/ChecksV1AlertSlack'
        sms:
          type: array
          items:
            $ref: '#/components/schemas/ChecksV1AlertSms'
    ChecksV1CheckProject:
      type: object
      nullable: true
      properties:
        id:
          type: string
          description: The ID of the project that manages this check.
        logicalId:
          type: string
          description: The logical ID of the managing project, as declared in code.
        name:
          type: string
          description: The name of the managing project.
      description: >-
        The project that manages this check, or null when the check is not
        managed by code. When a check has more than one binding, this reports
        the preferred one.
    ProjectBindingsV1:
      type: object
      description: >-
        The Checkly CLI projects that manage this resource. `owner` is null and
        `references` empty when the resource is not managed by code.
      properties:
        owner:
          $ref: '#/components/schemas/ProjectBindingOwnerV1'
        references:
          $ref: '#/components/schemas/ProjectBindingReferencesV1'
      required:
        - owner
        - references
    ChecksV1AlertSettingsRunBasedEscalation:
      type: object
      properties:
        failedRunThreshold:
          type: integer
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
    ChecksV1AlertSettingsTimeBasedEscalation:
      type: object
      properties:
        minutesFailingThreshold:
          type: integer
          enum:
            - 5
            - 10
            - 15
            - 30
    ChecksV1Dependency:
      type: object
      properties:
        path:
          type: string
          minLength: 1
          maxLength: 1000
        content:
          type: string
          minLength: 1
      required:
        - path
        - content
    ChecksV1AlertEmail:
      type: object
      properties:
        address:
          type: string
          minLength: 1
          default: ''
    ChecksV1AlertWebhook:
      type: object
      properties:
        name:
          type: string
          minLength: 1
          default: ''
        url:
          type: string
          minLength: 1
          default: ''
        method:
          type: string
          nullable: true
          minLength: 1
          default: POST
        headers:
          type: array
          items:
            $ref: '#/components/schemas/ChecksV1KeyValue'
          default: []
        queryParameters:
          type: array
          items:
            $ref: '#/components/schemas/ChecksV1KeyValue'
          default: []
    ChecksV1AlertSlack:
      type: object
      properties:
        url:
          type: string
          minLength: 1
          default: ''
    ChecksV1AlertSms:
      type: object
      properties:
        number:
          type: string
          minLength: 1
          default: ''
        name:
          type: string
      required:
        - name
    ProjectBindingOwnerV1:
      type: object
      description: >-
        The project that owns this resource — the one whose deploy can delete
        it. Null when no project owns it, including when other projects merely
        reference it. In the rare case that several projects hold an ownership
        record for one resource, this reports the preferred one and the rest are
        omitted.
      nullable: true
      properties:
        project:
          $ref: '#/components/schemas/BindingProjectV1'
        binding:
          $ref: '#/components/schemas/ProjectBindingDetailsV1'
      required:
        - project
        - binding
    ProjectBindingReferencesV1:
      type: array
      description: >-
        Projects that use this resource without owning it; their deploys leave
        it alone. Empty when there are none.
      items:
        $ref: '#/components/schemas/ProjectBindingV1'
    ChecksV1KeyValue:
      type: object
      properties:
        key:
          type: string
          minLength: 1
        value:
          type: string
        locked:
          type: boolean
          default: false
      required:
        - key
        - value
    BindingProjectV1:
      type: object
      description: The project this binding is to.
      properties:
        id:
          type: string
          description: The ID of the project.
        logicalId:
          type: string
          description: The logical ID of the project, as declared in code.
        name:
          type: string
          description: The name of the project.
      required:
        - id
        - logicalId
        - name
    ProjectBindingDetailsV1:
      type: object
      description: The resource's side of this binding.
      properties:
        logicalId:
          type: string
          description: The resource's logical ID within this project, as declared in code.
          example: homepage-check
        pending:
          type: boolean
          description: >-
            True when the binding is reserved by an import plan that has not
            been deployed yet.
      required:
        - logicalId
        - pending
    ProjectBindingV1:
      type: object
      properties:
        project:
          $ref: '#/components/schemas/BindingProjectV1'
        binding:
          $ref: '#/components/schemas/ProjectBindingDetailsV1'
      required:
        - project
        - binding
  securitySchemes:
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: Bearer
      description: >-
        The Checkly Public API uses API keys to authenticate requests. You can
        get the API Key
        [here](https://app.checklyhq.com/settings/user/api-keys). Your API key
        is like a password: keep it secure!

        Authentication to the API is performed using the Bearer auth method in
        the Authorization header and using the account ID.

        For example, set **Authorization** header while using cURL: `curl -H
        "Authorization: Bearer [apiKey]" "X-Checkly-Account: [accountId]"` 

````