{
  "schema_version": "civicdataforge.agent-commerce.v1",
  "updated_at": "2026-09-23",
  "canonical_url": "https://civicdataforge.pages.dev/.well-known/agent-commerce.json",
  "provider": {
    "name": "CivicDataForge",
    "website": "https://civicdataforge.pages.dev/",
    "support_email": "bryan@steellantern.com"
  },
  "product_rule": "A supported machine purchase executes immediately and returns a receipt-bound evidence packet. Payment is not a lead, intake request, or promise of later analyst work.",
  "preflight": {
    "method": "POST",
    "url": "https://civicdataforge.pages.dev/api/quote",
    "authentication": "none",
    "request_schema": {
      "$ref": "https://civicdataforge.pages.dev/.well-known/evidence-input-schema.json"
    },
    "charged": false,
    "persists_subject": false,
    "purpose": "Return current agentic-payment eligibility, current listing prices, required input, execution route, and automatic-delivery contract before an agent spends money.",
    "input_contract": {
      "scope": "basic_commerce_quote_only",
      "version": "civicdataforge.evidence-input.v2",
      "schema_url": "https://civicdataforge.pages.dev/.well-known/evidence-input-schema.json",
      "schema_sha256": "36c1697f970db5f5094e7beb114dc9856b98ef8a759fbc39f81a99bc5a7d435c",
      "quote": {
        "method": "POST",
        "url": "https://civicdataforge.pages.dev/api/quote",
        "charged": false,
        "authentication": "none"
      },
      "runtime_validation": "Structural schema acceptance is not a READY quote. The quote additionally validates supported jurisdiction and route, normalized identifiers, bbox order/area and bounded date windows. Live quote state controls price and eligibility.",
      "advanced_input_boundary": "Direct Actor and MCP tool schemas remain separate. Rights/evidence intake, sourceRightsPassports, exchangeRequest and observedAt are not accepted by this basic quote contract; use the relevant advanced direct-Actor validation. This reference does not replace MCP tools/call arguments or authentication."
    }
  },
  "purchase": {
    "actor": "civicdataforge/civicdataforge-evidence-gateway",
    "store_url": "https://apify.com/civicdataforge/civicdataforge-evidence-gateway",
    "run_sync_endpoint": "https://api.apify.com/v2/acts/civicdataforge~civicdataforge-evidence-gateway/run-sync?timeout=120&outputRecordKey=GATEWAY-PACKET",
    "pricing_model": "PAY_PER_EVENT",
    "agentic_payment_eligible": true,
    "apify_account_required": false,
    "rails": [
      "Apify AGI prepaid token via x402 or MPP",
      "Apify MCP direct x402 via mcpc",
      "Skyfire PAY token",
      "caller-owned Apify API token"
    ],
    "current_state_rule": "The no-auth quote endpoint rechecks the public Apify Store before returning READY. The live Store response controls final price, eligibility, and spending limits.",
    "alternatives": [
      {
        "channel": "AWS Marketplace",
        "url": "https://aws.amazon.com/marketplace/pp/prodview-6sjgyotxqa22o",
        "price_usd_per_successful_evidence_request": 0.1,
        "failed_requests_billed": false,
        "activation": "Subscribe, choose Set up your account, and receive one CivicDataForge key for REST or MCP."
      },
      {
        "channel": "Delivered permit audit",
        "url": "https://civicdataforge.pages.dev/permit-audit#buy",
        "price_usd": 4.99,
        "scope": "Up to 25 addresses in one supported permit jurisdiction."
      }
    ]
  },
  "stripe_permit_audit": {
    "status": "zero_touch",
    "price": {
      "amount": 4.99,
      "currency": "USD",
      "cadence": "one_time"
    },
    "intake_endpoint": "https://civicdataforge.pages.dev/api/permit-intake",
    "purchase_page": "https://civicdataforge.pages.dev/permit-audit#buy",
    "input": "one supported jurisdiction and 1-25 street addresses",
    "prepayment_rule": "The intake endpoint rejects unsupported jurisdiction, invalid addresses, duplicates, and portfolios over 25 before Stripe opens.",
    "preflight_result": "The free intake returns supported coverage, one-row-per-property evidence estimate, exact price, checkout URL, and an opaque correlation_id without revealing the paid result.",
    "reconciliation": "The opaque correlation_id is the Stripe client_reference_id and remains visible in signed webhook and fulfillment receipts; addresses never appear in the payment URL.",
    "delivery": "https://civicdataforge.pages.dev/fulfillment?session_id={CHECKOUT_SESSION_ID}",
    "idempotency": "One Checkout Session can claim and dispatch one intake. Duplicate or retried Stripe events resume the same engagement without double fulfillment.",
    "failure_rule": "Transient source failure retries automatically. Persistent source failure remains receipt-bound and eligible for full-refund review."
  },
  "direct_x402_testnet": {
    "status": "public_testnet_validated_not_mainnet",
    "network": "eip155:84532",
    "price": "$0.10 test USDC",
    "evidence_endpoint": "https://civicdataforge-agent-commerce.neoaethel.workers.dev/v1/evidence",
    "a2a_send_endpoint": "https://civicdataforge-agent-commerce.neoaethel.workers.dev/a2a/v1/message:send",
    "agent_card": "https://civicdataforge.pages.dev/.well-known/agent-card.json",
    "discovery": "Both POST endpoints expose x402 v2 Bazaar metadata and passed Coinbase's public endpoint validator on 2026-08-24.",
    "boundary": "This lane uses Base Sepolia test tokens. It is an integration surface, not a revenue receipt or a claim that mainnet settlement is live."
  },
  "fulfillment": {
    "automatic": true,
    "civicdataforge_analyst_required": false,
    "starts_after_payment": true,
    "primary_delivery": "Authoritative evidence packet object in GATEWAY-PACKET in the same run default key-value store; the named-output synchronous endpoint returns that object.",
    "additional_delivery": [
      "optional one-attempt dataset mirror",
      "optional EVIDENCE-DOSSIER.md in the run key-value store",
      "evidence-state receipt hash",
      "final packet receipt hash",
      "source-rights ledger",
      "monitoring state"
    ],
    "terminal_states": [
      "EVIDENCE_FOUND",
      "NO_PUBLISHED_MATCH",
      "REVIEW_REQUIRED",
      "SOURCE_UNAVAILABLE",
      "SCOPE_INCOMPLETE"
    ],
    "review_required_rule": "REVIEW_REQUIRED is automatically delivered as an honest product state. It does not hold the order open and is never replaced with fabricated clearance.",
    "failed_source_rule": "SOURCE_UNAVAILABLE is delivered without charging the evidence-packet event; a source failure cannot masquerade as paid evidence.",
    "canonical_contract": {
      "schema_version": "civicdataforge.gateway-delivery.v2",
      "authoritative_storage": "same_run_default_key_value_store",
      "key": "GATEWAY-PACKET",
      "response_shape": "object",
      "run_sync_endpoint": "https://api.apify.com/v2/acts/civicdataforge~civicdataforge-evidence-gateway/run-sync?timeout=120&outputRecordKey=GATEWAY-PACKET",
      "dataset": "Optional one-attempt mirror. An empty, unavailable or unconfirmed mirror does not prove that the canonical packet is absent. Never start another paid run solely to repair that mirror.",
      "recovery": {
        "run_metadata": "GET https://api.apify.com/v2/actor-runs/{runId}",
        "key_value_record": "GET https://api.apify.com/v2/key-value-stores/{defaultKeyValueStoreId}/records/GATEWAY-PACKET",
        "rule": "Use defaultKeyValueStoreId from the same retained run. Verify input, receipt and provenance bindings; do not substitute another run or infer payment from row presence.",
        "authentication": "Caller-owned Apify credentials scoped to that run, or an authorized service recovery path. CivicDataForge first-party MCP keys do not grant account storage or run-management access."
      },
      "mcp": "Apify MCP may return run or dataset pointers rather than this canonical object. Retain the run identifier and follow its authorized canonical recovery path; a pointer or empty mirror is not evidence that fulfillment is complete or absent.",
      "first_party_mcp_recovery": {
        "endpoint": "POST https://civicdataforge.pages.dev/mcp",
        "method": "tools/call",
        "retry": "Repeat the original authenticated request with the same JSON-RPC id, arguments and Idempotency-Key. An isError:true response with state UNRESOLVED and retry_same_request:true is pending, not fulfilled.",
        "confirmation": "The service binds the retained run, effective stored input and canonical GATEWAY-PACKET before returning evidence. It does not disclose account run or storage handles to first-party key holders or create a new run for a retry.",
        "large_packet": "Large canonical packets may be returned in content[0].text without a duplicated structuredContent field. Parse the complete text JSON; an absent structuredContent field alone is not failure."
      },
      "source_failure": "An explicit redacted SOURCE_UNAVAILABLE packet is the free diagnostic exception; it is not paid evidence or an eligibility decision.",
      "official_reference": "https://docs.apify.com/api/v2/actor-run-sync-post"
    }
  },
  "recurrence": {
    "operator": "buyer agent or buyer-owned scheduler",
    "civicdataforge_manual_setup_required": false,
    "method": "Repeat paid calls on the buyer's chosen cadence and supply previousReceiptHash when using gateway change-state comparison. The STR Actor also supports complete-scope named baselines, scheduled runs, diffs, and signed webhook delivery.",
    "boundary": "Apify agentic-payment tokens do not currently create platform schedules or integrations. The buyer agent controls cadence, so CivicDataForge fulfillment remains automatic without claiming that an Apify schedule was purchased."
  },
  "human_service_boundary": {
    "machine_catalog_includes_manual_services": true,
    "excluded": [
      "$500 managed monitoring pilot"
    ],
    "included": [
      "$4.99 zero-touch Permit Evidence Audit",
      "$99 zero-touch India Company Evidence Audit"
    ],
    "reason": "The two bounded Stripe audits now dispatch and deliver automatically. The managed monitoring subscription still includes buyer-selected setup and remains outside the zero-touch machine catalog."
  },
  "official_protocol_references": {
    "apify_agentic_payments": "https://docs.apify.com/integrations/mcp#agentic-payments",
    "apify_x402": "https://docs.apify.com/integrations/x402",
    "apify_monetization": "https://docs.apify.com/actors/publishing/monetize",
    "x402_seller": "https://docs.cdp.coinbase.com/x402/seller/quickstart",
    "x402_bazaar": "https://docs.cdp.coinbase.com/x402/seller/get-discovered",
    "a2a_specification": "https://a2a-protocol.org/latest/specification/"
  },
  "responsible_use": "Public-record research and compliance infrastructure only. A delivered no-match, review candidate, unavailable source, or incomplete scope is not legal clearance or an eligibility decision."
}
