---
title: "Create a check-in"
method: POST
path: "/projects/{project_id}/check_ins"
tags: ["Check-ins"]
---

# Create a check-in

`POST /projects/{project_id}/check_ins`

## Request

- Base URL: `https://app.honeybadger.io/v3`
- URL: `https://app.honeybadger.io/v3/projects/{project_id}/check_ins`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/honeybadger/apis/honeybadger-api/docs/projects/:project_id/check_ins/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates a new check-in monitor.

## Path parameters

- `project_id` string, required

## Request body

- CheckInCreateInput: Writable check-in attributes. Read-only fields are ignored.
  - `name` string, nullable: Display name. Null clears it; an unnamed check-in shows its ID.
  - `slug` string, nullable: 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.
  - `schedule_type` 'simple' | 'cron': `simple` expects a report every `report_period`. `cron` expects reports on a cron schedule and requires `cron_schedule`.
  - `report_period` string, nullable: 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`.
  - `grace_period` string, nullable: 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.
  - `cron_schedule` string, nullable: Cron expression, required when `schedule_type` is `cron`.
  - `cron_timezone` string, nullable: 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`.

## Response `201`

Check-in created

- object
  - `data` CheckIn, required: 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.
    - `id` string, required
    - `project_id` string, required: ID of the project this check-in belongs to
    - `name` string, nullable, required: Display name
    - `slug` string, nullable, required: URL-safe identifier
    - `schedule_type` 'simple' | 'cron', required: `simple` expects a report every `report_period`. `cron` expects reports on a cron schedule and requires `cron_schedule`.
    - `state` 'pending' | 'reporting' | 'missing' | 'paused', required: Current check-in state
    - `reported_at` string, date-time, nullable, required: When the last report was received
    - `expected_at` string, date-time, nullable, required: When the next report is expected
    - `missed_count` integer, required: Number of consecutive missed reports
    - `grace_period` string, required: 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`.
    - `report_url` string, required: URL to ping when the task completes
    - `created_at` string, date-time, required: When the check-in was created
    - `cron_schedule` string, nullable: Cron expression (for cron schedule type)
    - `cron_timezone` string, required: Timezone for cron schedule, as the web app names time zones. `UTC` on a simple check-in.
    - `report_period` string, nullable: How often a report is expected, for `simple` schedules. Same format as `grace_period`. Null for `cron` schedules, which use `cron_schedule`.
    - `links` WebLinks, required: Links into the Honeybadger web UI
      - `web` string, uri, required: 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.
  - `meta` ResponseMeta
    - `request_id` string: Unique identifier for the request, for correlating with support

## Other responses

- `400`: A query parameter is malformed or outside its allowed values. `error.details` names the parameter.
- `401`: The credential is missing, invalid, expired or revoked (`unauthorized`), or was sent in a way v3 doesn't accept (see the examples).
- `403`: 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.
- `404`: Resource not found
- `422`: Validation error

---

[API](https://skmtc.dev/honeybadger/apis/honeybadger-api.md) - [All operations](https://skmtc.dev/honeybadger/apis/honeybadger-api/llms.txt) - [OpenAPI document](https://skmtc.dev/honeybadger/apis/honeybadger-api/revisions/cbcff53f2c8a?raw)
