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/___ORG_SLUG___/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://___ORG_INGEST_DOMAIN___/api/___PROJECT_ID___/cron/<monitor_slug>/___PUBLIC_KEY___/
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
POSTwith 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
202with no body (unless there is an error).Because there is no "details" endpoint, the
PUTmethod for a Check-In has also been removed. You will always usePOSTorGETfor Check-Ins.For overlapping jobs, it is still possible to specify a
check_in_idvia 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_configstructure has changed slightly.scheduleis 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/___ORG_SLUG___/monitors/<monitor_slug>/checkins/' \
--header 'Authorization: DSN ___PUBLIC_DSN___' \
--header 'Content-Type: application/json' \
--data-raw '{"status": "in_progress"}'
curl -X POST \
'https://sentry.io/api/0/organizations/___ORG_SLUG___/monitors/<monitor_slug>/checkins/' \
--header 'Authorization: DSN ___PUBLIC_DSN___' \
--header 'Content-Type: application/json' \
--data-raw '{"status": "ok"}'
# ✅ New style `in_progress` -> `ok` check-in
SENTRY_INGEST="https://___ORG_INGEST_DOMAIN___"
SENTRY_CRONS="${SENTRY_INGEST}/api/___PROJECT_ID___/cron/<monitor_slug>/___PUBLIC_KEY___/"
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/___ORG_SLUG___/monitors/<monitor_slug>/checkins/' \
--header 'Authorization: DSN ___PUBLIC_DSN___' \
--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://___ORG_INGEST_DOMAIN___"
SENTRY_CRONS="${SENTRY_INGEST}/api/___PROJECT_ID___/cron/<monitor_slug>/___PUBLIC_KEY___/"
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/___ORG_SLUG___/monitors/<monitor_slug>/checkins/' \
--header 'Authorization: DSN ___PUBLIC_DSN___' \
--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://___ORG_INGEST_DOMAIN___"
SENTRY_CRONS="${SENTRY_INGEST}/api/___PROJECT_ID___/cron/<monitor_slug>/___PUBLIC_KEY___/"
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").