$ curl saasreview.ai/api/agent/catalog

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.

How it works

  1. 1.Discover. GET /api/agent/catalog for tiers, live prices, the order shape, and which payment rails are live.
  2. 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. 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. 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.

idnamepricepublishedwhat you get
aiQuick review$5yesA fast, honest automated review of the live URL, published on saasreview.
humanHands-on review$15yesAn 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_planReview + fix-it plan$25yesThe hands-on review plus a prioritized, ready-to-ship remediation plan for your AI coding tool.
pentestBughunt$30privateA private, agent-run security pass with passive and non-destructive active checks. Findings are emailed to the buyer and never published.

Endpoints

GET/api/agent/catalog

Get 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

$Request
curl https://www.saasreview.ai/api/agent/catalog
$Response 200
{
  "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"
}
POST/api/agent/reviews

Order 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

fieldtyperequireddescription
product_urlstringyesThe app to review. Must start with http:// or https://.
tierstringyesOne of ai, human, human_plus_plan, pentest.
contact_emailstringyesWhere the deliverable and receipt are sent.
product_namestringnoDisplay name for the app. Optional.
test_credentialsobjectnoLogin for a behind-auth review. Stored encrypted; needs the server-side encryption key enabled.
authorizedbooleannoRequired true for the Bughunt tier (tier "pentest"): you attest you own or may test the site.
$Request
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"
  }'
$Response 201
{
  "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_..."
  }
}
GET/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

fieldtyperequireddescription
submission_idpathyesThe id returned by the order endpoint.
$Request
curl https://www.saasreview.ai/api/agent/reviews/8d2f7c10-...-9a1b
$Response 200 (published)
{
  "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.

POST/api/x402/reviews

Order 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

$Request
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" }'
$Response 201
{
  "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/..."
}
GET|POST/api/x402/reviews/{submission_id}/pay

Settle 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)

fieldtyperequireddescription
submission_idpathyesThe id from the x402 order.
X-PAYMENTheadernoBase64 of the x402 payment payload. Omit it to get the 402 challenge first.
$Request
# 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>'
$Response 200 (paid)
{
  "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.

$order_and_poll.py
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

+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.