Is it still there?
Live status of any product page, listing, or job posting, read from the page right now. $0.01 per URL with a wallet, or a free GitHub starter key for the first checks.
npx agentcash@0.17.1 add https://livecheck.fly.dev
Search engines tell you what they saw. Livecheck tells you what the page says now.
Try Verify
Live status checks for AI agents. Is this product still available or sold out (Shopify, eBay)? Is this job posting still open (Greenhouse, Lever, Ashby, Workday)? Real-time answer with evidence. $0.01 per check via x402 or Stripe MPP. Price is $0.01 USDC on Base per request.
The 402 response includes a payment-required header (x402 v2, Stripe deposit address, USDC on Base).
{
"x402Version": 2,
"error": "PAYMENT-SIGNATURE header is required",
"resource": {
"url": "http://livecheck.fly.dev/v1/verify",
"description": "Live status checks for AI agents. Is this product still available or sold out (Shopify, eBay)? Is this job posting still open (Greenhouse, Lever, Ashby, Workday)? Real-time answer with evidence. $0.01 per check via x402 or Stripe MPP.",
"mimeType": "application/json",
"serviceName": "Livecheck",
"tags": [
"listing-status",
"product-availability",
"job-postings",
"ecommerce",
"web-monitoring"
]
},
"accepts": [
{
"scheme": "exact",
"network": "eip155:8453",
"amount": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0x33693228b706cb30f4b4dbf35f79129a763f91c5",
"maxTimeoutSeconds": 60,
"extra": {
"name": "USD Coin",
"version": "2"
}
}
],
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"bodyType": "json",
"body": {
"url": "https://boards.greenhouse.io/example/jobs/1842"
},
"method": "POST"
},
"output": {
"type": "json",
"example": {
"url": "https://boards.greenhouse.io/example/jobs/1842",
"canonical_url": "https://boards.greenhouse.io/example/jobs/1842",
"status": "live",
"http_status": 200,
"checked_at": "2026-08-30T21:00:00Z",
"title": "Staff Backend Engineer — Northwind Labs",
"signals": [
"apply form present",
"no closure banner"
],
"confidence": 0.92,
"price_usd": 0.01,
"route": "verify"
}
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"input": {
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"type": "string",
"enum": [
"POST"
]
},
"bodyType": {
"type": "string",
"enum": [
"json",
"form-data",
"text"
]
},
"body": {
"properties": {
"url": {
"type": "string",
"description": "Absolute http(s) URL of the specific job, product, or eBay item page to check. Not a search-results URL."
},
"stale_after_days": {
"type": "number",
"description": "Job postings: age in days after which age.stale_age is true. Default 60, clamped to 7–365. Does not change status or confidence."
}
},
"required": [
"url"
]
}
},
"required": [
"type",
"method",
"bodyType",
"body"
]
},
"output": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"canonical_url": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"live",
"closed",
"unknown"
]
},
"label": {
"type": "string",
"enum": [
"backorder",
"in_stores_only"
],
"description": "Optional label adds detail to a live result. backorder: can be ordered now, ships later. in_stores_only: not purchasable online, so agents completing an online purchase should treat it as unavailable."
},
"http_status": {
"type": "number"
},
"checked_at": {
"type": "string"
},
"title": {
"type": "string"
},
"signals": {
"type": "array",
"items": {
"type": "string"
}
},
"confidence": {
"type": "number"
},
"price_usd": {
"type": "number"
},
"message": {
"type": "string",
"description": "Set when the URL is a job board or careers index instead of one posting. Ask for a single posting URL. Omitted on live and closed answers."
},
"route": {
"type": "string",
"description": "API path that produced this response, after /v1/ and without a leading slash.",
"enum": [
"verify",
"verify/job",
"verify/listing"
]
},
"watch": {
"type": "object",
"description": "Present on paid 200 Confirm responses, and on paid 200 Verify responses only when status is live (omitted on closed and unknown). Cross-sell hint to POST /v1/watch ($2.50, 30-day standard watcher). Default detector is status_change. Not included on unpaid 402.",
"properties": {
"suggest": {
"type": "string",
"enum": [
"/v1/watch"
]
},
"detector": {
"type": "string",
"enum": [
"status_change"
]
},
"price_usd": {
"type": "number"
}
},
"required": [
"suggest",
"detector",
"price_usd"
]
},
"paid_with": {
"type": "string",
"enum": [
"free_credit"
],
"description": "Set to free_credit when a starter key paid for the call. price_usd is then 0."
},
"credits_remaining": {
"type": "number",
"description": "Starter-key free checks left after this call."
},
"credit_used": {
"type": "boolean",
"description": "Whether this call used one starter-key credit."
},
"age": {
"type": "object",
"description": "Job postings only. How long the posting has been up, from the hiring platform's first-posted date (or the page's JSON-LD datePosted). Context only: never changes status or confidence. Never taken from a last-updated date; unknown when there is no posted date.",
"properties": {
"posted_at": {
"type": [
"string",
"null"
]
},
"age_days": {
"type": [
"number",
"null"
]
},
"age_days_min": {
"type": "number",
"description": "Lower bound when only \"30+ days\" is known (Workday)."
},
"age_source": {
"type": "string",
"enum": [
"greenhouse.first_published",
"greenhouse.published_at",
"ashby.publishedAt",
"lever.createdAt",
"workday.startDate",
"workday.postedOn_text",
"jsonld.datePosted",
"none"
]
},
"age_precision": {
"type": "string",
"enum": [
"exact",
"day",
"at_least",
"unknown"
]
},
"age_bucket": {
"type": "string",
"enum": [
"0-7",
"8-30",
"31-60",
"61-90",
"90+",
"30+",
"unknown"
]
},
"stale_age": {
"type": [
"boolean",
"null"
],
"description": "age_days >= stale_after_days (default 60: \"60 and up\"); null when unknown."
},
"stale_after_days": {
"type": "number"
},
"last_updated_at": {
"type": "string",
"description": "ATS last-updated date. Not the posted date."
},
"note": {
"type": "string"
}
},
"required": [
"posted_at",
"age_days",
"age_source",
"age_precision",
"age_bucket",
"stale_age",
"stale_after_days"
]
}
},
"required": [
"url",
"canonical_url",
"status",
"http_status",
"checked_at",
"signals",
"confidence",
"price_usd",
"route"
]
}
},
"required": [
"type"
]
}
},
"required": [
"input"
]
}
}
}
}
Example 402 (decoded)
Header value is base64. Decoded shape:
{
"x402Version": 2,
"error": "PAYMENT-SIGNATURE header is required",
"resource": {
"url": "http://livecheck.fly.dev/v1/verify",
"description": "Live status checks for AI agents. Is this product still available or sold out (Shopify, eBay)? Is this job posting still open (Greenhouse, Lever, Ashby, Workday)? Real-time answer with evidence. $0.01 per check via x402 or Stripe MPP.",
"mimeType": "application/json",
"serviceName": "Livecheck",
"tags": [
"listing-status",
"product-availability",
"job-postings",
"ecommerce",
"web-monitoring"
]
},
"accepts": [
{
"scheme": "exact",
"network": "eip155:8453",
"amount": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0x33693228b706cb30f4b4dbf35f79129a763f91c5",
"maxTimeoutSeconds": 60,
"extra": {
"name": "USD Coin",
"version": "2"
}
}
],
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"bodyType": "json",
"body": {
"url": "https://boards.greenhouse.io/example/jobs/1842"
},
"method": "POST"
},
"output": {
"type": "json",
"example": {
"url": "https://boards.greenhouse.io/example/jobs/1842",
"canonical_url": "https://boards.greenhouse.io/example/jobs/1842",
"status": "live",
"http_status": 200,
"checked_at": "2026-08-30T21:00:00Z",
"title": "Staff Backend Engineer — Northwind Labs",
"signals": [
"apply form present",
"no closure banner"
],
"confidence": 0.92,
"price_usd": 0.01,
"route": "verify"
}
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"input": {
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"type": "string",
"enum": [
"POST"
]
},
"bodyType": {
"type": "string",
"enum": [
"json",
"form-data",
"text"
]
},
"body": {
"properties": {
"url": {
"type": "string",
"description": "Absolute http(s) URL of the specific job, product, or eBay item page to check. Not a search-results URL."
},
"stale_after_days": {
"type": "number",
"description": "Job postings: age in days after which age.stale_age is true. Default 60, clamped to 7–365. Does not change status or confidence."
}
},
"required": [
"url"
]
}
},
"required": [
"type",
"method",
"bodyType",
"body"
]
},
"output": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"canonical_url": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"live",
"closed",
"unknown"
]
},
"label": {
"type": "string",
"enum": [
"backorder",
"in_stores_only"
],
"description": "Optional label adds detail to a live result. backorder: can be ordered now, ships later. in_stores_only: not purchasable online, so agents completing an online purchase should treat it as unavailable."
},
"http_status": {
"type": "number"
},
"checked_at": {
"type": "string"
},
"title": {
"type": "string"
},
"signals": {
"type": "array",
"items": {
"type": "string"
}
},
"confidence": {
"type": "number"
},
"price_usd": {
"type": "number"
},
"message": {
"type": "string",
"description": "Set when the URL is a job board or careers index instead of one posting. Ask for a single posting URL. Omitted on live and closed answers."
},
"route": {
"type": "string",
"description": "API path that produced this response, after /v1/ and without a leading slash.",
"enum": [
"verify",
"verify/job",
"verify/listing"
]
},
"watch": {
"type": "object",
"description": "Present on paid 200 Confirm responses, and on paid 200 Verify responses only when status is live (omitted on closed and unknown). Cross-sell hint to POST /v1/watch ($2.50, 30-day standard watcher). Default detector is status_change. Not included on unpaid 402.",
"properties": {
"suggest": {
"type": "string",
"enum": [
"/v1/watch"
]
},
"detector": {
"type": "string",
"enum": [
"status_change"
]
},
"price_usd": {
"type": "number"
}
},
"required": [
"suggest",
"detector",
"price_usd"
]
},
"paid_with": {
"type": "string",
"enum": [
"free_credit"
],
"description": "Set to free_credit when a starter key paid for the call. price_usd is then 0."
},
"credits_remaining": {
"type": "number",
"description": "Starter-key free checks left after this call."
},
"credit_used": {
"type": "boolean",
"description": "Whether this call used one starter-key credit."
},
"age": {
"type": "object",
"description": "Job postings only. How long the posting has been up, from the hiring platform's first-posted date (or the page's JSON-LD datePosted). Context only: never changes status or confidence. Never taken from a last-updated date; unknown when there is no posted date.",
"properties": {
"posted_at": {
"type": [
"string",
"null"
]
},
"age_days": {
"type": [
"number",
"null"
]
},
"age_days_min": {
"type": "number",
"description": "Lower bound when only \"30+ days\" is known (Workday)."
},
"age_source": {
"type": "string",
"enum": [
"greenhouse.first_published",
"greenhouse.published_at",
"ashby.publishedAt",
"lever.createdAt",
"workday.startDate",
"workday.postedOn_text",
"jsonld.datePosted",
"none"
]
},
"age_precision": {
"type": "string",
"enum": [
"exact",
"day",
"at_least",
"unknown"
]
},
"age_bucket": {
"type": "string",
"enum": [
"0-7",
"8-30",
"31-60",
"61-90",
"90+",
"30+",
"unknown"
]
},
"stale_age": {
"type": [
"boolean",
"null"
],
"description": "age_days >= stale_after_days (default 60: \"60 and up\"); null when unknown."
},
"stale_after_days": {
"type": "number"
},
"last_updated_at": {
"type": "string",
"description": "ATS last-updated date. Not the posted date."
},
"note": {
"type": "string"
}
},
"required": [
"posted_at",
"age_days",
"age_source",
"age_precision",
"age_bucket",
"stale_age",
"stale_after_days"
]
}
},
"required": [
"url",
"canonical_url",
"status",
"http_status",
"checked_at",
"signals",
"confidence",
"price_usd",
"route"
]
}
},
"required": [
"type"
]
}
},
"required": [
"input"
]
}
}
}
}
Encoded header starts eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJQQVlNRU5ULVNJ…
Example verify JSON
{
"url": "https://boards.greenhouse.io/northwind/jobs/1842",
"canonical_url": "https://boards.greenhouse.io/northwind/jobs/1842",
"status": "live",
"http_status": 200,
"checked_at": "2026-08-30T21:00:00Z",
"title": "Staff Backend Engineer — Northwind Labs",
"signals": [
"apply form present",
"no closure banner"
],
"confidence": 0.92,
"price_usd": 0.01,
"route": "verify"
}
Local fixtures
Served by this process so you can exercise the classifier without the open web.
live-apply-now— 200 + Apply Now on a specific posting http://livecheck.fly.dev/fixtures/live-apply-nowclosed-to-new-applications— Greenhouse: this job is closed to new applications http://livecheck.fly.dev/fixtures/closed-to-new-applicationsclosed-to-new-applications-lever— Lever: this job is closed to new applications http://livecheck.fly.dev/fixtures/closed-to-new-applications-levergreenhouse-closed-job— Greenhouse job URL that redirects to the company board http://livecheck.fly.dev/fixtures/greenhouse-closed-jobgreenhouse-board— Greenhouse board (empty-state after redirect) http://livecheck.fly.dev/fixtures/greenhouse-boardcareers— Careers homepage / ATS board http://livecheck.fly.dev/fixtures/careersjobs/1842— Numeric job path with Apply Now http://livecheck.fly.dev/fixtures/jobs/1842jobs/9901— Numeric job path that 302s to the board http://livecheck.fly.dev/fixtures/jobs/9901gone-404— HTTP 404 job URL http://livecheck.fly.dev/fixtures/gone-404live-apply-recaptcha— Open job apply form that includes a recaptcha widget http://livecheck.fly.dev/fixtures/live-apply-recaptchacloudflare-challenge— Cloudflare interstitial challenge page http://livecheck.fly.dev/fixtures/cloudflare-challengeproducts/ridge-wallet— Shopify product page with Add to cart (recaptcha present) http://livecheck.fly.dev/fixtures/products/ridge-walletproducts/groove-ring— Shopify product page that is sold out http://livecheck.fly.dev/fixtures/products/groove-ringshop-home— Shop homepage with a featured Add to cart control http://livecheck.fly.dev/fixtures/shop-homeproducts/retired-widget— Product URL that redirects to the shop homepage http://livecheck.fly.dev/fixtures/products/retired-widgetproducts/retired-mug— Product URL that redirects to a collection page http://livecheck.fly.dev/fixtures/products/retired-mugcollections/rings— Shopify collection page with template add-to-cart http://livecheck.fly.dev/fixtures/collections/ringsproducts/missing— HTTP 404 product URL http://livecheck.fly.dev/fixtures/products/missingproducts/ridge-wallet-locale— Shopify in-stock product whose locale JSON contains sold-out strings http://livecheck.fly.dev/fixtures/products/ridge-wallet-localeproducts/groove-ring-challenge-platform— In-stock product with only a Cloudflare bot-management script http://livecheck.fly.dev/fixtures/products/groove-ring-challenge-platformproducts/ridge-wallet-locale-class— In-stock product with locale sold_out JSON, sold-out CSS class, and schema InStock http://livecheck.fly.dev/fixtures/products/ridge-wallet-locale-classproducts/ridge-wallet-schema-oos— Product whose only sold-out signal is schema.org OutOfStock http://livecheck.fly.dev/fixtures/products/ridge-wallet-schema-ooscollections/all-apply— Collection page that accidentally includes Apply now http://livecheck.fly.dev/fixtures/collections/all-applyconfirm/thank-you-id— Thank-you page with confirmation number ABC123 http://livecheck.fly.dev/fixtures/confirm/thank-you-idconfirm/thank-you-only— Thank-you copy with no confirmation id http://livecheck.fly.dev/fixtures/confirm/thank-you-onlyconfirm/error-banner— Lead submit error / reject banner http://livecheck.fly.dev/fixtures/confirm/error-bannerconfirm/order-thank-you-id— Order thank-you page with order number ORD-18421 http://livecheck.fly.dev/fixtures/confirm/order-thank-you-idconfirm/order-thank-you-only— Order thank-you copy with no order id http://livecheck.fly.dev/fixtures/confirm/order-thank-you-onlyconfirm/order-payment-failed— Payment declined / checkout failed banner http://livecheck.fly.dev/fixtures/confirm/order-payment-failedconfirm/order-cancelled— Order cancelled banner http://livecheck.fly.dev/fixtures/confirm/order-cancelledconfirm/order-loginwall— Login wall on an order confirmation URL http://livecheck.fly.dev/fixtures/confirm/order-loginwallproducts/price-usd— Product page with $1,299.00 and viewer/timestamp noise http://livecheck.fly.dev/fixtures/products/price-usdproducts/price-eur— Product page with 1 299,00 euro price http://livecheck.fly.dev/fixtures/products/price-eurproducts/price-149— Product page with bare 149 price http://livecheck.fly.dev/fixtures/products/price-149products/price.json— JSON product payload with offers.price 149 http://livecheck.fly.dev/fixtures/products/price.jsonproducts/price-usd-changed— Same product with rewritten description (noise counters changed too) http://livecheck.fly.dev/fixtures/products/price-usd-changed
curl
curl -iv http://livecheck.fly.dev/v1/verify -H 'content-type: application/json' \
-d '{"url":"https://boards.greenhouse.io/example/jobs/1"}'
# Real funds: Stripe's purl client from the x402 docs
purl http://livecheck.fly.dev/v1/verify -H 'content-type: application/json' \
-d '{"url":"https://boards.greenhouse.io/example/jobs/1"}'
Confirm for operators
How do you know the agent actually did it?
A success toast and a calendar invite aren’t proof. Livecheck Confirm checks the real-world result — independently.
Live stats
Includes internal test traffic. Headline watchers, checks, and confirm windows are all wallets. traffic.external omits configured team wallets.
Source of truth: GET /stats?format=json
(https://livecheck.fly.dev/stats?format=json).
That document is the serving machine's SQLite. unique_payers is a distinct count on that file, not a sum across volumes.
Gil owns landing copy — this strip only fetches that JSON.
Loading /stats?format=json…