2,879 assertions passed · 1 did not

Catches what 200 OK misses

A status code says the server answered. Assert reads the answer — body, headers, latency — from six regions, every thirty seconds, and fails the check when the payload is wrong.

5 monitors free no card $8 thereafter
GET /V1/ACCOUNTS/:ID 200 · 242MS
{
"id": "acct_8fa21",
"plan": "pro",
"seats": 12,
"is_active": false,
"renews_at": null
}
CONFIRMED IN
4 of 6 regions · 22s
ASSERTION 3 OF 4
is_active == true  →  FAIL
/ Asserting for teams at
Customer one Customer two Customer three Customer four Customer five
/ What a check actually does

Three surfaces, one verdict

Every thirty seconds Assert sends the request from six regions, evaluates your assertions against what came back, and decides whether the endpoint is doing its job.

{
"plan": "pro",
"is_active": false,
"seats": 12
}

The body

Assert any JSON path with a typed operator: equality, regex, ranges, schema, GraphQL errors.

us-east-1 242ms
us-west-2 198ms
eu-west-1 311ms
eu-central-1 288ms
ap-south-1 402ms
sa-east-1 366ms

Six regions

A failure re-runs in the other regions before Assert pages anyone.

INCIDENT #2211 06:30
assert body.is_active == true
expected true · got false
PagerDuty Slack

One alert

It carries the diff, and closes itself when the assertion passes again.

/ How assertions compose

Written like tests, because they are

Chain conditions across body, headers, timing and GraphQL errors. Build them in the editor or commit the JSON. It is the same file either way.

Simple
body.plan == "pro" AND body.seats > 0
Grouped, with a latency budget
( body.data[*].price matches /^\d+\.\d{2}$/ OR body.data is empty ) AND p95 < 500ms
The GraphQL check that paged
errors is empty AND data.account.is_active == true → returned false, HTTP 200
/ The same check, as a file

Build it in the editor, commit it as JSON

Every monitor is one file. Put it in the repository next to the service it watches, and the check moves with the code.

monitor.json
{
"endpoint": "https://api.example.com/v1/users",
"method": "POST",
"headers": { "Authorization": "Bearer ${API_KEY}" },
"assertions": [
{ "type": "status", "equals": 201 },
{ "type": "responseTime", "lessThan": 500 },
{ "type": "jsonPath", "path": "$.user.id", "exists": true }
],
"regions": ["us-east", "eu-west", "ap-south"],
"interval": 30
}
What came back
201 CREATED 142MS
PASS status equals 201 201
PASS responseTime < 500ms 142ms
PASS $.user.id exists "usr_abc123"
3 OF 3 ASSERTIONS PASSED
/ The same eleven hours

Your API returned 200 all day. It was wrong all day.

Uptime monitoring

06:00 Endpoint responds 200
06:30 Endpoint responds 200
13:00 Endpoint responds 200
17:04 A customer emails support
11H 04M UNDETECTED

Assert

06:00 4 assertions pass in 6 regions
06:30 body.is_active reads false
06:30 Confirmed in 4 of 6 regions
06:31 On-call paged, diff attached
30S TO DETECTION
30s

Interval on every plan, free included.

6

Regions per check, never billed separately.

2.4B

Assertions evaluated each month.

1

Alert per incident, once the regions agree.

/ Pricing

Priced per monitor, not per check

Every plan runs thirty-second checks, the free one included. Checkly allows 25K checks a month, Assertible 500 per monitor. Assert counts neither.

Free
$0 /month
  • 5 monitors
  • 5-minute intervals
  • 1 region
  • Email alerts
  • 24 hours retention Detailed logs: response bodies, headers and assertion results. Assert keeps uptime metrics forever.
  • Status pages included
  • Status page white-label
  • Custom domain support
  • 1 team member
Start free
Starter
$8 /month
  • 10 monitors
  • 1-minute intervals
  • 3 regions
  • Email, Slack and Discord alerts
  • 30 days retention Detailed logs: response bodies, headers and assertion results. Assert keeps uptime metrics forever.
  • Status pages included
  • Status page white-label
  • Custom domain support
  • 2 team members
