Skip to content

Update a check-in

View Markdown
PATCH https://app.honeybadger.io/v3/projects/{project_id}/check_ins/{check_in_id}
Required scope checkins:write

Updates a check-in’s settings. Switching to a cron schedule needs cron on the plan.

Example request
Terminal window
curl -X PATCH "https://app.honeybadger.io/v3/projects/$PROJECT_ID/check_ins/$CHECK_IN_ID" \
-H "Authorization: Bearer $HONEYBADGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"grace_period": "10 minutes"
}'

Parameters

2

Path parameters

FieldTypeDescription
project_id requiredstringProject ID.
check_in_id requiredstringCheck-in ID.

Request body

Read-only fields are ignored.

FieldTypeDescription
namestring | nullDisplay name. Null clears it; an unnamed check-in shows its ID.
slugstring | nullShort 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_typestringSwitching to simple clears cron_schedule and resets cron_timezone to UTC; switching to cron clears report_period.
report_periodstring | nullHow 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_periodstring | nullHow 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. Default: "00:00:00".
cron_schedulestring | nullCron expression, required when schedule_type is cron.
cron_timezonestring | nullTimezone 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. Default: "UTC".

Responses

1

200 Success

Example payload
{
"data": {
"id": "Ci5xWq",
"project_id": "Xk9mZp",
"name": "Daily Backup",
"slug": "daily-backup",
"schedule_type": "simple",
"state": "pending",
"reported_at": "2026-01-01T00:00:00Z",
"expected_at": "2026-01-01T00:00:00Z",
"missed_count": 0,
"grace_period": "10 minutes",
"report_url": "https://api.honeybadger.io/v1/check_in/Ci5xWq",
"created_at": "2026-01-01T00:00:00Z",
"cron_schedule": "0 2 * * *",
"cron_timezone": "Eastern Time (US & Canada)",
"report_period": "1 day",
"links": {
"web": "https://app.honeybadger.io/projects/Xk9mZp"
}
},
"meta": {
"request_id": "6f1c2b0e-8d4a-4f6e-9b2a-3c5d7e9f1a2b"
}
}
Response schema20
FieldTypeDescription
data requiredobjectA 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.
data.id requiredstring
data.project_id requiredstringID of the project this check-in belongs to.
data.name requiredstring | nullDisplay name.
data.slug requiredstring | nullURL-safe identifier.
data.schedule_type requiredstringsimple expects a report every report_period. cron expects reports on a cron schedule and requires cron_schedule. Allowed values: simple, cron. Default: "simple".
data.state requiredstringCurrent check-in state. Allowed values: pending, reporting, missing, paused.
data.reported_at requireddate-time | nullWhen the last report was received.
data.expected_at requireddate-time | nullWhen the next report is expected.
data.missed_count requiredintegerNumber of consecutive missed reports.
data.grace_period requiredstringHow 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.
data.report_url requiredstringURL to ping when the task completes.
data.created_at requireddate-timeWhen the check-in was created.
data.cron_schedulestring | nullCron expression (for cron schedule type).
data.cron_timezone requiredstringTimezone for cron schedule, as the web app names time zones. UTC on a simple check-in.
data.report_periodstring | nullHow often a report is expected, for simple schedules. Same format as grace_period. Null for cron schedules, which use cron_schedule.
data.links requiredobjectLinks into the Honeybadger web UI.
data.links.web requireduriThe 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.
metaobject
meta.request_idstringUnique identifier for the request, for correlating with support.

Errors

5

400 Bad Request

A query parameter is malformed or outside its allowed values. error.details names the parameter.

Example payload
{
"error": {
"code": "invalid_parameter",
"message": "unmapped must be true or false",
"details": [
{
"field": "unmapped",
"message": "must be true or false"
}
]
},
"meta": {
"request_id": "abc123"
}
}
Response schema6
FieldTypeDescription
error requiredobject
error.code requiredstringMachine-readable code. Branch on this, not the message. Allowed values: 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.
error.message requiredstringHuman-readable explanation.
error.detailsarray<object> | objectA 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.
metaobject
meta.request_idstringUnique identifier for the request, for correlating with support.

401 Unauthorized

The credential is missing, invalid, expired or revoked (unauthorized), or was sent in a way v3 doesn’t accept (see the examples).

Example payload: unauthorized (Missing, malformed, expired or revoked credential)
{
"error": {
"code": "unauthorized",
"message": "Access denied"
},
"meta": {
"request_id": "abc123"
}
}
Example payload: unsupported_auth_scheme (Sent as HTTP basic, which v3 does not accept)
{
"error": {
"code": "unsupported_auth_scheme",
"message": "Send the credential as `Authorization: Bearer <token>`; v3 does not accept HTTP basic"
},
"meta": {
"request_id": "abc123"
}
}
Example payload: credential_in_query (Sent as the `auth_token` query parameter)
{
"error": {
"code": "credential_in_query",
"message": "Credentials must be sent in the Authorization header"
},
"meta": {
"request_id": "abc123"
}
}
Response schema6
FieldTypeDescription
error requiredobject
error.code requiredstringMachine-readable code. Branch on this, not the message. Allowed values: 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.
error.message requiredstringHuman-readable explanation.
error.detailsarray<object> | objectA 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.
metaobject
meta.request_idstringUnique identifier for the request, for correlating with support.

403 Forbidden

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.

Example payload: access_denied (The credential isn't allowed to do this to this record)
{
"error": {
"code": "access_denied",
"message": "Access denied"
},
"meta": {
"request_id": "abc123"
}
}
Example payload: insufficient_scope (The credential lacks the permission this endpoint requires)
{
"error": {
"code": "insufficient_scope",
"message": "Insufficient scope",
"details": {
"required_scope": "faults:write",
"token_scopes": [
"faults:read",
"insights:read"
]
}
},
"meta": {
"request_id": "abc123"
}
}
Example payload: requires_user_token (The endpoint records who acted, and an account token has nobody)
{
"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"
}
}
Example payload: project_restricted (A project-restricted credential cannot create a project)
{
"error": {
"code": "project_restricted",
"message": "Project-restricted tokens cannot create projects"
},
"meta": {
"request_id": "abc123"
}
}
Response schema6
FieldTypeDescription
error requiredobject
error.code requiredstringMachine-readable code. Branch on this, not the message. Allowed values: 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.
error.message requiredstringHuman-readable explanation.
error.detailsarray<object> | objectA 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.
metaobject
meta.request_idstringUnique identifier for the request, for correlating with support.

404 Not Found

Resource not found

Example payload
{
"error": {
"code": "not_found",
"message": "Resource not found"
},
"meta": {
"request_id": "abc123"
}
}
Response schema6
FieldTypeDescription
error requiredobject
error.code requiredstringMachine-readable code. Branch on this, not the message. Allowed values: 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.
error.message requiredstringHuman-readable explanation.
error.detailsarray<object> | objectA 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.
metaobject
meta.request_idstringUnique identifier for the request, for correlating with support.

422 Unprocessable Content

Validation error

Example payload
{
"error": {
"code": "validation_error",
"message": "Name can't be blank",
"details": [
{
"field": "name",
"message": "can't be blank"
}
]
},
"meta": {
"request_id": "abc123"
}
}
Response schema6
FieldTypeDescription
error requiredobject
error.code requiredstringMachine-readable code. Branch on this, not the message. Allowed values: 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.
error.message requiredstringHuman-readable explanation.
error.detailsarray<object> | objectA 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.
metaobject
meta.request_idstringUnique identifier for the request, for correlating with support.