Agent-native decision review

LaunchCheck

A three-level review ladder: stress-test launch copy for $0.50, review a proposal for $1.00, or use Sol-backed premium red-team analysis for $2.00.

ReactionCheck $0.50ProposalCheck $1.00Premium $2.00 x402 v2 Base mainnet USDC No LaunchCheck account or API key

Endpoints

POST https://launchcheck-x402.fly.dev/v1/reaction-check

ReactionCheck stress-tests launch and marketing copy through eight audience lenses, then returns risks, likely questions, required changes, and a fact-preserving rewrite.

Price: $0.50. Network: eip155:8453. Use a unique idempotency-key for every new logical request; retry the same request with the same key.

POST https://launchcheck-x402.fly.dev/v1/proposal-check

ProposalCheck reviews a product, feature, API, implementation, or business proposal before meaningful investment. It returns a structured decision covering the thesis, risks, assumptions, differentiation, feasibility, economics, scope cuts, validation plan, kill criteria, and build sequence.

Price: $1.00. Standard bounded proposal review. Use a unique idempotency-key for every new logical request; retry the same request with the same key.

POST https://launchcheck-x402.fly.dev/v1/proposal-check/deep

ProposalCheck Premium accepts the same proposal request and returns the same report contract, but uses the Sol-backed high-reasoning evaluator for a higher-rigor red-team pass. It is intended for consequential engineering, product, or capital decisions where an additional hidden dependency, arithmetic mistake, second-order effect, or counter-thesis could change the decision.

Price: $2.00. Typical completion time is ~2-3 minutes. Clients should allow up to 4 minutes before timing out. No parser changes are required when upgrading from standard ProposalCheck; only the endpoint and payment amount change.

The first unpaid request to any enabled paid endpoint in this three-level ladder returns HTTP 402 Payment Required with the x402 payment requirements. An x402-aware client signs the exact USDC authorization, retries the same request with the payment payload, and receives the analysis after successful settlement.

ReactionCheck request

{
  "content": "Your launch copy here. Minimum 40 characters.",
  "contentType": "product-announcement",
  "productContext": "Optional context about the product.",
  "targetAudience": "Optional intended audience.",
  "desiredAction": "Optional action the reader should take.",
  "constraints": ["Do not invent customer metrics"]
}

contentType may be landing-page, product-announcement, changelog, pricing-page, app-store-listing, email, or other. Content is limited to 12,000 characters and constraints to 10 entries.

ReactionCheck response

{
  "requestId": "2e847847-52da-46c6-b627-f95dbd66919f",
  "report": {
    "verdict": "revise",
    "score": 74,
    "inputIntegrity": {
      "status": "clean",
      "evidence": []
    },
    "executiveSummary": "Clear value, but the differentiation needs stronger evidence.",
    "topRisks": [
      {
        "severity": "medium",
        "title": "Differentiation is vague",
        "evidence": "The copy lists checks without explaining why they beat a generic critique.",
        "whyItMatters": "Readers may not see why the specialized review is worth using.",
        "fix": "State the specific pre-launch decision the review helps make."
      }
    ],
    "audienceReactions": [
      {
        "lens": "Skeptical technical buyer",
        "reaction": "mixed",
        "confidence": 0.82,
        "likelyThought": "Useful, but why not use a generic model?",
        "friction": "Differentiation is unclear."
      },
      {
        "lens": "Busy nontechnical decision-maker",
        "reaction": "mixed",
        "confidence": 0.82,
        "likelyThought": "Useful, but why not use a generic model?",
        "friction": "Differentiation is unclear."
      },
      {
        "lens": "Price-sensitive solo user",
        "reaction": "mixed",
        "confidence": 0.82,
        "likelyThought": "Useful, but why not use a generic model?",
        "friction": "Differentiation is unclear."
      },
      {
        "lens": "Privacy and security-conscious evaluator",
        "reaction": "mixed",
        "confidence": 0.82,
        "likelyThought": "Useful, but why not use a generic model?",
        "friction": "Differentiation is unclear."
      },
      {
        "lens": "Existing customer scanning for regressions",
        "reaction": "mixed",
        "confidence": 0.82,
        "likelyThought": "Useful, but why not use a generic model?",
        "friction": "Differentiation is unclear."
      },
      {
        "lens": "First-time visitor with low context",
        "reaction": "mixed",
        "confidence": 0.82,
        "likelyThought": "Useful, but why not use a generic model?",
        "friction": "Differentiation is unclear."
      },
      {
        "lens": "Enthusiastic early adopter",
        "reaction": "mixed",
        "confidence": 0.82,
        "likelyThought": "Useful, but why not use a generic model?",
        "friction": "Differentiation is unclear."
      },
      {
        "lens": "Support-minded operator anticipating questions",
        "reaction": "mixed",
        "confidence": 0.82,
        "likelyThought": "Useful, but why not use a generic model?",
        "friction": "Differentiation is unclear."
      }
    ],
    "likelyQuestions": [
      "Why use this instead of a generic model?"
    ],
    "claimsNeedingEvidence": [],
    "strongestElements": [
      "The pre-launch use case is clear."
    ],
    "requiredChanges": [
      "Clarify the specialized value."
    ],
    "optionalImprovements": [],
    "suggestedRewrite": "Stress-test launch copy before you publish with eight audience lenses, evidence checks, concrete fixes, and a fact-preserving rewrite."
  },
  "meta": {
    "engine": "openai-compatible",
    "model": "example-model",
    "generatedAt": "2026-07-26T12:00:00.000Z",
    "cached": false
  }
}

