v1.0 — out of beta. Stateful checks. Schema validation. AI baselines.

Your API is lying. We prove it.

A 200 OK doesn't mean it works. Probe runs stateful, multi-step API checks with schema validation, embedded security scans, and AI-driven performance baselines — so you find out before your users do.

No credit card · 1k checks free · Deploy in < 60s

probe run --flow checkout-suite.yaml
5 / 5 checks
POST/v2/auth/login
142ms200
GET/v2/users/me
88ms200
GET/v2/billing/plan
612ms200
POST/v2/orders
71ms200
DELETE/v2/sessions
39ms204
checkout-suite passed in 412ms
p95 drift on /v2/billing — +412%
CSP missing on /v2/users
auth → fetch → logout — 3 steps green
AI baseline updated · Tue 09:00 UTC
12,408 probes in the last hour
schema mismatch · expected int got string
deploy ✓ · monitors auto-synced
checkout-suite passed in 412ms
p95 drift on /v2/billing — +412%
CSP missing on /v2/users
auth → fetch → logout — 3 steps green
AI baseline updated · Tue 09:00 UTC
12,408 probes in the last hour
schema mismatch · expected int got string
deploy ✓ · monitors auto-synced
powering 14,000+ probes / sec

Engineering teams shipping to production with Probe at the front line

ACMEfintech
Northwindlogistics
Linearissue tracking
Stripepayments
Helioinfra
Forgedevops
Latticehr
Vectorsearch
Atlasmaps
Quantaml
Beaconcomms
Orbitsatcom
ACMEfintech
Northwindlogistics
Linearissue tracking
Stripepayments
Helioinfra
Forgedevops
Latticehr
Vectorsearch
Atlasmaps
Quantaml
Beaconcomms
Orbitsatcom
ACMEfintech
Northwindlogistics
Linearissue tracking
Stripepayments
Helioinfra
Forgedevops
Latticehr
Vectorsearch
Atlasmaps
Quantaml
Beaconcomms
Orbitsatcom
ACMEfintech
Northwindlogistics
Linearissue tracking
Stripepayments
Helioinfra
Forgedevops
Latticehr
Vectorsearch
Atlasmaps
Quantaml
Beaconcomms
Orbitsatcom
The 200 OK problem

Most monitors check if it's alive.
We check if it's honest.

Your DB is down. Your endpoint returns []. Status code? 200. Pingdom says "all good". Your customers say otherwise.

Yesterday's tools

Ping. Hope. Repeat.

HTTP 200 + a regex on the body. That's it. No state, no schema, no security.

  • GET /api/users
    body matches "users"200
  • GET /api/health
    contains "ok"200
  • GET /api/orders
    response time < 2000ms200
Database is down. Empty array returned. Monitor: 🟢 Healthy.
Probe's approach

Verify. State. Secure.

Multi-step flows, JSON Schema validation, embedded vulnerability scans, and AI baselines.

  • auth → user → orders3-step flow, token chained
  • schema validation409 fields × strict types
  • security scanHSTS, CSP, TLS 1.3, no XSS
  • ai latency baselinelearning Tue 09:00 traffic
Empty array detected. Schema breach: expected ≥ 1 item. Alert sent.
Six pillars

One platform, every layer of the stack.

Reliability, security, contracts, and performance — observed continuously, from the same workflow your code already lives in.

/security

Continuous security scanning

Beyond uptime. We audit response headers (HSTS, CSP, X-Content-Type), grade TLS cipher suites, and optionally inject SQLi/XSS payloads to verify your WAF.

/workflows

Stateful, multi-step flows

Hit /auth, extract the bearer token from JSON, chain it into headers, branch on status. Real user journeys — not isolated pings.

/contracts

Strict JSON Schema validation

Drop in your schema.json. We validate every field, every type, every nesting. The moment a backend changes int → string, you get a contract breach alert.

/developer

Config-as-code & CI gates

Define monitors in monitoring.yaml next to your code. Block deploys on Vercel & GitHub Actions when staging checks fail. PR comments with diffs.

/intelligence

AI performance baselines

We learn your endpoint's tempo. If /checkout normally responds in 45ms on Tuesday at 09:00 and suddenly takes 400ms — you'll know before the timeout fires.

/alerts

Incident routing & status pages

