Skip to content

HTTP check reference

The full request/response schema is in the auto-generated API Reference. This page is the human-readable cheat sheet for POST /http/job and PUT /http/job/{job_id}.

FieldTypeDefaultDescription
friendly_namestringnoneDisplay name shown in the dashboard. 1 to 99 characters.
uristringrequiredTarget URL. Must parse as an absolute URI with a host. https is required unless monitor_tls is explicitly false.
methodstringrequiredAny valid HTTP method token (GET, POST, HEAD, …).
run_interval_secondsintrequiredSeconds between checks. Must be at least 60 and a multiple of 60.
run_interval_thirty_secondsboolfalseRun every 30 seconds instead. Only valid together with run_interval_seconds: 60.
timeout_msintrequiredPer-request timeout in milliseconds. Maximum 60000.
check_regionsstring[]["aws-us-east-1"]Locations the check runs from. Omitted or empty falls back to the default. Only the default has a runner behind it. See check regions.
min_healthy_regionsint1Minimum locations that must pass for the check to count as healthy. At least 1, at most the number of check_regions. Setting more than one location requires a paid plan.
confirmation_thresholdint1Consecutive failed checks required before the monitor transitions to failed and alerts. 1 to 10. See requiring N failed checks.
follow_redirectsbooltrueFollow HTTP redirects before evaluating the response.
request_bodystringnoneBody sent with the request.
content_typeenumnoneContent-Type of the request body. See content types.
auth_typeenumnonebasic, digest, or bearer.
auth_usernamestringnoneUsername for basic / digest auth.
auth_passwordstringnonePassword for basic / digest auth.
auth_bearer_tokenstringnoneToken for bearer auth.
success_http_codesint[]noneStatus codes that force a success. Each must be a valid HTTP status code.
failure_http_codesint[]noneStatus codes that force a failure. Each must be a valid HTTP status code.
custom_http_headersmapnoneExtra request headers as {name: value}.
keyword_searchstringnoneText to search for in the response body. Maximum 1000 characters; an empty string is treated as unset.
keyword_search_invertedboolfalseInvert the assertion: fail when the keyword IS found.
keyword_search_case_sensitiveboolfalseMatch case-sensitively.
keyword_search_regexboolfalseInterpret keyword_search as a regular expression.
group_notification_idsuuid[]noneNotification groups to fire on state change. Maximum 10, no duplicates, must belong to your account.
monitor_tlsbooltrueProvision a paired TLS check for the URL’s hostname.
monitor_dnsbooltrueProvision a paired domain expiry check for the URL’s registrable domain. Silently skipped at create time, and rejected with 400 on update, when the host is on a shared platform suffix such as *.vercel.app.
monitor_page_speedboolfalseProvision a paired page-speed (Lighthouse) check on a slower schedule.
tagsstring[]noneFree-form tags. Used for grouping and maintenance-window matching.
http_versionenumautoPreferred HTTP version for the check transport. See HTTP versions.
stateenumactiveUpdate only. active or paused. Paused checks stop running and alerting.
final_uristringnoneAccepted by the API but not evaluated by the check runner today.

PUT /http/job/{job_id} takes the same fields, all optional; a request with no fields is rejected. Sending check_regions: [] on update leaves regions unchanged.

FieldTypeDescription
iduuidCheck ID.
account_iduuidOwning account.
current_statusenumSee status enum.
last_run_atrfc3339 | nullMost recent check execution.
last_status_change_atrfc3339 | nullWhen current_status last transitioned.
created_atrfc3339When the check was created.
tls_job_iduuid | nullPaired TLS check, if monitor_tls is on.
dns_job_iduuid | nullPaired domain expiry check, if monitor_dns is on and the domain is registrable.
page_speed_job_iduuid | nullPaired page-speed check, if monitor_page_speed is on.
group_notificationsobject[] | nullFull notification-group objects resolved from group_notification_ids.
service_iduuid | nullService this check belongs to, set via the service endpoints.
StatusMeaning
successThe monitor is not in a confirmed failure. A monitor whose recent checks have failed but not yet met its confirmation_threshold stays success.
failedConfirmed failure. Notifications fire and an incident opens.
pending_failureLegacy value. Nothing sets it today; debouncing is handled by confirmation_threshold. Treat it as success if you encounter it on an old record.

The field validates against these four values and rejects anything else with a 400 carrying Invalid check_regions <value>. Only the first one runs checks.

Region valueLocationRuns checks today
aws-us-east-1N. Virginia, USAYes. The default.
aws-us-west-1N. California, USANo
aws-us-east-2Ohio, USANo
aws-eu-west-2London, UKNo
ValueBehavior
autoPrefer HTTP/2 via ALPN, fall back to HTTP/1.1 (default).
http1_1Force HTTP/1.1 only. Best for some CDN / bot-management edges.
http2Require HTTP/2; the check fails if it cannot be negotiated.
http2_with_fallbackExplicit prefer-h2-with-fallback. Same transport behavior as auto today.

The negotiated version actually observed on each run is recorded on the check result.

ValueSent as
jsonapplication/json
xmlapplication/xml
form_url_encodedapplication/x-www-form-urlencoded
texttext/plain
MethodPathPurpose
POST/http/jobCreate.
GET/http/job/{job_id}Fetch one check.
PUT/http/job/{job_id}Update (partial).
DELETE/http/job/{job_id}Delete.
GET/http/jobsList, with sort/filter query params.
GET/http/tagsDistinct tags across your checks.
GET/http/job/{job_id}/recentRecent check runs.
GET/http/job/{job_id}/recent-checksRecent per-region check results.
GET/http/job/{job_id}/eventsStatus-transition events.
GET/http/job/{job_id}/uptime_percentageUptime percentage and incident count for a date range.
GET/http/job/{job_id}/performancePer-phase timing (dns/tcp/tls/ttfb/download).
GET/http/job/result/{job_result_id}/detailsFull detail for one recorded result.
GET/http/job/result/{job_result_id}/bodyPre-signed download for a failed check’s full response body.
GET/http/job/{job_id}/results/exportCheck results as CSV (timings and outcome, no bodies).
GET/http/job/{job_id}/page_speedLatest page-speed result.
GET/http/job/{job_id}/page_speed/historyPage-speed history.

Every check records its outcome, status code and per-phase timings. The response body is kept only when a check fails, which is when you need it to tell a 500 from a blank page from a hijacked domain. A passing check’s body is not stored.

When a check fails, the result carries:

  • response_body: the first 8 KB of the response, for display.
  • body_bytes: the true size of the captured body. If it is larger than response_body, the inline copy is the head of a bigger document.
  • body_truncated, body_available, body_expired: whether the snippet is partial, whether the full body can be downloaded now, and whether one was captured but has aged out of your plan’s window.

Call GET /http/job/result/{job_result_id}/body for a pre-signed URL to the complete body, valid for one hour. It answers 404 when no body was captured (a passing check) and 410 when one was captured but falls outside your retention window.

A keyword assertion is evaluated against the live response while the check runs, never against the stored copy, so a keyword failure always carries the body that failed it even though the status code was 200.

PlanFailure bodies readable for
Free5 days
Any paid plan30 days
On requestUp to 365 days

These are read windows, not deletion schedules. The window is evaluated at the moment you ask for a body: past it, GET /http/job/result/{id}/body answers 410 and the dashboard shows the body as expired. Upgrading therefore makes older captured bodies readable again straight away, rather than only affecting new checks, and downgrading closes off older ones without deleting anything.

Do not read the table as a statement about when the stored object is destroyed. Object deletion is handled separately by the storage lifecycle on a longer schedule, and it is not the same number.