In the early beta of the Crons product, Check-In endpoints existed under the sentry.io/api/0/
API namespace. This namespace is not designed for ingestion-level traffic, so we have since moved Check-In APIs to use Relay for ingestion of Check-In events.
If you're using legacy endpoints for Crons, migrate to the new endpoints to avoid issues.
The Legacy endpoints are deprecated and will be removed in the future, however a date has not yet been set for their removal. We will communicate a date when one is set.
The SDKs do not utilize our legacy endpoints.
Sentry CLI
Versions of the sentry-cli
before v2.19.0 are using the legacy API endpoints. Please upgrade to the latest version.
If your CLI is configured with an auth token, it will use the legacy API endpoints. Please update your CLI configuration to utilize your project's DSN instead. Refer to the configuration guide for more information.
When using the HTTP endpoints, you can differentiate them like so:
# ❌ Legacy endpoints
https://sentry.io/api/0/organizations/example-org/monitors/<monitor_slug/
# ❌ Legacy endpoint without organization context
https://sentry.io/api/0/monitors/<monitor_slug/
# ❌ Legacy check-in details endpoint
https://sentry.io/api/0/monitors/<monitor_slug/checkins/<check_in_id>/
# ✅ Relay Check-In ingestion endpoint
https://o0.ingest.sentry.io/api/0/cron/<monitor_slug>/examplePublicKey/
There are a few backward incompatible changes to be aware of.
There is now only a single Check-In endpoint. The "Check-In details" endpoint has been removed.
The API endpoint supports both
POST
with a JSON body, as well as now supportingGET
. You can use query parameters to specifystatus
,environment
, etc.The API endpoint will always respond with a
202
with no body (unless there is an error).Because there is no "details" endpoint, the
PUT
method for a Check-In has also been removed. You will always usePOST
orGET
for Check-Ins.For overlapping jobs, it is still possible to specify a
check_in_id
via the query parameters or JSON body. However, the API no longer responds with an auto-generated Check-In ID. If you need a stable Check-In ID, you must generate it client-side yourself.The
monitor_config
structure has changed slightly.schedule
is now an object of varying shape, depending on the schedule type.Copied{"type": "crontab", "value": "0 * * * *"} {"type": "interval", "value": "2", "unit": "hour"}
See the code samples below to help you migrate from the legacy endpoints to the current ones.
# ❌ Legacy simple `in_progress` -> `ok` check-in
curl -X POST \
'https://sentry.io/api/0/organizations/example-org/monitors/<monitor_slug>/checkins/' \
--header 'Authorization: DSN https://examplePublicKey@o0.ingest.sentry.io/0' \
--header 'Content-Type: application/json' \
--data-raw '{"status": "in_progress"}'
curl -X POST \
'https://sentry.io/api/0/organizations/example-org/monitors/<monitor_slug>/checkins/' \
--header 'Authorization: DSN https://examplePublicKey@o0.ingest.sentry.io/0' \
--header 'Content-Type: application/json' \
--data-raw '{"status": "ok"}'
# ✅ New style `in_progress` -> `ok` check-in
SENTRY_INGEST="https://o0.ingest.sentry.io"
SENTRY_CRONS="${SENTRY_INGEST}/api/0/cron/<monitor_slug>/examplePublicKey/"
curl "${SENTRY_CRONS}?status=in_progress"
curl "${SENTRY_CRONS}?status=ok"
# ❌ Legacy upsert monitor with a check-in
curl -X POST \
'https://sentry.io/api/0/organizations/example-org/monitors/<monitor_slug>/checkins/' \
--header 'Authorization: DSN https://examplePublicKey@o0.ingest.sentry.io/0' \
--header 'Content-Type: application/json' \
--data-raw '{"monitor_config": {"schedule": "0 * * * *", "schedule_type": "crontab"}, "status": "in_progress"}'
# ✅ New style upsert monitor with a check-in
SENTRY_INGEST="https://o0.ingest.sentry.io"
SENTRY_CRONS="${SENTRY_INGEST}/api/0/cron/<monitor_slug>/examplePublicKey/"
curl -X POST "${SENTRY_CRONS}?status=in_progress" \
--header 'Content-Type: application/json' \
--data-raw '{"monitor_config": {"schedule": {"type": "crontab", "value": "0 * * * *"}}, "status": "in_progress"}'
# 👉 Note that schedule is now an object ---^
# ❌ Legacy Check-In with ID
curl -X POST \
'https://sentry.io/api/0/organizations/example-org/monitors/<monitor_slug>/checkins/' \
--header 'Authorization: DSN https://examplePublicKey@o0.ingest.sentry.io/0' \
--header 'Content-Type: application/json' \
--data-raw '{"status": "in_progress"}'
# Response { "id": "2bc1a871-a1b7-4577-82fc-fa6d2468aabc" }
# ✅ New style upsert monitor with a check-in
CHECK_IN_ID="$(uuidgen)"
# 👉 Note that you now need to generate the Check-In UUID
SENTRY_INGEST="https://o0.ingest.sentry.io"
SENTRY_CRONS="${SENTRY_INGEST}/api/0/cron/<monitor_slug>/examplePublicKey/"
curl "${SENTRY_CRONS}?check_in_id=${CHECK_IN_ID}&status=in_progress"
# 👉 Note that no Check-In ID is returned
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").