Slack, Discord, PagerDuty, SMS, webhooks. Auto-generated public status pages with real uptime, real history, real transparency.

Stateful flows

APIs don't live alone. Your tests shouldn't either.

Chain requests, extract variables from any JSON path, branch on responses. Probe runs the real journey — login, fetch, mutate, sign out — exactly as a user would.

  1. step 1
    POST/auth/login

    extract `token` from $.data.access_token

  2. step 2
    GET/users/me

    Authorization: Bearer {{token}}

  3. step 3
    GET/orders?user_id={{me.id}}

    validate against orders.schema.json

  4. step 4
    DELETE/sessions/{{token}}

    expect 204, no body

JSONPath extraction Conditional branching Variable templatingRetry & backoff policies
/var/log/probe — case files

Four real incidents. Four reasons legacy uptime tools missed every one.

incidents/case-01.log
The 200 OK lie
Status code lied. Database was already gone.
# 03:14 — pager fires from /orders, but legacy monitor is green
$ curl -is https://api.acme.test/v1/orders | head -n 4
HTTP/1.1 200 OK
content-type: application/json
x-db-state: reconnecting
{"orders":[],"_meta":{"source":"cache-stale"}}
$ probe run case-01.yaml --assert orders.length >= 1
✗ assert orders.length >= 1 → got 0
✗ assert _meta.source != 'cache-stale' → got 'cache-stale'
✓ alert dispatched · pager · slack#incidents · 84ms
$
the lesson
Status codes describe transport, not truth. Probe asserts on response shape — not the signal at the wire.
numbers, not narratives

Built for the scale of modern APIs.

0M
probes / month
up
across customer fleets
0%
uptime SLO
up
for the Probe runner itself
0ms
p50 detection
down
from failure to alert
−0%
false positives
down
vs. legacy uptime tools
Config as code

Live in your repo. Run in your pipeline.

Define monitors next to the code they protect. Version them. Review them. Block bad deploys before they reach prod.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# probe/monitoring.yaml
version: 1
project: checkout-api
variables:
base_url: https://api.acme.com
flows:
- name: checkout-suite
schedule: "*/2 * * * *"
region: [iad1, fra1, syd1]
steps:
- id: login
request:
method: POST
url: "{{base_url}}/v2/auth/login"
body: { email: "{{secrets.EMAIL}}", password: "{{secrets.PASS}}" }
extract:
token: $.data.access_token
- id: get_orders
request:
method: GET
url: "{{base_url}}/v2/orders"
headers:
Authorization: "Bearer {{login.token}}"
assert:
- status: 200
- schema: ./schemas/orders.schema.json
- latency_p95_ms: { lt: 250 }
- security:
headers: [hsts, csp, x-content-type]
tls: ">= 1.3"
- id: place_order
when: "{{get_orders.body.length}} > 0"
request: { method: POST, url: "{{base_url}}/v2/orders", body: { ... } }
alerts:
- on: failure
channels: [slack#oncall, pagerduty.api-team]

Works with GitHub Actions, GitLab CI, CircleCI, Vercel, Netlify, Buildkite.

Probe vs. legacy uptime tools

What "is it up?" misses.

CheckAPI and similar tools stop at keyword matches. Probe goes the rest of the way: schemas, state, security, and statistical anomaly detection.

Capability
Legacy uptime tools
probe
HTTP/HTTPS uptime checks
Standard cron pings, latency, status codes
Keyword & regex body matching
Brittle, expensive, breaks on JSON shape changes
Strict JSON Schema validation
Validate types, structure, nested objects, contracts
Stateful, multi-step flows
Auth → fetch → mutate with extracted variables
Embedded security scans
Header audits, TLS grading, optional payload injection
AI latency baselines
Detect drift before timeouts trigger
Config-as-code (YAML in repo)
Version, review, gate deploys with PR checks
Inbound heartbeats / cron monitors
Alert when background jobs silently fail
Public status pages
Auto-generated, themable, custom domains
Multi-region from day one
iad1, fra1, syd1, hnd1, gru1 — built in
Ship with confidence

Stop trusting the 200.
Start trusting the truth.

Free for 1,000 checks per month. No credit card. Live monitors in 60 seconds.

1k
Free checks / mo
< 60s
Time to first monitor
99.999%
Probe network uptime