Start 14-day trial
Pro
Most picked
$23 /month
  • 30 monitors
  • 1-minute intervals
  • 3 regions
  • Email, Slack and Discord alerts
  • 30 days retention Detailed logs: response bodies, headers and assertion results. Assert keeps uptime metrics forever.
  • Status pages included
  • Status page white-label
  • Custom domain support
  • 5 team members
Start 14-day trial
Team
$65 /month
  • 60 monitors
  • 1-minute intervals
  • 6 regions
  • Every alert channel Alerts through email, Slack, Discord, webhooks, PagerDuty and Microsoft Teams.
  • 90 days retention Detailed logs: response bodies, headers and assertion results. Assert keeps uptime metrics forever.
  • Status pages included
  • Status page white-label
  • Custom domain support
  • Unlimited team members
Start 14-day trial

Add monitors past the plan limit for $0.50 each, every region enabled.

What the money actually buys

Most tools meter the checks. Assert meters the monitors, so a thirty-second interval across six regions costs the same as a five-minute one.

Feature
Assert
$23/mo
Checkly
$24/mo
Assertible
$25/mo
Better Stack
$29/mo
Runscope
$79/mo
Monitors 30 50 25 10
Check limits Unlimited 25K/mo 500/monitor Unlimited 250K/mo
Min interval 1 min 1 min 1 min 30 sec 1 min
Interval you can afford How often you can actually check without the plan price going up. 1 min 1.5 hour 25K checks a month across 50 monitors is 500 per monitor: about 16 checks a day, or one every 1.5 hours, before the cost rises. 1.5 hour 500 checks per monitor is about 16 checks a day, or one every 1.5 hours, before the cost rises. 30 sec 1 min
Regions 3 4 Multiple 19
Data retention Detailed logs. Assert keeps uptime metrics forever on every plan. 30 days 30 days 5K results 30 days
Status pages 1 1
Status page white-label Included $208/page/mo
GraphQL support YES
Slack / Discord YES YES YES YES YES
Team members 5 3 1 1 + $29/responder 5
Overage $0.50/monitor $8/25 monitors + $1.80/10K checks $21/50 monitors $0.70/1K checks

Taken from public pricing pages, December 2025.

/ Questions

Answered plainly

How does the free plan work?

The free plan gives you 5 monitors, 5-minute intervals, 1 region and 24 hours of detailed retention. We do not ask for a card. Upgrade when you want more monitors, faster intervals or more regions.

What happens when an assertion fails?

Assert re-runs the check in the other regions first. If they agree, it opens one incident carrying the assertion, the expected value, the received value and the regions that saw it, then sends that to email, Slack, Discord, webhooks, PagerDuty or Microsoft Teams. The incident closes itself when the assertion passes again.

What can an assertion read?

The status code, the response time, any header, any JSON path in the body, the raw body, and the GraphQL errors array. Operators cover equality, ranges, regular expressions, schema, presence and deliberate absence.

Which regions run the checks?

Six: US East, US West, Europe West, Europe Central, Asia Pacific and South America. The regions on your plan are part of the price, and Assert never charges per check.

Can Assert monitor an authenticated API?

Yes. Add the headers your API needs, including Authorization. Bearer tokens, Basic auth and custom schemes all work. Assert stores the secrets encrypted and redacts them from logs.

Do the checks count against a quota?

No. Assert charges for the monitor, not the check. A monitor at 30-second intervals across six regions costs the same as one at five minutes.

Is annual billing available?

Yes, at a discount. Write to us for annual terms and for plans larger than Team.

Can I cancel at any time?

Yes. The plan stays active until the end of the billing period. There is no contract and no cancellation fee.

$8 a month.
No call to find out.

Thirty-second checks on every plan, and Assert never bills a region separately. The incumbents charge per region and call it enterprise.

ENTRY PAID TIER BODY ASSERTIONS
Assert  $8 unlimited
Checkly  $29 metered
Better Stack  $29 limited
Pingdom  $15 none