Free buyer scope check

Check the buyer-approved scope before payment.

Confirm route, spend cap, wallet cap, expected output, and operator approval before a buyer-controlled x402 paid retry.

No payment happens here. ApexScout does not run the paid command or call the paid route.

Approved_to_retry is not payment. Payment only happens if your own x402 wallet, Base MCP-style buyer flow, or approved x402 client later retries the paid route.

What this checks

  • Supported ApexScout paid route.
  • Buyer max spend and wallet cap.
  • Reason and expected output.
  • Explicit operator approval.
  • Unsafe scope or private metadata.

Scope, not payment

This check never calls /api/opportunity-check or /api/agent-revenue-audit.

Buyer-controlled

A buyer wallet, Base MCP-style buyer flow, or approved x402 client must still read the unpaid 402 requirements and decide whether to retry with payment.

Aggregate-only

Metrics count only status, route, and sanitized source bucket. Raw buyer text is not public telemetry.

Run a no-spend scope check

No payment happens here. ApexScout only checks whether the intended paid retry fits the buyer-approved scope.

Scope result

Before the paid retry

No payment scope check has run yet.
{
  "status": "not_run_yet",
  "message": "No payment scope check has run yet.",
  "paymentHappened": false
}

Machine-readable metadata

{
  "name": "Buyer Payment Scope Check",
  "version": "v2.2.125-builder-intent-diagnostics",
  "mode": "free-no-spend-buyer-payment-scope-check",
  "route": "/buyer-payment-scope-check",
  "api": "/api/buyer-payment-scope-check",
  "checkApi": "/api/buyer-payment-scope-check/check",
  "purpose": "Validate buyer-approved payment scope before a buyer-controlled x402 paid retry. It checks route, spend cap, wallet cap, expected output, reason, operator approval, and metadata safety without executing payment.",
  "supportedRoutes": [
    {
      "route": "/api/opportunity-check",
      "title": "Opportunity Check",
      "price": "$0.01",
      "maxAmountAtomicUnits": "10000",
      "network": "eip155:8453"
    },
    {
      "route": "/api/agent-revenue-audit",
      "title": "Agent Revenue Audit",
      "price": "$5.00",
      "maxAmountAtomicUnits": "5000000",
      "network": "eip155:8453"
    }
  ],
  "inputSchema": {
    "required": [
      "route",
      "maxSpendUsd",
      "buyerWalletCapUsd",
      "reason",
      "expectedOutput",
      "operatorApproval"
    ],
    "optional": [
      "source"
    ]
  },
  "statuses": [
    "approved_to_retry",
    "needs_operator_approval",
    "fix_budget_cap",
    "fix_required_fields",
    "stop"
  ],
  "noSpendGuarantee": {
    "paidCallsMade": false,
    "paidUpstreamCalls": false,
    "paidRouteCalled": false,
    "paymentExecuted": false,
    "rawBuyerInputPublic": false,
    "generatedPayloadPublic": false,
    "buyerLevelDataExposed": false,
    "cookiesAdded": false,
    "sessionTrackingAdded": false,
    "thirdPartyAnalyticsAdded": false
  },
  "aggregateTelemetry": {
    "counters": [
      "buyerPaymentScopeChecks",
      "buyerPaymentScopeApprovedToRetry",
      "buyerPaymentScopeNeedsOperatorApproval",
      "buyerPaymentScopeFixBudgetCap",
      "buyerPaymentScopeFixRequiredFields",
      "buyerPaymentScopeStoppedForSafety",
      "buyerPaymentScopeRouteBreakdown",
      "buyerPaymentScopeSourceBuckets",
      "buyerPaymentScopeTopSourceTags"
    ],
    "rawBuyerInputStored": false,
    "generatedPayloadStored": false,
    "buyerIdentityStored": false,
    "cookiesAdded": false,
    "sessionTrackingAdded": false
  },
  "paymentSeparation": {
    "approvedToRetryMeansPaymentHappened": false,
    "paidConversionDefinition": "Only a buyer-controlled x402 paid retry returning HTTP 200 counts as paid conversion.",
    "buyerControlledOnly": "ApexScout never runs the paid command for the buyer. This check only tells the buyer whether the intended retry fits the approved scope.",
    "baseMcpBuyerFlow": "Base MCP-style buyers can use this scope result before an x402 retry, but ApexScout does not connect a Base Account, sign, submit, retry, or approve payment."
  },
  "links": {
    "page": "https://agent-research-brief-api-production.up.railway.app/buyer-payment-scope-check",
    "api": "https://agent-research-brief-api-production.up.railway.app/api/buyer-payment-scope-check",
    "checkApi": "https://agent-research-brief-api-production.up.railway.app/api/buyer-payment-scope-check/check",
    "agentRevenueAuditBuilder": "https://agent-research-brief-api-production.up.railway.app/agent-revenue-audit-builder",
    "paymentSafety": "https://agent-research-brief-api-production.up.railway.app/buyer-agent-payment-safety",
    "paymentIntent": "https://agent-research-brief-api-production.up.railway.app/payment-intent?route=agent-revenue-audit&src=buyer-payment-scope-check"
  },
  "sampleInput": {
    "route": "/api/agent-revenue-audit",
    "maxSpendUsd": "5.00",
    "buyerWalletCapUsd": "5.00",
    "reason": "Buyer wants to run the Agent Revenue Audit after a ready_to_pay Builder result.",
    "expectedOutput": "Structured audit JSON with route ladder, pricing logic, and buyer-agent payment handoff guidance.",
    "operatorApproval": "approved",
    "source": "example"
  },
  "guardrails": [
    "This check is free and no-spend.",
    "It does not call /api/opportunity-check or /api/agent-revenue-audit.",
    "It does not execute x402 payment.",
    "It does not store raw buyer reason, expected output, prompts, wallets, payloads, or identities in public metrics.",
    "It stops unsafe scope requests involving secrets, private keys, regulated identifiers, outreach, scraping, posting, messaging, or guaranteed revenue."
  ]
}