ProposalCheck request

{
  "proposal": "Describe the proposal, why it should exist, the smallest next step, and how success or failure will be measured.",
  "proposalType": "api-service",
  "productContext": "Optional product, company, market, or technical context.",
  "targetAudience": "Optional intended users, buyers, developers, or stakeholders.",
  "desiredDecision": "Decide whether to green-light the bounded MVP.",
  "constraints": ["Do not invent traction or external market facts"]
}

proposalType may be product, feature, api-service, implementation, business, or other. The proposal is limited to 32,000 characters. The exact same request shape is accepted by ProposalCheck Premium.

ProposalCheck response

{
  "requestId": "example",
  "report": {
    "verdict": "revise",
    "score": 70,
    "inputIntegrity": {
      "status": "clean",
      "evidence": []
    },
    "executiveSummary": "The proposal needs a smaller validation step.",
    "coreThesis": "Validate demand before expanding the build.",
    "strengths": [],
    "risks": [],
    "assumptions": [],
    "differentiationAssessment": {
      "rating": "unclear",
      "summary": "Differentiation still needs evidence.",
      "keyQuestion": null
    },
    "feasibilityAssessment": {
      "rating": "credible",
      "summary": "A bounded test is feasible.",
      "keyQuestion": null
    },
    "economicsAssessment": {
      "rating": "unclear",
      "summary": "Measure real cost and demand.",
      "keyQuestion": null
    },
    "scopeCuts": [],
    "requiredChanges": [
      "Define the cheapest demand test."
    ],
    "optionalImprovements": [],
    "validationPlan": [],
    "killCriteria": [],
    "recommendedBuildSequence": [],
    "recommendation": "Revise around one measurable validation step."
  },
  "meta": {
    "engine": "openai-compatible",
    "model": "openai/gpt-5.6-terra",
    "generatedAt": "2026-08-13T12:00:00.000Z",
    "cached": false
  }
}

ProposalCheck Premium response

Deep intentionally uses the same authoritative response schema as standard ProposalCheck so callers can compare or upgrade review depth without changing integration logic. The example below reflects the Sol-backed tier.

{
  "requestId": "deep-example",
  "report": {
    "verdict": "revise",
    "score": 76,
    "inputIntegrity": {
      "status": "clean",
      "evidence": []
    },
    "executiveSummary": "Validate the decisive dependency before implementation.",
    "coreThesis": "Earn the build with cheaper evidence first.",
    "strengths": [],
    "risks": [],
    "assumptions": [],
    "differentiationAssessment": {
      "rating": "credible",
      "summary": "The thesis may be differentiated if the dependency holds.",
      "keyQuestion": null
    },
    "feasibilityAssessment": {
      "rating": "credible",
      "summary": "A bounded validation step is feasible.",
      "keyQuestion": null
    },
    "economicsAssessment": {
      "rating": "unclear",
      "summary": "Measure actual cost before scaling.",
      "keyQuestion": null
    },
    "scopeCuts": [],
    "requiredChanges": [
      "Run the dependency gate."
    ],
    "optionalImprovements": [],
    "validationPlan": [],
    "killCriteria": [],
    "recommendedBuildSequence": [],
    "recommendation": "Revise around one decisive validation gate."
  },
  "meta": {
    "engine": "openai-compatible",
    "model": "openai/gpt-5.6-sol",
    "generatedAt": "2026-08-17T16:00:00.000Z",
    "cached": false
  }
}

Call it with an x402 client

Any x402 v2 client that supports the exact EVM flow on Base can call LaunchCheck. This example uses Coinbase's current managed-wallet client; its CDP credentials belong to the caller and are never sent to LaunchCheck.

npm install @coinbase/cdp-sdk @x402/core @x402/evm @x402/svm @x402/extensions @x402/fetch

export CDP_API_KEY_ID="your-api-key-id"
export CDP_API_KEY_SECRET="your-api-key-secret"
export CDP_WALLET_SECRET="your-wallet-secret"
import { CdpX402Client } from "@coinbase/cdp-sdk/x402";
import { wrapFetchWithPayment } from "@x402/fetch";

const client = new CdpX402Client();
const paidFetch = wrapFetchWithPayment(globalThis.fetch, client);

const response = await paidFetch("https://launchcheck-x402.fly.dev/v1/reaction-check", {
  method: "POST",
  headers: {
    "content-type": "application/json",
    "idempotency-key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    content: "Your launch copy here. It must be at least forty characters long.",
    contentType: "product-announcement",
    targetAudience: "Solo developers and small product teams"
  }),
});

console.log(await response.json());

Use the same x402 flow for ProposalCheck at https://launchcheck-x402.fly.dev/v1/proposal-check. To upgrade the exact same proposal contract to the Sol-backed review, use https://launchcheck-x402.fly.dev/v1/proposal-check/deep; its unpaid challenge carries the $2.00 authorization. Typical completion time is ~2-3 minutes. Clients should allow up to 4 minutes before timing out.

What the eight ReactionCheck lenses cover

The report models a skeptical technical buyer, a busy nontechnical decision-maker, a price-sensitive solo user, a privacy/security evaluator, an existing customer scanning for regressions, a low-context first-time visitor, an enthusiastic early adopter, and a support-minded operator anticipating questions.

Operational notes