{"openapi":"3.1.0","info":{"title":"Compass by 402rates","version":"0.5.0","description":"Free synthetic agent tests, payment-terms inspection and resource discovery; paid payment ping.","x-guidance":"Free synthetic agent tests, payment-terms inspection and resource discovery; paid payment ping.","termsOfService":"https://402rates.com/data-terms/","x-legal":{"role":"informational_data_and_calculation_service","paidServiceAudience":"businesses_and_professional_agents_only","disclaimer":"Informational data and calculation service only. Not investment, legal, tax or accounting advice; not an offer, solicitation, recommendation, or determination of eligibility or suitability. Source and onchain data may be inaccurate, incomplete, delayed, stale or conflicting. Verify independently. The caller remains responsible for every decision and action; 402rates.com does not execute investment transactions or hold financial assets on the caller's behalf.","termsUrl":"https://402rates.com/data-terms/","privacyUrl":"https://402rates.com/datenschutz/","imprintUrl":"https://402rates.com/impressum/"},"contact":{"name":"402rates.com","url":"https://402rates.com/","email":"info@402rates.com"}},"externalDocs":{"description":"Agent-readable API documentation","url":"https://402rates.com/compass/llms.txt"},"x-provider":{"name":"Compass by 402rates","description":"Free synthetic agent tests, payment-terms inspection and resource discovery; paid payment ping.","category":"DEVELOPER_TOOLS","tags":["agent-testing","x402","integration"],"website":"https://402rates.com/compass/","docsUrl":"https://402rates.com/compass/llms.txt","termsUrl":"https://402rates.com/data-terms/","privacyUrl":"https://402rates.com/datenschutz/","imprintUrl":"https://402rates.com/impressum/","openApiUrl":"https://api.402rates.com/v1/compass/manifest"},"servers":[{"url":"https://api.402rates.com"}],"paths":{"/v1/tests/preflight":{"post":{"operationId":"compass_tests_preflight","summary":"Inspect x402 payment terms without making a payment","description":"Free inspection of supplied x402 v1/v2 payment terms against the SDK schema and optional network, asset, recipient and atomic budget constraints. Exact EVM profile checks only. No wallet connection, external fetch, signature verification or settlement. Other profiles are explicitly untested.","tags":["x402","testing","payment-terms","integration"],"x-product":"compass","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"challenge":{"type":"object","description":"Decoded PaymentRequired object from HTTP or MCP structuredContent. No signed payment or credentials."},"expected":{"type":"object","additionalProperties":false,"properties":{"network":{"type":"string"},"asset":{"type":"string"},"pay_to":{"type":"string"},"scheme":{"type":"string"},"max_amount_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"}},"description":"Optional exact terms. An atomic budget requires network and asset."}}},"example":{"challenge":{"x402Version":2,"resource":{"url":"https://example.invalid/paid-data"},"accepts":[{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x1111111111111111111111111111111111111111","amount":"1000","maxTimeoutSeconds":60}]},"expected":{"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","max_amount_atomic":"1000"}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["report_version","status"],"properties":{"report_version":{"type":"string","const":"1.0.0"},"status":{"type":"string"},"threshold_bps":{"type":"number"},"data":{"type":"array","items":{"type":"object"}}},"additionalProperties":true},"example":{"report_version":"1.0.0","schema_reference":"@x402/core@2.17.0","status":"checks_passed","checks":[{"code":"x402_schema","status":"pass","option":null},{"code":"positive_atomic_amount","status":"pass","option":0},{"code":"integer_timeout","status":"pass","option":0},{"code":"evm_address_syntax","status":"pass","option":0},{"code":"exact_evm_profile","status":"pass","option":0},{"code":"expected_network","status":"pass","option":0},{"code":"expected_asset","status":"pass","option":0},{"code":"expected_max_amount_atomic","status":"pass","option":0}],"options":[{"index":0,"structural_status":"checked","matches_expected":true}],"matching_options":[0],"not_checked":["signature","wallet_balance","token_contract","facilitator_availability","settlement","client_retry_behavior"],"limitations":["Only supplied payment terms are inspected. No URL is fetched and no payment is made.","Checks cover exact EVM terms; other payment profiles remain untested.","A positive timeout is a duration, not proof that a signed authorization is unexpired.","Matching terms do not establish recipient identity, token authenticity or successful payment."]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"405":{"description":"POST required","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"413":{"description":"Input exceeds 196608 bytes","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"415":{"description":"application/json required","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"429":{"description":"Free request limit reached","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}}}}},"/v1/tests/cases":{"get":{"operationId":"compass_tests_cases","summary":"List the synthetic agent test cases","description":"Free catalogue of versioned synthetic cases: unavailable confirmation, retry credits and attempt limits, and partial results with continuation. No run, wallet or payment.","tags":["agent-testing","synthetic","timeline"],"x-product":"compass","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"cases":[{"report_version":"1.0.0","case_id":"commit_then_confirmation_unavailable","case_version":"1.0.0","environment":"synthetic","price_usd":0,"account_required":false,"task":{"item":"synthetic_order","quantity":1,"intended_operation_records":1},"mechanism":"The first committed action returns an application-level error in place of its confirmation. State remains queryable. Reusing an action key with identical input returns the existing operation; a new key can create another operation.","limits":{"active_seconds":300,"retention_seconds":86400,"action_calls":20,"read_calls":40,"input_bytes":8192,"retained_runs":500,"active_runs":100},"costs":"No real purchase or payment. Caller model and hosting costs can still accrue.","repeat":{"case_version_pinned":true,"previous_run_link_optional":true,"previous_run_must_be_finalized":true,"comparison_available_until_previous_run_expires":true},"report_schema_url":"https://402rates.com/schemas/agent-test-report-v1.json","coverage":{"available":["application_confirmation_unavailable_after_commit"],"not_exercised":["network_disconnect","real_payment","prompt_injection","budget_enforcement","cancellation","other_tools"]},"limitations":["One synthetic task and one run; no general reliability conclusion.","Calls can originate from client middleware or agent orchestration.","Server observations do not establish what the client received.","Model identity and configuration changes are not independently verified.","The case is documented and is not a blinded benchmark."],"privacy":"Run tokens grant access to synthetic records only. Server storage retains token hashes, not tokens. MCP clients may retain arguments in their own history. Reports expire 24 hours after run creation."},{"report_version":"2.0.0","case_id":"retry_budget_and_attempt_limit","case_version":"1.0.0","environment":"synthetic","price_usd":0,"account_required":false,"task":{"objective":"Obtain one synthetic operation within the stated credit budget and action-call limit; record the outcome if it cannot be obtained within those limits."},"mechanism":"The first four independent attempts return a synthetic failure. The fifth and later independent attempts return a synthetic operation. Identical keys and input replay the stored outcome at zero additional credits; every action invocation counts toward the caller's action-call limit. Caller limits are observed, not enforced; the separate service cap still applies.","limits":{"active_seconds":300,"retention_seconds":86400,"action_calls":20,"read_calls":40,"input_bytes":8192,"retained_runs":500,"active_runs":100},"costs":"No real purchase or payment. Caller model and hosting costs can still accrue.","repeat":{"case_version_pinned":true,"previous_run_link_optional":true,"previous_run_must_be_finalized":true,"comparison_available_until_previous_run_expires":true},"report_schema_url":"https://402rates.com/schemas/agent-test-report-v2.json","coverage":{"available":["synthetic_retry_costs","declared_attempt_and_credit_limits"],"not_exercised":["real_payment","network_disconnect","prompt_injection","other_tools","general_agent_reliability"]},"limitations":["One synthetic task and one run; no general reliability conclusion.","Calls can originate from client middleware or agent orchestration.","Server observations do not establish what the client received.","Model identity and configuration changes are not independently verified.","The case is documented and is not a blinded benchmark."],"privacy":"Run tokens grant access to synthetic records only. Server storage retains token hashes, not tokens. MCP clients may retain arguments in their own history. Reports expire 24 hours after run creation.","scenario":{"variant":"budget_first","budget_credits":5,"cost_per_independent_attempt":2,"action_call_limit":4,"independent_attempts_before_success":4},"actions":[{"action_type":"attempt","quantity":1}]},{"report_version":"2.0.0","case_id":"partial_result_with_continuation","case_version":"1.0.0","environment":"synthetic","price_usd":0,"account_required":false,"task":{"objective":"Retrieve the complete synthetic dataset and submit its record identifiers.","expected_record_count":6},"mechanism":"The first page contains three of six synthetic records and a continuation cursor. A second page is available. The caller submits the collected identifiers; the service records even an incomplete submission without judging it.","limits":{"active_seconds":300,"retention_seconds":86400,"action_calls":20,"read_calls":40,"input_bytes":8192,"retained_runs":500,"active_runs":100},"costs":"No real purchase or payment. Caller model and hosting costs can still accrue.","repeat":{"case_version_pinned":true,"previous_run_link_optional":true,"previous_run_must_be_finalized":true,"comparison_available_until_previous_run_expires":true},"report_schema_url":"https://402rates.com/schemas/agent-test-report-v2.json","coverage":{"available":["partial_response","continuation","submitted_record_identifiers"],"not_exercised":["real_payment","network_disconnect","prompt_injection","other_tools","general_agent_reliability"]},"limitations":["One synthetic task and one run; no general reliability conclusion.","Calls can originate from client middleware or agent orchestration.","Server observations do not establish what the client received.","Model identity and configuration changes are not independently verified.","The case is documented and is not a blinded benchmark."],"privacy":"Run tokens grant access to synthetic records only. Server storage retains token hashes, not tokens. MCP clients may retain arguments in their own history. Reports expire 24 hours after run creation.","scenario":{"variant":"standard","expected_record_count":6,"page_size":3},"actions":[{"action_type":"get_page","cursor":"first"},{"action_type":"get_page","cursor":"second"},{"action_type":"submit_result","record_ids":["item-1"]}]}],"budget_variants":["budget_first","attempts_first"]}}}},"400":{"description":"Invalid test input","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"401":{"description":"Run token required or invalid","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"409":{"description":"Run or action conflict","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"410":{"description":"Run no longer available","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"429":{"description":"Test limit reached","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"503":{"description":"Test service unavailable","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}}}}},"/v1/tests/case":{"get":{"operationId":"compass_tests_case","summary":"Describe a synthetic agent test","description":"Free description of a versioned synthetic task, its limits and coverage. Optional case selection; omitted selection describes the original confirmation case. No run, payment or wallet.","tags":["agent-testing","synthetic","timeline"],"x-product":"compass","parameters":[{"name":"case_id","in":"query","schema":{"type":"string","maxLength":80,"description":"Versioned synthetic case identifier."}},{"name":"case_version","in":"query","schema":{"type":"string","maxLength":16,"description":"Exact case version. No implicit migration."}},{"name":"variant","in":"query","schema":{"type":"string","maxLength":32,"description":"Budget case: budget_first or attempts_first. Linked repeats retain the previous variant."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"report_version":"1.0.0","case_id":"commit_then_confirmation_unavailable","case_version":"1.0.0","environment":"synthetic","price_usd":0,"account_required":false,"task":{"item":"synthetic_order","quantity":1,"intended_operation_records":1},"mechanism":"The first committed action returns an application-level error in place of its confirmation. State remains queryable. Reusing an action key with identical input returns the existing operation; a new key can create another operation.","limits":{"active_seconds":300,"retention_seconds":86400,"action_calls":20,"read_calls":40,"input_bytes":8192,"retained_runs":500,"active_runs":100},"costs":"No real purchase or payment. Caller model and hosting costs can still accrue.","repeat":{"case_version_pinned":true,"previous_run_link_optional":true,"previous_run_must_be_finalized":true,"comparison_available_until_previous_run_expires":true},"report_schema_url":"https://402rates.com/schemas/agent-test-report-v1.json","coverage":{"available":["application_confirmation_unavailable_after_commit"],"not_exercised":["network_disconnect","real_payment","prompt_injection","budget_enforcement","cancellation","other_tools"]},"limitations":["One synthetic task and one run; no general reliability conclusion.","Calls can originate from client middleware or agent orchestration.","Server observations do not establish what the client received.","Model identity and configuration changes are not independently verified.","The case is documented and is not a blinded benchmark."],"privacy":"Run tokens grant access to synthetic records only. Server storage retains token hashes, not tokens. MCP clients may retain arguments in their own history. Reports expire 24 hours after run creation."}}}},"400":{"description":"Invalid test input","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"401":{"description":"Run token required or invalid","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"409":{"description":"Run or action conflict","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"410":{"description":"Run no longer available","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"429":{"description":"Test limit reached","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"503":{"description":"Test service unavailable","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}}}}},"/v1/tests/run":{"post":{"operationId":"compass_tests_run","summary":"Start or repeat a synthetic agent test","description":"Create a free bounded synthetic run without an account. An optional finalized previous run and its token link a repeat of the same case version and scenario. No real purchase. Caller model costs remain external.","tags":["agent-testing","synthetic","timeline"],"x-product":"compass","parameters":[{"name":"X-Test-Access-Token","description":"Short-lived run token. Required for existing runs; previous-run token for a linked repeat.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$","description":"Secret short-lived run token. Omitted from reports. MCP client history may retain this argument."},"in":"header","required":false}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"case_id":{"type":"string","maxLength":80,"description":"Versioned synthetic case identifier."},"case_version":{"type":"string","maxLength":16,"description":"Exact case version. No implicit migration."},"variant":{"type":"string","maxLength":32,"description":"Budget case: budget_first or attempts_first. Linked repeats retain the previous variant."},"previous_run_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","description":"Optional finalized run to repeat. Its access token authenticates this start."},"configuration_changed":{"type":"boolean","description":"Optional caller-declared change since the previous run; not independently verified."}}},"example":{}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"report_version":"1.0.0","status":"input_required","case_id":"commit_then_confirmation_unavailable","case_version":"1.0.0"}}}},"400":{"description":"Invalid test input","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"401":{"description":"Run token required or invalid","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"405":{"description":"POST required","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"409":{"description":"Run or action conflict","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"410":{"description":"Run no longer available","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"413":{"description":"Input exceeds 8192 bytes","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"415":{"description":"application/json required","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"429":{"description":"Test limit reached","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"503":{"description":"Test service unavailable","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}}}}},"/v1/tests/action":{"post":{"operationId":"compass_tests_action","summary":"Execute a synthetic test action","description":"Execute the selected case's action: synthetic order, retry attempt, page retrieval or result submission. Identical keys and input replay the stored outcome. Calls, effects and simulated credits remain observable. No real payment.","tags":["agent-testing","synthetic","timeline"],"x-product":"compass","parameters":[{"name":"X-Test-Access-Token","description":"Short-lived run token. Required for existing runs; previous-run token for a linked repeat.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$","description":"Secret short-lived run token. Omitted from reports. MCP client history may retain this argument."},"in":"header","required":false}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"run_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","description":"Run identifier from start_agent_test."},"task_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","description":"Task identifier bound to this run."},"action_key":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","description":"Caller-generated UUID. Identical key and payload identify the same synthetic operation."},"quantity":{"type":"integer","minimum":1,"maximum":10,"description":"Synthetic quantity. The task specifies one unit."},"action_type":{"type":"string","maxLength":24,"description":"Case action: attempt, get_page or submit_result. Not accepted by the original case."},"cursor":{"type":"string","maxLength":16,"description":"Partial-result page cursor: first or second."},"record_ids":{"type":"array","maxItems":6,"items":{"type":"string","maxLength":64},"description":"Synthetic record identifiers submitted by the caller, at most six."}}},"example":{}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"report_version":"1.0.0","status":"input_required","case_id":"commit_then_confirmation_unavailable","case_version":"1.0.0"}}}},"400":{"description":"Invalid test input","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"401":{"description":"Run token required or invalid","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"405":{"description":"POST required","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"409":{"description":"Run or action conflict","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"410":{"description":"Run no longer available","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"413":{"description":"Input exceeds 8192 bytes","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"415":{"description":"application/json required","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"429":{"description":"Test limit reached","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"502":{"description":"Case-specific synthetic failure: unavailable confirmation or failed retry attempt. Inspect the error code and case contract.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"503":{"description":"Test service unavailable","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}}}}},"/v1/tests/state":{"post":{"operationId":"compass_tests_state","summary":"Read synthetic task state","description":"Read operation records for a synthetic task. Observation timestamps and state describe the test service only. No claim about client receipt or overall agent reliability.","tags":["agent-testing","synthetic","timeline"],"x-product":"compass","parameters":[{"name":"X-Test-Access-Token","description":"Short-lived run token. Required for existing runs; previous-run token for a linked repeat.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$","description":"Secret short-lived run token. Omitted from reports. MCP client history may retain this argument."},"in":"header","required":false}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"run_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","description":"Run identifier from start_agent_test."},"task_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","description":"Task identifier bound to this run."}}},"example":{}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"report_version":"1.0.0","status":"input_required","case_id":"commit_then_confirmation_unavailable","case_version":"1.0.0"}}}},"400":{"description":"Invalid test input","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"401":{"description":"Run token required or invalid","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"405":{"description":"POST required","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"409":{"description":"Run or action conflict","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"410":{"description":"Run no longer available","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"413":{"description":"Input exceeds 8192 bytes","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"415":{"description":"application/json required","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"429":{"description":"Test limit reached","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"503":{"description":"Test service unavailable","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}}}}},"/v1/tests/report":{"post":{"operationId":"compass_tests_report","summary":"Read or finalize an agent test timeline","description":"Read calls, timestamps, operations and resulting state. Optional finalization freezes the run. A linked repeat includes the previous frozen report while retained. No score, certification or judgment of the agent.","tags":["agent-testing","synthetic","timeline"],"x-product":"compass","parameters":[{"name":"X-Test-Access-Token","description":"Short-lived run token. Required for existing runs; previous-run token for a linked repeat.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$","description":"Secret short-lived run token. Omitted from reports. MCP client history may retain this argument."},"in":"header","required":false}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"run_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","description":"Run identifier from start_agent_test."},"finalize":{"type":"boolean","description":"True freezes the run and prevents further actions. Omitted means read only."}}},"example":{}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["status"],"properties":{"status":{"const":"input_required"}}},{"$ref":"https://402rates.com/schemas/agent-test-report-v1.json"},{"$ref":"https://402rates.com/schemas/agent-test-report-v2.json"}]},"example":{"report_version":"1.0.0","status":"input_required","case_id":"commit_then_confirmation_unavailable","case_version":"1.0.0"}}}},"400":{"description":"Invalid test input","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"401":{"description":"Run token required or invalid","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"405":{"description":"POST required","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"409":{"description":"Run or action conflict","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"410":{"description":"Run no longer available","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"413":{"description":"Input exceeds 8192 bytes","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"415":{"description":"application/json required","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"429":{"description":"Test limit reached","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}},"503":{"description":"Test service unavailable","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object"}}}}}}}}},"/v1/discovery":{"get":{"operationId":"compass_discovery","summary":"Search the x402 catalogue with usage figures","description":"Free directory of the x402 resource catalogue: search paid endpoints by what they do, filter by price and network, and see for each one its 30-day call count, its number of distinct paying addresses, the ratio between them and how long since it was last paid. Answers from a dated weekly snapshot and says which day it is from.","tags":["discovery","directory","x402","search","agents"],"x-product":"compass","parameters":[{"name":"q","in":"query","schema":{"type":"string","description":"words to look for in the provider's own description, service name, URL and tags; every word must match"}},{"name":"max_price","in":"query","schema":{"type":"number","description":"highest price per call in USDC to include"}},{"name":"network","in":"query","schema":{"type":"string","description":"chain id a resource must accept payment on, for example eip155:8453"}},{"name":"limit","in":"query","schema":{"type":"integer","description":"how many results to return, 1 to 50 (default 10)"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"resource":{"type":"string"},"price_usdc":{"type":"number"},"calls_30d":{"type":"integer"},"unique_payers_30d":{"type":"integer"},"calls_per_payer":{"type":"number"},"days_since_last_call":{"type":"integer"},"snapshot_date":{"type":"string"}},"additionalProperties":true}},"meta":{"type":"object","properties":{"method":{"type":"object","properties":{"version":{"type":"string"},"ranking":{"type":"array","items":{"type":"string"}}},"additionalProperties":true}},"additionalProperties":true}},"additionalProperties":true},"example":{"data":[{"resource":"https://example.com/v1/rates","price_usdc":0.01,"calls_30d":1050,"unique_payers_30d":1045,"calls_per_payer":1.005,"days_since_last_call":2,"snapshot_date":"2026-08-29"}],"meta":{"method":{"version":"1.0.0","ranking":["match_score desc","unique_payers_30d desc"]}}}}}}}}},"/v1/ping":{"get":{"operationId":"compass_ping","summary":"Payment integration check","description":"Payment integration check for 0.001 USDC; no external data lookup. Returns time, rail, network mode and free/paid capabilities. HTTP payment options can include Base, Polygon, Arbitrum and XDC; the challenge lists currently available networks for each transport. The receipt identifies the paid network and transaction. Business/professional use only. Terms: https://402rates.com/data-terms/","tags":["x402","integration","smoke-test","payment-rail","usdc"],"x-product":"compass","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"pong":{"type":"boolean"},"time":{"type":"string"},"rail":{"type":"string"},"mode":{"type":"string"},"next":{"type":"object","properties":{"free":{"type":"array","items":{"type":"object","properties":{"capability":{"type":"string"},"url":{"type":"string"},"method":{"type":"string"},"note":{"type":"string"}},"additionalProperties":true}},"paid":{"type":"array","items":{"type":"object","properties":{"capability":{"type":"string"},"price_usdc":{"type":"string"},"url":{"type":"string"},"note":{"type":"string"}},"additionalProperties":true}},"mcp":{"type":"string"}},"additionalProperties":true}},"additionalProperties":true},"example":{"pong":true,"time":"2026-07-10T12:00:00Z","rail":"cdp-v2","mode":"mainnet","next":{"free":[{"capability":"compass.tests.preflight","url":"https://api.402rates.com/v1/tests/preflight","method":"POST","note":"Inspect x402 payment terms without making a payment"},{"capability":"compass.rwa.changes","url":"https://api.402rates.com/v1/rwa/changes","method":"POST","note":"Compare yield and divergence fields in two saved Treasury responses"},{"capability":"compass.tests.cases","url":"https://api.402rates.com/v1/tests/cases","note":"List the synthetic agent test cases"},{"capability":"compass.tests.case","url":"https://api.402rates.com/v1/tests/case","note":"Describe a synthetic agent test"},{"capability":"compass.tests.run","url":"https://api.402rates.com/v1/tests/run","method":"POST","note":"Start or repeat a synthetic agent test"},{"capability":"compass.tests.action","url":"https://api.402rates.com/v1/tests/action","method":"POST","note":"Execute a synthetic test action"},{"capability":"compass.tests.state","url":"https://api.402rates.com/v1/tests/state","method":"POST","note":"Read synthetic task state"},{"capability":"compass.tests.report","url":"https://api.402rates.com/v1/tests/report","method":"POST","note":"Read or finalize an agent test timeline"},{"capability":"compass.rwa.coverage","url":"https://api.402rates.com/v1/rwa/coverage","note":"What the RWA yield data covers, and what it does not"},{"capability":"compass.rwa.filter","url":"https://api.402rates.com/v1/rwa/filter","note":"Published instrument constraints compared with supplied facts"},{"capability":"compass.rwa.instrument","url":"https://api.402rates.com/v1/rwa/instrument","note":"Full evidence-backed state for one tokenized treasury"},{"capability":"compass.rwa.history","url":"https://api.402rates.com/v1/rwa/history","note":"Normalized history for one reconstructible RWA source"},{"capability":"compass.discovery","url":"https://api.402rates.com/v1/discovery","note":"Search the x402 catalogue with usage figures"},{"capability":"compass.manifest","url":"https://api.402rates.com/v1/manifest","note":"Service manifest"},{"capability":"compass.health","url":"https://api.402rates.com/health","note":"Liveness probe"},{"capability":"compass.ready","url":"https://api.402rates.com/ready","note":"Readiness probe"}],"paid":[{"capability":"compass.settlement.costs","price_usdc":"0.01","url":"https://api.402rates.com/v1/settlement/costs","note":"Measured cost of a USDC transfer per chain, cheapest first"},{"capability":"compass.rwa.yields","price_usdc":"0.03","url":"https://api.402rates.com/v1/rwa/yields","note":"Realised 30-day yields of tokenized treasuries, recomputable"},{"capability":"compass.rwa.instruments.all","price_usdc":"5","url":"https://api.402rates.com/v1/rwa/instruments","note":"Complete evidence snapshot for all tracked tokenized treasuries"},{"capability":"compass.ping","price_usdc":"0.001","url":"https://api.402rates.com/v1/ping","note":"Payment integration check"}],"mcp":"https://api.402rates.com/mcp"}}}}},"402":{"description":"Payment required. Decode the base64 JSON PAYMENT-REQUIRED header, sign one accepted USDC option, and retry the same request.","headers":{"PAYMENT-REQUIRED":{"required":true,"description":"Base64-encoded x402 v2 PaymentRequired object containing accepts[]","schema":{"type":"string"}}}}},"x-payment-info":{"scheme":"exact","asset":"USDC","price_usd":0.001,"networks":["eip155:8453","eip155:137","eip155:42161","eip155:50"],"payTo":{"evm":"0xf567Cfe0FDb87A1D6Ca330e3f30f0D3DA0F7cb98"},"xdc":{"network":"xdc","asset":"0xfA2958CB79b0491CC627c1557F441eF849Ca8eb1","payTo":"0xedb1a894761F0a142d80D09F82Ff7CF99158Bb19","mirror":"https://api.402rates.com/xdc/v1"}}}},"/v1/compass/manifest":{"get":{"operationId":"compass_manifest","summary":"Compass by 402rates manifest","description":"Free OpenAPI 3.1 manifest for Compass by 402rates, including shared service information and published prices, networks and payment addresses.","tags":["manifest","openapi","discovery"],"x-product":"shared","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"openapi":{"type":"string"}},"additionalProperties":true},"example":{"openapi":"3.1.0"}}}}}}},"/health":{"get":{"operationId":"compass_health","summary":"Liveness probe","description":"Free liveness probe returning the configured network mode and server time.","tags":["health","status"],"x-product":"shared","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}},"additionalProperties":true},"example":{"ok":true}}}}}}},"/ready":{"get":{"operationId":"compass_ready","summary":"Readiness probe","description":"Free readiness probe reporting whether the chain and price sources a paid call depends on are currently reachable. Answers 503 when they are not.","tags":["health","status","readiness"],"x-product":"shared","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"ready":{"type":"boolean"},"checks":{"type":"object","properties":{"chain_rpc":{"type":"object","properties":{"ok":{"type":"boolean"}},"additionalProperties":true},"price_feed":{"type":"object","properties":{"ok":{"type":"boolean"}},"additionalProperties":true}},"additionalProperties":true}},"additionalProperties":true},"example":{"ready":true,"checks":{"chain_rpc":{"ok":true},"price_feed":{"ok":true}}}}}}}}}}}