{"ok":true,"stage":"stored_ai_web_report","version":"2.1.9","storage":{"scan_id":"3b31f516-5b77-4cfe-8915-eb05cd3d459a","created_at":"2026-10-02T18:19:01.034Z","completed_at":"2026-10-02T18:19:01.034Z","report_hash":"6b71038334e0c42fa89285057edf0107b79a3466abfe584e4eaa4d86b2be996f","duplicate_of_scan_id":"3f2dc21d-0276-471a-ba0c-958d6a6d5a1d","retention_class":"standard","source_api_version":"2.1.9","source_report_version":"1"},"presentation":{"presentation_version":"1","target":{"hostname":"docs.stripe.com","requested_url":"https://docs.stripe.com/","final_url":"https://docs.stripe.com/"},"hero":{"score":null,"max_score":100,"grade":null,"label":"insufficient_observation","score_status":"withheld","observation_status":"insufficient_observation","confidence":"low","is_scoreable":false},"access_observation":{"restricted":true,"classification":"captcha_challenge","provider":null,"mechanism":"captcha","vantage_scope":"current_scanner_vantage","note":"This describes what AIWebSignals observed from the current scanner vantage. It does not prove that every crawler or network receives the same response."},"categories":[{"key":"crawl_accessibility","name":"Crawl accessibility","score":null,"max_score":25,"percent":null,"state":"unknown","checks":{"origin_page_observed":false,"successful_2xx_response":true,"no_noindex_observed":null,"canonical_exact_match":null}},{"key":"ai_policy_visibility","name":"AI policy visibility","score":20,"max_score":20,"percent":100,"state":"excellent","checks":{"robots_found":true,"policies_observable":true,"all_monitored_policies_resolved":true,"robots_source_complete":true}},{"key":"discovery_surfaces","name":"Discovery surfaces","score":null,"max_score":20,"percent":null,"state":"unknown","checks":{"sitemap_status_resolved":true,"sitemap_found":true,"llms_txt_status_resolved":true,"llms_txt_found":true,"machine_readable_links_present":null,"markdown_surface_present":null,"sitemap_declared_in_robots":true}},{"key":"structured_data","name":"Structured data","score":null,"max_score":20,"percent":null,"state":"unknown","checks":{"json_ld_present":null,"json_ld_parses_cleanly":null,"schema_types_present":null}},{"key":"metadata_quality","name":"Metadata quality","score":null,"max_score":15,"percent":null,"state":"unknown","checks":{"title_present":null,"meta_description_present":null,"language_present":null,"open_graph_present":null,"canonical_present":null}}],"crawler_policy":{"monitored_count":8,"known_count":8,"allowed_count":8,"blocked_count":0,"unknown_count":0,"rows":[{"provider":"OpenAI","user_agent":"OAI-SearchBot","purpose":"search","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"search_and_user_requested"},{"provider":"Anthropic","user_agent":"Claude-SearchBot","purpose":"search","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"search_and_user_requested"},{"provider":"Anthropic","user_agent":"Claude-User","purpose":"user_requested","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"search_and_user_requested"},{"provider":"Perplexity","user_agent":"PerplexityBot","purpose":"search","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"search_and_user_requested"},{"provider":"OpenAI","user_agent":"OAI-AdsBot","purpose":"advertising_validation","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"advertising_validation"},{"provider":"OpenAI","user_agent":"GPTBot","purpose":"training","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"training_controls"},{"provider":"Anthropic","user_agent":"ClaudeBot","purpose":"training","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"training_controls"},{"provider":"Google","user_agent":"Google-Extended","purpose":"training_and_grounding_control","policy":"allowed","source":"wildcard_group","identity_type":"robots_product_token","http_user_agent_identity":false,"identifier_label":"Robots product token","identity_note":"Google-Extended has no separate HTTP request User-Agent; Google documents it as a robots.txt product-control token.","group":"training_controls"}]},"findings":{"count":3,"counts":{"critical":2,"high":0,"medium":0,"info":1},"items":[{"id":"access-restriction-captcha_challenge","severity":"critical","category":"crawl_accessibility","title":"CAPTCHA blocked this observation","summary":"A CAPTCHA verification surface was returned instead of the public origin page.","evidence":["classification=captcha_challenge","provider=unresolved","mechanism=captcha","vantage_scope=current_scanner_vantage"],"recommendation":"Confirm whether legitimate search and AI retrieval clients can access the intended public content without interactive verification."},{"id":"origin-not-observed","severity":"critical","category":"crawl_accessibility","title":"Origin page was not reliably observed","summary":"The scanner received a challenge, interstitial, non-HTML response, or other response that could not be safely attributed to the actual homepage.","evidence":["homepage.status=suspected_interstitial","homepage.response_classification=captcha_challenge","homepage.http_status=200"],"recommendation":"Allow the scanner to receive the normal public homepage response, then rerun the report before treating downstream metadata or indexability as authoritative."},{"id":"homepage-truncated","severity":"info","category":"technical","title":"Homepage exceeded the bounded inspection limit","summary":"The scanner intentionally stopped reading the homepage after its configured byte limit.","evidence":["bytes_read=786432","byte_limit=786432"],"recommendation":"No action is required solely because of this finding; some late-document signals may not have been observed."}]},"surfaces":{"homepage_observed":false,"robots_found":true,"robots_policy_resolved":true,"llms_txt_found":true,"llms_txt_status_resolved":true,"sitemap_found":true,"sitemap_status_resolved":true,"json_ld_found":null,"canonical_found":null,"machine_readable_link_count":null},"links":{"scan_id":"3b31f516-5b77-4cfe-8915-eb05cd3d459a","stored_report_api_path":"/report/3b31f516-5b77-4cfe-8915-eb05cd3d459a","suggested_public_report_path":"/app?scan_id=3b31f516-5b77-4cfe-8915-eb05cd3d459a"},"disclosure":{"score_interpretation":"The score measures observable technical readiness and machine-readable discovery surfaces. It does not estimate traffic, rankings, model citations, or business value.","unknown_treatment":"Unknown or challenge-obscured signals are represented as null and do not count as failures. The overall score is withheld whenever required scoring categories are not safely observable.","crawler_identity_semantics":"Rows marked robots_product_token describe robots.txt controls, not independently observable HTTP crawler identities."},"vantage_observation":{"contract_version":"1","mode":"single_vantage","attempt_count":1,"observed_count":0,"restricted_count":1,"unresolved_count":0,"agreement":"not_tested","public_origin_observable":false,"vantage_restricted":true,"vantage_disagreement":false,"scoring_effect":"none_contract_only","attempts":[{"id":"primary_worker","role":"primary","source":"cloudflare_worker","state":"access_restricted","origin_page_observed":false,"classification":"captcha_challenge","provider":null,"mechanism":"captcha","http_status":null,"confidence":"low"}],"note":"Only the current scanner vantage has been recorded. This result should not be generalized to every crawler or network."}},"report":{"report_version":"1","profile":"ai_web_readiness","target":{"hostname":"docs.stripe.com","requested_url":"https://docs.stripe.com/","final_url":"https://docs.stripe.com/"},"observation":{"status":"insufficient_observation","confidence":"low","origin_page_observed":false,"response_classification":"captcha_challenge","note":"The scanner could not safely attribute the observed homepage response to the origin page, so the overall score is intentionally withheld.","vantage_observation":{"contract_version":"1","mode":"single_vantage","attempt_count":1,"observed_count":0,"restricted_count":1,"unresolved_count":0,"agreement":"not_tested","public_origin_observable":false,"vantage_restricted":true,"vantage_disagreement":false,"scoring_effect":"none_contract_only","attempts":[{"id":"primary_worker","role":"primary","source":"cloudflare_worker","state":"access_restricted","origin_page_observed":false,"classification":"captcha_challenge","provider":null,"mechanism":"captcha","http_status":null,"confidence":"low"}],"note":"Only the current scanner vantage has been recorded. This result should not be generalized to every crawler or network."}},"overall":{"score":null,"max_score":100,"grade":null,"label":"insufficient_observation","score_status":"withheld"},"categories":{"crawl_accessibility":{"name":"Crawl accessibility","score":null,"max_score":25,"percent":null,"checks":{"origin_page_observed":false,"successful_2xx_response":true,"no_noindex_observed":null,"canonical_exact_match":null}},"ai_policy_visibility":{"name":"AI policy visibility","score":20,"max_score":20,"percent":100,"checks":{"robots_found":true,"policies_observable":true,"all_monitored_policies_resolved":true,"robots_source_complete":true}},"discovery_surfaces":{"name":"Discovery surfaces","score":null,"max_score":20,"percent":null,"checks":{"sitemap_status_resolved":true,"sitemap_found":true,"llms_txt_status_resolved":true,"llms_txt_found":true,"machine_readable_links_present":null,"markdown_surface_present":null,"sitemap_declared_in_robots":true}},"structured_data":{"name":"Structured data","score":null,"max_score":20,"percent":null,"checks":{"json_ld_present":null,"json_ld_parses_cleanly":null,"schema_types_present":null}},"metadata_quality":{"name":"Metadata quality","score":null,"max_score":15,"percent":null,"checks":{"title_present":null,"meta_description_present":null,"language_present":null,"open_graph_present":null,"canonical_present":null}}},"ai_crawler_policy":{"monitored_count":8,"known_count":8,"allowed_count":8,"blocked_count":0,"unknown_count":0,"search_and_user_requested":[{"provider":"OpenAI","user_agent":"OAI-SearchBot","purpose":"search","policy":"allowed","source":"wildcard_group"},{"provider":"Anthropic","user_agent":"Claude-SearchBot","purpose":"search","policy":"allowed","source":"wildcard_group"},{"provider":"Anthropic","user_agent":"Claude-User","purpose":"user_requested","policy":"allowed","source":"wildcard_group"},{"provider":"Perplexity","user_agent":"PerplexityBot","purpose":"search","policy":"allowed","source":"wildcard_group"}],"advertising_validation":[{"provider":"OpenAI","user_agent":"OAI-AdsBot","purpose":"advertising_validation","policy":"allowed","source":"wildcard_group"}],"training_controls":[{"provider":"OpenAI","user_agent":"GPTBot","purpose":"training","policy":"allowed","source":"wildcard_group"},{"provider":"Anthropic","user_agent":"ClaudeBot","purpose":"training","policy":"allowed","source":"wildcard_group"},{"provider":"Google","user_agent":"Google-Extended","purpose":"training_and_grounding_control","policy":"allowed","source":"wildcard_group"}]},"surface_summary":{"homepage_observed":false,"robots_found":true,"robots_policy_resolved":true,"llms_txt_found":true,"llms_txt_status_resolved":true,"sitemap_found":true,"sitemap_status_resolved":true,"json_ld_found":null,"canonical_found":null,"machine_readable_link_count":null},"findings":[{"id":"origin-not-observed","severity":"critical","category":"crawl_accessibility","title":"Origin page was not reliably observed","summary":"The scanner received a challenge, interstitial, non-HTML response, or other response that could not be safely attributed to the actual homepage.","evidence":["homepage.status=suspected_interstitial","homepage.response_classification=captcha_challenge","homepage.http_status=200"],"recommendation":"Allow the scanner to receive the normal public homepage response, then rerun the report before treating downstream metadata or indexability as authoritative."},{"id":"homepage-truncated","severity":"info","category":"technical","title":"Homepage exceeded the bounded inspection limit","summary":"The scanner intentionally stopped reading the homepage after its configured byte limit.","evidence":["bytes_read=786432","byte_limit=786432"],"recommendation":"No action is required solely because of this finding; some late-document signals may not have been observed."}],"methodology":{"score_interpretation":"The score measures observable technical readiness and machine-readable discovery surfaces. It does not estimate traffic, rankings, model citations, or business value.","unknown_treatment":"Unknown or challenge-obscured signals are represented as null and do not count as failures. The overall score is withheld whenever required scoring categories are not safely observable.","policy_neutrality":"Blocking training crawlers is treated as an owner policy choice and is not scored as a defect. Restrictions on search or user-requested retrieval are surfaced separately because they may affect AI discovery goals.","edge_access_treatment":"When identified scanner traffic and browser-compatible public traffic are treated differently, AIWebSignals reports that as a current-vantage observation. It does not infer that a named provider crawler receives the same treatment.","llms_txt_treatment":"llms.txt contributes modestly to discovery scoring because it is an emerging proposal, not a universal web or ranking requirement.","bounded_fetching":"Large resources are intentionally capped; truncation is reported rather than hidden."}},"scan":{"total_duration_ms":1852},"vantage_observation":{"contract_version":"1","mode":"single_vantage","attempt_count":1,"observed_count":0,"restricted_count":1,"unresolved_count":0,"agreement":"not_tested","public_origin_observable":false,"vantage_restricted":true,"vantage_disagreement":false,"scoring_effect":"none_contract_only","attempts":[{"id":"primary_worker","role":"primary","source":"cloudflare_worker","state":"access_restricted","origin_page_observed":false,"classification":"captcha_challenge","provider":null,"mechanism":"captcha","http_status":null,"confidence":"low"}],"note":"Only the current scanner vantage has been recorded. This result should not be generalized to every crawler or network."},"counterparty_readiness":{"assessment_version":"0.1","profile":"agent_counterparty_readiness","target":{"hostname":"docs.stripe.com","requested_url":"https://docs.stripe.com/","final_url":"https://docs.stripe.com/"},"status":"partial_evidence","score":null,"score_status":"withheld","evidence_summary":{"applicable_checks":25,"known_checks":2,"observed_checks":2,"unknown_checks":23,"evidence_coverage_percent":8,"direct_observation_percent":8},"axes":{"discovery_clarity":{"axis_id":"discovery_clarity","name":"Discovery clarity","description":"Can a machine participant determine what the service is, whether it is publicly reachable, and which machine-readable discovery surfaces are available?","status":"partially_evidenced","coverage":{"applicable_checks":5,"known_checks":2,"observed_checks":2,"present_checks":2,"absent_checks":0,"unknown_checks":3,"evidence_coverage_percent":40,"direct_observation_percent":40},"checks":[{"check_id":"origin_observable","name":"Public origin can be safely observed","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":{"check_id":"origin_observable","state":"unknown","source_type":"public_scan","source_ref":"ai_web_readiness.observation.origin_page_observed","observed_at":null,"detail":"The public scanner did not safely establish the origin page; this remains unknown rather than a failure."},"evidence":[{"check_id":"origin_observable","state":"unknown","source_type":"public_scan","source_ref":"ai_web_readiness.observation.origin_page_observed","observed_at":null,"detail":"The public scanner did not safely establish the origin page; this remains unknown rather than a failure."}]},{"check_id":"crawler_policy_resolvable","name":"Crawler policy can be resolved","status":"observed_present","conflict":false,"evidence_level":"observed","selected_evidence":{"check_id":"crawler_policy_resolvable","state":"observed_present","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary.robots_policy_resolved","observed_at":null,"detail":"At least one monitored AI crawler policy was resolved from the observed robots.txt surface."},"evidence":[{"check_id":"crawler_policy_resolvable","state":"observed_present","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary.robots_policy_resolved","observed_at":null,"detail":"At least one monitored AI crawler policy was resolved from the observed robots.txt surface."}]},{"check_id":"machine_discovery_surface","name":"At least one useful machine discovery surface is exposed","status":"observed_present","conflict":false,"evidence_level":"observed","selected_evidence":{"check_id":"machine_discovery_surface","state":"observed_present","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary","observed_at":null,"detail":"The public scan observed at least one sitemap, llms.txt resource, or machine-readable link."},"evidence":[{"check_id":"machine_discovery_surface","state":"observed_present","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary","observed_at":null,"detail":"The public scan observed at least one sitemap, llms.txt resource, or machine-readable link."}]},{"check_id":"structured_description","name":"Structured description is exposed","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":{"check_id":"structured_description","state":"unknown","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary.json_ld_found","observed_at":null,"detail":"Structured description could not be safely determined from the public scan."},"evidence":[{"check_id":"structured_description","state":"unknown","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary.json_ld_found","observed_at":null,"detail":"Structured description could not be safely determined from the public scan."}]},{"check_id":"canonical_identity","name":"Canonical public identity is explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":{"check_id":"canonical_identity","state":"unknown","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary.canonical_found","observed_at":null,"detail":"Canonical identity could not be safely determined from the public scan."},"evidence":[{"check_id":"canonical_identity","state":"unknown","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary.canonical_found","observed_at":null,"detail":"Canonical identity could not be safely determined from the public scan."}]}],"next_action":{"action_type":"collect_evidence","check_id":"origin_observable","check_name":"Public origin can be safely observed","action":"Confirm the public origin can be observed without a challenge or intermediary obscuring the response."}},"authorization_clarity":{"axis_id":"authorization_clarity","name":"Authorization clarity","description":"Can a machine participant determine the identity, mandate, permission, approval, expiry, and revocation boundaries that apply before consequential action?","status":"insufficient_evidence","coverage":{"applicable_checks":4,"known_checks":0,"observed_checks":0,"present_checks":0,"absent_checks":0,"unknown_checks":4,"evidence_coverage_percent":0,"direct_observation_percent":0},"checks":[{"check_id":"auth_requirements_declared","name":"Authentication requirements are machine-readable","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"capability_scope_declared","name":"Permitted capability or mandate scope is machine-readable","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"human_approval_boundary_declared","name":"Human-approval boundaries are explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"authorization_expiry_or_revocation_declared","name":"Expiry or revocation semantics are explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]}],"next_action":{"action_type":"collect_evidence","check_id":"auth_requirements_declared","check_name":"Authentication requirements are machine-readable","action":"Document whether authentication is required and which credential class applies before any consequential call."}},"commercial_determinism":{"axis_id":"commercial_determinism","name":"Commercial determinism","description":"Can an agent determine the commercial unit, price/quote lifetime, and retry/idempotency charging semantics before authorizing an effectful paid operation?","status":"insufficient_evidence","coverage":{"applicable_checks":4,"known_checks":0,"observed_checks":0,"present_checks":0,"absent_checks":0,"unknown_checks":4,"evidence_coverage_percent":0,"direct_observation_percent":0},"checks":[{"check_id":"price_or_unit_declared","name":"Price and unit of work are machine-readable","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"quote_expiry_declared","name":"Quote or price-validity lifetime is explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"retry_charge_semantics_declared","name":"Retry, timeout, partial-result, and charging semantics are explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"idempotency_semantics_declared","name":"Idempotency semantics are explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]}],"next_action":{"action_type":"collect_evidence","check_id":"price_or_unit_declared","check_name":"Price and unit of work are machine-readable","action":"Publish the commercial unit of work and the price or pricing rule before authorization."}},"receipt_and_provenance":{"axis_id":"receipt_and_provenance","name":"Receipt + provenance","description":"Can a machine participant obtain enough durable evidence to reconcile an operation, transfer work safely, and distinguish request, execution, and outcome?","status":"insufficient_evidence","coverage":{"applicable_checks":4,"known_checks":0,"observed_checks":0,"present_checks":0,"absent_checks":0,"unknown_checks":4,"evidence_coverage_percent":0,"direct_observation_percent":0},"checks":[{"check_id":"durable_operation_id","name":"A durable operation/receipt identity is available","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"explicit_result_state","name":"Outcome state distinguishes success, failure, partial, and unknown","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"provenance_or_version_evidence","name":"Relevant artifact/version/provenance evidence is available","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"reconciliation_reference","name":"A durable reconciliation/status reference is available","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]}],"next_action":{"action_type":"collect_evidence","check_id":"durable_operation_id","check_name":"A durable operation/receipt identity is available","action":"Return a durable operation or receipt identifier for consequential work."}},"failure_and_recovery":{"axis_id":"failure_and_recovery","name":"Failure + recovery","description":"Can an agent understand rate limits, retry guidance, ambiguous states, and safe recovery paths instead of guessing after failure?","status":"insufficient_evidence","coverage":{"applicable_checks":4,"known_checks":0,"observed_checks":0,"present_checks":0,"absent_checks":0,"unknown_checks":4,"evidence_coverage_percent":0,"direct_observation_percent":0},"checks":[{"check_id":"rate_limit_guidance","name":"Rate-limit behavior and retry timing are explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"retry_guidance","name":"Retry-safe and retry-unsafe failures are distinguishable","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"partial_or_unknown_state","name":"Partial or unknown commit states are representable","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"recovery_or_reconciliation_path","name":"Recovery or reconciliation path is explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]}],"next_action":{"action_type":"collect_evidence","check_id":"rate_limit_guidance","check_name":"Rate-limit behavior and retry timing are explicit","action":"Publish machine-readable rate-limit and retry timing guidance."}},"privacy_and_minimization":{"axis_id":"privacy_and_minimization","name":"Privacy + minimization","description":"Does the service make clear what data is required, why it is required, how long it is retained, and how sensitive credentials/context are handled?","status":"insufficient_evidence","coverage":{"applicable_checks":4,"known_checks":0,"observed_checks":0,"present_checks":0,"absent_checks":0,"unknown_checks":4,"evidence_coverage_percent":0,"direct_observation_percent":0},"checks":[{"check_id":"required_data_declared","name":"Required input/context is bounded and declared","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"purpose_scope_declared","name":"Purpose/scope for collected data is explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"retention_declared","name":"Retention behavior is explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"credential_handling_declared","name":"Credential/secret handling boundary is explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]}],"next_action":{"action_type":"collect_evidence","check_id":"required_data_declared","check_name":"Required input/context is bounded and declared","action":"Declare the minimum data/context required for the capability."}}},"remediation_summary":{"conflicts":0,"gaps":0,"evidence_collection":6,"monitoring":0,"actions":[{"axis_id":"discovery_clarity","axis_name":"Discovery clarity","action_type":"collect_evidence","check_id":"origin_observable","check_name":"Public origin can be safely observed","action":"Confirm the public origin can be observed without a challenge or intermediary obscuring the response."},{"axis_id":"authorization_clarity","axis_name":"Authorization clarity","action_type":"collect_evidence","check_id":"auth_requirements_declared","check_name":"Authentication requirements are machine-readable","action":"Document whether authentication is required and which credential class applies before any consequential call."},{"axis_id":"commercial_determinism","axis_name":"Commercial determinism","action_type":"collect_evidence","check_id":"price_or_unit_declared","check_name":"Price and unit of work are machine-readable","action":"Publish the commercial unit of work and the price or pricing rule before authorization."},{"axis_id":"receipt_and_provenance","axis_name":"Receipt + provenance","action_type":"collect_evidence","check_id":"durable_operation_id","check_name":"A durable operation/receipt identity is available","action":"Return a durable operation or receipt identifier for consequential work."},{"axis_id":"failure_and_recovery","axis_name":"Failure + recovery","action_type":"collect_evidence","check_id":"rate_limit_guidance","check_name":"Rate-limit behavior and retry timing are explicit","action":"Publish machine-readable rate-limit and retry timing guidance."},{"axis_id":"privacy_and_minimization","axis_name":"Privacy + minimization","action_type":"collect_evidence","check_id":"required_data_declared","check_name":"Required input/context is bounded and declared","action":"Declare the minimum data/context required for the capability."}]},"methodology":{"purpose":"Evaluate whether a site or API exposes enough evidence to act as a safe, legible, and reliable counterparty to machine participants.","score_treatment":"No aggregate readiness score is calculated in this experimental profile. Coverage and evidence strength are reported instead, because most non-discovery claims require dedicated validation that the public readiness scanner does not yet perform.","unknown_treatment":"Unknown is not a failure. A check remains unknown when the relevant behavior was not safely observed or supplied by an explicit evidence source.","declaration_treatment":"Operator or external declarations are preserved as declared evidence and never upgraded to direct observation or certification.","conflict_treatment":"Conflicting present/absent evidence is surfaced explicitly. Stronger direct evidence may be selected for display, but the conflict is not hidden.","monetization_boundary":"This profile is intended to support operator-paid diagnostics, monitoring, validation, remediation, and evidence services. Basic machine discovery and public trust evidence should remain readable without charging machine participants."}},"evidence_report":{"report_version":"1","profile":"aiwebsignals_evidence_report","target":{"hostname":"docs.stripe.com","requested_url":"https://docs.stripe.com/","final_url":"https://docs.stripe.com/"},"headline":{"technical_readiness_score":null,"technical_readiness_max_score":100,"technical_readiness_score_status":"withheld","technical_readiness_grade":null,"technical_readiness_label":"insufficient_observation","observation_status":"insufficient_observation","confidence":"low","evidence_coverage_percent":27,"important_boundary":"The 0-100 score applies only to bounded public technical readiness. Counterparty dimensions remain evidence-coverage based unless directly validated."},"evidence_summary":{"applicable_checks":48,"known_checks":13,"unknown_checks":35,"directly_observed_checks":13,"declared_or_indirect_checks":0,"evidence_coverage_percent":27,"note":"Coverage measures how much of the defined assessment has evidence. It is not a quality score. Unknown is not treated as failure."},"dimensions":{"technical_readiness":[{"id":"crawl_accessibility","name":"Crawl accessibility","assessment_type":"scored_public_observation","score":null,"score_status":"withheld","state":"unknown","evidence_coverage_percent":50,"checks":{"origin_page_observed":false,"successful_2xx_response":true,"no_noindex_observed":null,"canonical_exact_match":null}},{"id":"ai_policy_visibility","name":"AI policy visibility","assessment_type":"scored_public_observation","score":100,"score_status":"calculated","state":"excellent","evidence_coverage_percent":100,"checks":{"robots_found":true,"policies_observable":true,"all_monitored_policies_resolved":true,"robots_source_complete":true}},{"id":"discovery_surfaces","name":"Discovery surfaces","assessment_type":"scored_public_observation","score":null,"score_status":"withheld","state":"unknown","evidence_coverage_percent":71,"checks":{"sitemap_status_resolved":true,"sitemap_found":true,"llms_txt_status_resolved":true,"llms_txt_found":true,"machine_readable_links_present":null,"markdown_surface_present":null,"sitemap_declared_in_robots":true}},{"id":"structured_data","name":"Structured data","assessment_type":"scored_public_observation","score":null,"score_status":"withheld","state":"unknown","evidence_coverage_percent":0,"checks":{"json_ld_present":null,"json_ld_parses_cleanly":null,"schema_types_present":null}},{"id":"metadata_quality","name":"Metadata quality","assessment_type":"scored_public_observation","score":null,"score_status":"withheld","state":"unknown","evidence_coverage_percent":0,"checks":{"title_present":null,"meta_description_present":null,"language_present":null,"open_graph_present":null,"canonical_present":null}}],"counterparty_readiness":[{"id":"discovery_clarity","name":"Discovery clarity","assessment_type":"evidence_coverage_unscored","score":null,"score_status":"withheld","state":"partially_evidenced","evidence_coverage_percent":40,"direct_observation_percent":40,"checks":[{"check_id":"origin_observable","name":"Public origin can be safely observed","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":{"check_id":"origin_observable","state":"unknown","source_type":"public_scan","source_ref":"ai_web_readiness.observation.origin_page_observed","observed_at":null,"detail":"The public scanner did not safely establish the origin page; this remains unknown rather than a failure."},"evidence":[{"check_id":"origin_observable","state":"unknown","source_type":"public_scan","source_ref":"ai_web_readiness.observation.origin_page_observed","observed_at":null,"detail":"The public scanner did not safely establish the origin page; this remains unknown rather than a failure."}]},{"check_id":"crawler_policy_resolvable","name":"Crawler policy can be resolved","status":"observed_present","conflict":false,"evidence_level":"observed","selected_evidence":{"check_id":"crawler_policy_resolvable","state":"observed_present","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary.robots_policy_resolved","observed_at":null,"detail":"At least one monitored AI crawler policy was resolved from the observed robots.txt surface."},"evidence":[{"check_id":"crawler_policy_resolvable","state":"observed_present","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary.robots_policy_resolved","observed_at":null,"detail":"At least one monitored AI crawler policy was resolved from the observed robots.txt surface."}]},{"check_id":"machine_discovery_surface","name":"At least one useful machine discovery surface is exposed","status":"observed_present","conflict":false,"evidence_level":"observed","selected_evidence":{"check_id":"machine_discovery_surface","state":"observed_present","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary","observed_at":null,"detail":"The public scan observed at least one sitemap, llms.txt resource, or machine-readable link."},"evidence":[{"check_id":"machine_discovery_surface","state":"observed_present","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary","observed_at":null,"detail":"The public scan observed at least one sitemap, llms.txt resource, or machine-readable link."}]},{"check_id":"structured_description","name":"Structured description is exposed","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":{"check_id":"structured_description","state":"unknown","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary.json_ld_found","observed_at":null,"detail":"Structured description could not be safely determined from the public scan."},"evidence":[{"check_id":"structured_description","state":"unknown","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary.json_ld_found","observed_at":null,"detail":"Structured description could not be safely determined from the public scan."}]},{"check_id":"canonical_identity","name":"Canonical public identity is explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":{"check_id":"canonical_identity","state":"unknown","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary.canonical_found","observed_at":null,"detail":"Canonical identity could not be safely determined from the public scan."},"evidence":[{"check_id":"canonical_identity","state":"unknown","source_type":"public_scan","source_ref":"ai_web_readiness.surface_summary.canonical_found","observed_at":null,"detail":"Canonical identity could not be safely determined from the public scan."}]}],"next_action":{"action_type":"collect_evidence","check_id":"origin_observable","check_name":"Public origin can be safely observed","action":"Confirm the public origin can be observed without a challenge or intermediary obscuring the response."}},{"id":"authorization_clarity","name":"Authorization clarity","assessment_type":"evidence_coverage_unscored","score":null,"score_status":"withheld","state":"insufficient_evidence","evidence_coverage_percent":0,"direct_observation_percent":0,"checks":[{"check_id":"auth_requirements_declared","name":"Authentication requirements are machine-readable","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"capability_scope_declared","name":"Permitted capability or mandate scope is machine-readable","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"human_approval_boundary_declared","name":"Human-approval boundaries are explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"authorization_expiry_or_revocation_declared","name":"Expiry or revocation semantics are explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]}],"next_action":{"action_type":"collect_evidence","check_id":"auth_requirements_declared","check_name":"Authentication requirements are machine-readable","action":"Document whether authentication is required and which credential class applies before any consequential call."}},{"id":"commercial_determinism","name":"Commercial determinism","assessment_type":"evidence_coverage_unscored","score":null,"score_status":"withheld","state":"insufficient_evidence","evidence_coverage_percent":0,"direct_observation_percent":0,"checks":[{"check_id":"price_or_unit_declared","name":"Price and unit of work are machine-readable","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"quote_expiry_declared","name":"Quote or price-validity lifetime is explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"retry_charge_semantics_declared","name":"Retry, timeout, partial-result, and charging semantics are explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"idempotency_semantics_declared","name":"Idempotency semantics are explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]}],"next_action":{"action_type":"collect_evidence","check_id":"price_or_unit_declared","check_name":"Price and unit of work are machine-readable","action":"Publish the commercial unit of work and the price or pricing rule before authorization."}},{"id":"receipt_and_provenance","name":"Receipt + provenance","assessment_type":"evidence_coverage_unscored","score":null,"score_status":"withheld","state":"insufficient_evidence","evidence_coverage_percent":0,"direct_observation_percent":0,"checks":[{"check_id":"durable_operation_id","name":"A durable operation/receipt identity is available","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"explicit_result_state","name":"Outcome state distinguishes success, failure, partial, and unknown","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"provenance_or_version_evidence","name":"Relevant artifact/version/provenance evidence is available","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"reconciliation_reference","name":"A durable reconciliation/status reference is available","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]}],"next_action":{"action_type":"collect_evidence","check_id":"durable_operation_id","check_name":"A durable operation/receipt identity is available","action":"Return a durable operation or receipt identifier for consequential work."}},{"id":"failure_and_recovery","name":"Failure + recovery","assessment_type":"evidence_coverage_unscored","score":null,"score_status":"withheld","state":"insufficient_evidence","evidence_coverage_percent":0,"direct_observation_percent":0,"checks":[{"check_id":"rate_limit_guidance","name":"Rate-limit behavior and retry timing are explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"retry_guidance","name":"Retry-safe and retry-unsafe failures are distinguishable","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"partial_or_unknown_state","name":"Partial or unknown commit states are representable","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"recovery_or_reconciliation_path","name":"Recovery or reconciliation path is explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]}],"next_action":{"action_type":"collect_evidence","check_id":"rate_limit_guidance","check_name":"Rate-limit behavior and retry timing are explicit","action":"Publish machine-readable rate-limit and retry timing guidance."}},{"id":"privacy_and_minimization","name":"Privacy + minimization","assessment_type":"evidence_coverage_unscored","score":null,"score_status":"withheld","state":"insufficient_evidence","evidence_coverage_percent":0,"direct_observation_percent":0,"checks":[{"check_id":"required_data_declared","name":"Required input/context is bounded and declared","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"purpose_scope_declared","name":"Purpose/scope for collected data is explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"retention_declared","name":"Retention behavior is explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]},{"check_id":"credential_handling_declared","name":"Credential/secret handling boundary is explicit","status":"unknown","conflict":false,"evidence_level":"unknown","selected_evidence":null,"evidence":[]}],"next_action":{"action_type":"collect_evidence","check_id":"required_data_declared","check_name":"Required input/context is bounded and declared","action":"Declare the minimum data/context required for the capability."}}]},"crawler_policy":{"monitored_count":8,"known_count":8,"allowed_count":8,"blocked_count":0,"unknown_count":0,"rows":[{"provider":"OpenAI","user_agent":"OAI-SearchBot","purpose":"search","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"search_and_user_requested"},{"provider":"Anthropic","user_agent":"Claude-SearchBot","purpose":"search","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"search_and_user_requested"},{"provider":"Anthropic","user_agent":"Claude-User","purpose":"user_requested","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"search_and_user_requested"},{"provider":"Perplexity","user_agent":"PerplexityBot","purpose":"search","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"search_and_user_requested"},{"provider":"OpenAI","user_agent":"OAI-AdsBot","purpose":"advertising_validation","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"advertising_validation"},{"provider":"OpenAI","user_agent":"GPTBot","purpose":"training","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"training_controls"},{"provider":"Anthropic","user_agent":"ClaudeBot","purpose":"training","policy":"allowed","source":"wildcard_group","identity_type":"crawler_identity","http_user_agent_identity":true,"identifier_label":"Crawler user-agent token","identity_note":null,"group":"training_controls"},{"provider":"Google","user_agent":"Google-Extended","purpose":"training_and_grounding_control","policy":"allowed","source":"wildcard_group","identity_type":"robots_product_token","http_user_agent_identity":false,"identifier_label":"Robots product token","identity_note":"Google-Extended has no separate HTTP request User-Agent; Google documents it as a robots.txt product-control token.","group":"training_controls"}]},"public_surfaces":{"homepage_observed":false,"robots_found":true,"robots_policy_resolved":true,"llms_txt_found":true,"llms_txt_status_resolved":true,"sitemap_found":true,"sitemap_status_resolved":true,"json_ld_found":null,"canonical_found":null,"machine_readable_link_count":null},"recommendations":[{"id":"origin-not-observed","priority":"P1","source":"public_readiness_scan","category":"crawl_accessibility","title":"Origin page was not reliably observed","evidence":["homepage.status=suspected_interstitial","homepage.response_classification=captcha_challenge","homepage.http_status=200"],"interpretation":"The scanner received a challenge, interstitial, non-HTML response, or other response that could not be safely attributed to the actual homepage.","action":"Allow the scanner to receive the normal public homepage response, then rerun the report before treating downstream metadata or indexability as authoritative.","verification":"Rerun the public scan and compare origin, indexing, canonical, and access evidence."},{"id":"homepage-truncated","priority":"P3","source":"public_readiness_scan","category":"technical","title":"Homepage exceeded the bounded inspection limit","evidence":["bytes_read=786432","byte_limit=786432"],"interpretation":"The scanner intentionally stopped reading the homepage after its configured byte limit.","action":"No action is required solely because of this finding; some late-document signals may not have been observed.","verification":"Rerun the relevant AIWebSignals observation and compare the cited evidence before and after the change."},{"id":"counterparty-discovery_clarity","priority":"P3","source":"counterparty_readiness","category":"discovery_clarity","title":"Discovery clarity: Public origin can be safely observed","evidence":["The public scanner did not safely establish the origin page; this remains unknown rather than a failure."],"interpretation":"Can a machine participant determine what the service is, whether it is publicly reachable, and which machine-readable discovery surfaces are available?","action":"Confirm the public origin can be observed without a challenge or intermediary obscuring the response.","verification":"Collect or directly observe the missing evidence, then recompute this axis. Unknown remains unknown until evidence exists."},{"id":"counterparty-authorization_clarity","priority":"P3","source":"counterparty_readiness","category":"authorization_clarity","title":"Authorization clarity: Authentication requirements are machine-readable","evidence":[],"interpretation":"Can a machine participant determine the identity, mandate, permission, approval, expiry, and revocation boundaries that apply before consequential action?","action":"Document whether authentication is required and which credential class applies before any consequential call.","verification":"Collect or directly observe the missing evidence, then recompute this axis. Unknown remains unknown until evidence exists."},{"id":"counterparty-commercial_determinism","priority":"P3","source":"counterparty_readiness","category":"commercial_determinism","title":"Commercial determinism: Price and unit of work are machine-readable","evidence":[],"interpretation":"Can an agent determine the commercial unit, price/quote lifetime, and retry/idempotency charging semantics before authorizing an effectful paid operation?","action":"Publish the commercial unit of work and the price or pricing rule before authorization.","verification":"Collect or directly observe the missing evidence, then recompute this axis. Unknown remains unknown until evidence exists."},{"id":"counterparty-receipt_and_provenance","priority":"P3","source":"counterparty_readiness","category":"receipt_and_provenance","title":"Receipt + provenance: A durable operation/receipt identity is available","evidence":[],"interpretation":"Can a machine participant obtain enough durable evidence to reconcile an operation, transfer work safely, and distinguish request, execution, and outcome?","action":"Return a durable operation or receipt identifier for consequential work.","verification":"Collect or directly observe the missing evidence, then recompute this axis. Unknown remains unknown until evidence exists."},{"id":"counterparty-failure_and_recovery","priority":"P3","source":"counterparty_readiness","category":"failure_and_recovery","title":"Failure + recovery: Rate-limit behavior and retry timing are explicit","evidence":[],"interpretation":"Can an agent understand rate limits, retry guidance, ambiguous states, and safe recovery paths instead of guessing after failure?","action":"Publish machine-readable rate-limit and retry timing guidance.","verification":"Collect or directly observe the missing evidence, then recompute this axis. Unknown remains unknown until evidence exists."},{"id":"counterparty-privacy_and_minimization","priority":"P3","source":"counterparty_readiness","category":"privacy_and_minimization","title":"Privacy + minimization: Required input/context is bounded and declared","evidence":[],"interpretation":"Does the service make clear what data is required, why it is required, how long it is retained, and how sensitive credentials/context are handled?","action":"Declare the minimum data/context required for the capability.","verification":"Collect or directly observe the missing evidence, then recompute this axis. Unknown remains unknown until evidence exists."}],"evidence_boundary":{"observed_vs_inferred":"Direct observations, declarations, unknowns, and conflicts remain distinct. Missing evidence is not converted into a negative claim.","competitor_boundary":"Public competitor scans compare observable surfaces only. Private telemetry, authenticated behavior, internal policy, revenue, and first-party traffic remain unknown unless separately evidenced.","policy_boundary":"Crawler restrictions are reported as policy choices unless they directly prevent an explicitly intended capability.","counterparty_score_treatment":"No aggregate readiness score is calculated in this experimental profile. Coverage and evidence strength are reported instead, because most non-discovery claims require dedicated validation that the public readiness scanner does not yet perform."},"machine_readable":{"media_type":"application/json","canonical_report_api":"/report/3b31f516-5b77-4cfe-8915-eb05cd3d459a","public_report":"/app?scan_id=3b31f516-5b77-4cfe-8915-eb05cd3d459a"}}}