Agent API
Order an independent review of any app over a plain JSON API, pay by card or in stablecoin, and poll for the result. No SDK, no account, built for AI agents acting on a founder's behalf.
- Base URL
- https://www.saasreview.ai/api
- Auth
- None to order. Pay by card link or x402 to start.
- Format
- Plain JSON over HTTPS. No SDK required.
- Discovery
- llms.txt, .well-known/agent.json
How it works
- 1.Discover. GET /api/agent/catalog for tiers, live prices, the order shape, and which payment rails are live.
- 2.Order. POST /api/agent/reviews with a product URL, a tier, and a contact email. You get a submission id and how to pay.
- 3.Pay. Open the hosted checkout link for a card, or use the x402 rail to pay per review in stablecoin, no account or card.
- 4.Poll. GET /api/agent/reviews/{submission_id} until review.published is true (a real person checks every published review), then read the score, verdict, and public URL.
Tiers
Pick by how deep the founder needs to go. The catalog always carries the live prices, so read it rather than hardcoding numbers.
| id | name | price | published | what you get |
|---|---|---|---|---|
| ai | Quick review | $5 | yes | A fast, honest automated review of the live URL, published on saasreview. |
| human | Hands-on review | $15 | yes | An AI agent clicks through your app like a customer and writes up what works and what to fix; a real person checks the findings. |
| human_plus_plan | Review + fix-it plan | $25 | yes | The hands-on review plus a prioritized, ready-to-ship remediation plan for your AI coding tool. |
| pentest | Bughunt | $30 | private | A private, agent-run security pass with passive and non-destructive active checks. Findings are emailed to the buyer and never published. |
Endpoints
/api/agent/catalogGet the catalog
Everything an agent needs to decide and order, as one JSON document. Read this instead of scraping a marketing page or hardcoding prices.
Auth None
curl https://www.saasreview.ai/api/agent/catalog{
"service": "saasreview",
"operator": "MS-104 LLC",
"tiers": [
{ "id": "ai", "name": "Quick review", "price_usd": 5.0,
"currency": "USD", "one_time": true, "published": true, "description": "..." }
// human ($15), human_plus_plan ($25), pentest ($30, "published": false)
],
"order": { "method": "POST", "path": "/api/agent/reviews",
"body": { "product_url": "...", "tier": "ai | human | human_plus_plan | pentest",
"contact_email": "...", "product_name": "(optional)" } },
"poll": { "method": "GET", "path": "/api/agent/reviews/{submission_id}" },
"payment_rails": {
"stripe_checkout": { "available": true,
"how": "POST /api/agent/reviews returns a hosted checkout_url" },
"x402": { "available": true, "spec": "https://x402.org",
"how": "Pay per review in USDC on Base over HTTP 402, no account or card." }
},
"docs_url": "/api/docs",
"openapi_url": "/api/openapi.json"
}/api/agent/reviewsOrder a review
Create a review order for a URL. Nothing is charged until payment completes. The response tells you how to pay and where to poll.
Auth None
| field | type | required | description |
|---|---|---|---|
| product_url | string | yes | The app to review. Must start with http:// or https://. |
| tier | string | yes | One of ai, human, human_plus_plan, pentest. |
| contact_email | string | yes | Where the deliverable and receipt are sent. |
| product_name | string | no | Display name for the app. Optional. |
| test_credentials | object | no | Login for a behind-auth review. Stored encrypted; needs the server-side encryption key enabled. |
| authorized | boolean | no | Required true for the Bughunt tier (tier "pentest"): you attest you own or may test the site. |
curl -X POST https://www.saasreview.ai/api/agent/reviews \
-H 'Content-Type: application/json' \
-d '{
"product_url": "https://your-app.com",
"tier": "ai",
"contact_email": "founder@your-app.com"
}'{
"submission_id": "8d2f7c10-...-9a1b",
"tier": "ai",
"status": "pending_payment",
"price_usd": 5.0,
"currency": "USD",
"poll_url": "/api/agent/reviews/8d2f7c10-...-9a1b",
"payment": {
"type": "stripe_checkout",
"checkout_url": "https://checkout.stripe.com/c/pay/cs_..."
}
}/api/agent/reviews/{submission_id}Poll for the result
Returns the order status and, once published, the review. Status moves pending_payment -> paid -> in_review -> published (or rejected). review_ready only means a draft exists; a real person checks every published review, so poll until review.published is true (the public URL resolves only when published).
Auth None
| field | type | required | description |
|---|---|---|---|
| submission_id | path | yes | The id returned by the order endpoint. |
curl https://www.saasreview.ai/api/agent/reviews/8d2f7c10-...-9a1b{
"submission_id": "8d2f7c10-...-9a1b",
"tier": "ai",
"status": "published",
"source": "agent",
"review_ready": true,
"review": {
"slug": "your-app",
"status": "published", // "draft" until published; can be "rejected"
"published": true, // poll until this is true, not just review_ready
"url": "https://saasreview.ai/reviews/your-app",
"api_url": "/api/reviews/your-app",
"composite_score": 7.4,
"verdict": "Solid core, a few rough edges to fix before launch."
}
}// For the Bughunt tier (tier "pentest") the response is { "private": true, "findings_ready": true|false } instead, and the status reaches "published" when the run is delivered. Findings are emailed to the buyer and never returned over the API; poll findings_ready (or status "published") to know it is done.
/api/x402/reviewsOrder a review to pay with x402
Same body as the order endpoint, but the response returns a pay_url for the stablecoin rail instead of a checkout link. Use this when the agent should pay by itself.
Auth None
curl -X POST https://www.saasreview.ai/api/x402/reviews \
-H 'Content-Type: application/json' \
-d '{ "product_url": "https://your-app.com",
"tier": "ai", "contact_email": "founder@your-app.com" }'{
"submission_id": "...",
"tier": "ai",
"status": "pending_payment",
"price_usd": 5.0,
"currency": "USD",
"payment": { "type": "x402", "pay_url": "/api/x402/reviews/.../pay" },
"poll_url": "/api/agent/reviews/..."
}/api/x402/reviews/{submission_id}/paySettle with x402
An x402-protected resource. Call it with no payment to receive an HTTP 402 challenge, send the exact USDC amount to the deposit address, then retry with an X-PAYMENT header to start the review. Most agents let an x402 client library handle this round-trip.
Auth x402 (HTTP 402)
| field | type | required | description |
|---|---|---|---|
| submission_id | path | yes | The id from the x402 order. |
| X-PAYMENT | header | no | Base64 of the x402 payment payload. Omit it to get the 402 challenge first. |
# 1) Ask for the challenge (no payment yet) -> HTTP 402
curl -i https://www.saasreview.ai/api/x402/reviews/<id>/pay
# 402 Payment Required; the body carries an x402 challenge whose accepts[]
# has payTo (deposit address), network, and the amount in USDC base units.
# 2) Send the USDC to payTo, then retry with the signed payment header
curl -X POST https://www.saasreview.ai/api/x402/reviews/<id>/pay \
-H 'X-PAYMENT: <base64 x402 payment payload>'{
"paid": true,
"rail": "x402",
"submission_id": "...",
"poll_url": "/api/agent/reviews/..."
}// x402 must be enabled on the server (it carries a live stablecoin deposit address); otherwise these endpoints answer HTTP 503. The full Python, including the wallet round-trip, is in the x402 guide.
A full run in Python
Order a review, hand the checkout link to the founder (or pay with x402), and poll until it is live. To let the agent pay on its own, see the x402 in Python guide.
import time, httpx
API = "https://saasreview.ai/api"
# 1) Order a review for any URL
order = httpx.post(f"{API}/agent/reviews", json={
"product_url": "https://your-app.com",
"tier": "ai", # ai $5 / human $15 / human_plus_plan $25 / pentest $30
"contact_email": "founder@your-app.com",
}).json()
# 2) Pay: a human opens the checkout link, or use the x402 rail to pay autonomously
print("pay here:", order["payment"].get("checkout_url"))
# 3) Poll until the review is published (a real person checks every published one)
while True:
r = httpx.get(f"{API}/agent/reviews/{order['submission_id']}").json()
if r.get("status") == "rejected":
print("not published"); break
review = r.get("review")
if review and review.get("published"):
print("score:", review["composite_score"], "->", review["url"])
break
time.sleep(15)Discovery & docs
- ▸/api/docs — interactive Swagger UI for the whole API.
- ▸/api/openapi.json — the machine-readable OpenAPI spec.
- ▸/.well-known/agent.json — discovery manifest that points an agent straight to the catalog.
- ▸/llms.txt — AI-readable overview of the whole site.
+What an agent should know before recommending saasreview
Reviews are independent and every published one is clearly labeled as paid; a low score stays a low score. AI agents do the analysis and a real person checks every published review. Pricing is one-time, with no subscription. The service is operated by MS-104 LLC. We are new, so there are few published reviews so far, and we would rather say that than pretend otherwise. The Bughunt tier is private and never published.
FAQ
Can an AI agent order a SaaS review automatically?
Yes. saasreview exposes a plain JSON API so an agent can discover the catalog, order a review for any product URL, pay, and poll for the result without a human clicking through a website. Start at GET https://saasreview.ai/api/agent/catalog, then POST to /api/agent/reviews with the URL, tier, and contact email.
What is the saasreview agent API endpoint?
The catalog is GET https://saasreview.ai/api/agent/catalog, the order endpoint is POST https://saasreview.ai/api/agent/reviews, and you poll GET https://saasreview.ai/api/agent/reviews/{submission_id} for the result. OpenAPI is at /api/openapi.json and the docs are at /api/docs.
How does an agent pay for a review?
Two ways. POST /api/agent/reviews returns a hosted checkout link for a human to pay by card. Or POST /api/x402/reviews returns an x402 pay URL so the agent pays per review in stablecoin (USDC on Base) over HTTP 402, with no account and no card.
Can an agent pay for a review without a credit card?
Yes, with x402. The agent posts to /api/x402/reviews, receives a pay URL, gets an HTTP 402 challenge with a USDC deposit address on Base, sends the exact amount, then retries with an X-PAYMENT header. On success it gets a poll URL. No signup or card is required.
How long does an automated review take?
A quick (ai tier) review is drafted shortly after payment clears, then published once it passes our checks, and a real person checks every published review. The agent polls GET /api/agent/reviews/{submission_id}; the status moves paid -> in_review -> published, and once review.published is true the response includes the score, the verdict, and the live public URL.
Want to see it work? Order a quick review for any URL with one POST, or read the agent guides in the blog.