此 MCP 可以做什么
Finds and evaluates web scraping, crawling, and SERP API plans against workload, pricing, and service requirements.
工具
输入模式
{'type': 'object', 'properties': {'plans': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 2}, 'maxItems': 20, 'minItems': 1, 'description': 'Plans given by provider and plan name (e.g. "ScrapingBee Freelance") or by pricing-page URL, for plans found elsewhere. A name or URL that fits several plans returns the candidates under resolution and no verdict.', 'uniqueItems': True}, 'detail': {'enum': ['summary', 'full'], 'type': 'string', 'default': 'summary', 'description': 'summary returns one source sentence per fact; full returns every recorded fact and sentence.'}, 'offer_ids': {'type': 'array', 'items': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'maxItems': 20, 'minItems': 1, 'description': 'Plan ids to check (from search or get_details).', 'uniqueItems': True}, 'preferred': {'type': 'object', 'properties': {'data_regions': {'type': 'array', 'items': {'type': 'string', 'maxLength': 20, 'minLength': 2}, 'minItems': 1, 'description': 'Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries.', 'uniqueItems': True}, 'billing_types': {'type': 'array', 'items': {'enum': ['monthly_subscription', 'annual_subscription', 'pay_as_you_go', 'prepaid_credits'], 'type': 'string'}, 'minItems': 1, 'description': 'Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (A fixed-size credit pack bought before use, usually with an expiry.) Free plans always qualify.', 'uniqueItems': True}, 'search_engines': {'type': 'array', 'items': {'enum': ['google', 'bing', 'yahoo', 'yandex', 'baidu', 'duckduckgo', 'naver', 'brave'], 'type': 'string'}, 'minItems': 1, 'description': "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.", 'uniqueItems': True}, 'min_concurrency': {'type': 'integer', 'minimum': 1, 'description': 'Minimum number of concurrent requests (or browsers) the plan must allow.'}, 'search_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine\'s country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries.', 'uniqueItems': True}, 'exit_ip_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries.', 'uniqueItems': True}, 'min_pages_per_crawl': {'type': 'integer', 'minimum': 1, 'description': 'Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total.'}, 'search_result_types': {'type': 'array', 'items': {'enum': ['organic', 'ads', 'local_pack', 'knowledge_graph', 'people_also_ask', 'related_searches', 'shopping', 'news', 'images', 'videos', 'ai_overview'], 'type': 'string'}, 'minItems': 1, 'description': 'Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.', 'uniqueItems': True}, 'max_monthly_cost_usd': {'type': 'number', 'minimum': 0, 'description': 'Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent.'}, 'min_requests_per_minute': {'type': 'number', 'description': 'Minimum request rate the plan must allow, per minute.', 'exclusiveMinimum': 0}, 'realtime_search_required': {'type': 'boolean', 'description': 'Search results must be returned in real time (not through a queue).'}, 'target_errors_not_billed': {'type': 'boolean', 'description': 'Error responses from the target site (e.g. 404) must not be billed.'}, 'needs_recurring_free_tier': {'type': 'boolean', 'description': 'The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit).'}, 'failed_requests_not_billed': {'type': 'boolean', 'description': 'Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed.'}, 'only_successful_requests_billed': {'type': 'boolean', 'description': 'Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds.'}}, 'description': 'Nice-to-have conditions; they do not filter, they break ties.', 'additionalProperties': False}, 'data_regions': {'type': 'array', 'items': {'type': 'string', 'maxLength': 20, 'minLength': 2}, 'minItems': 1, 'description': 'Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries.', 'uniqueItems': True}, 'billing_types': {'type': 'array', 'items': {'enum': ['monthly_subscription', 'annual_subscription', 'pay_as_you_go', 'prepaid_credits'], 'type': 'string'}, 'minItems': 1, 'description': 'Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (A fixed-size credit pack bought before use, usually with an expiry.) Free plans always qualify.', 'uniqueItems': True}, 'monthly_pages': {'type': 'object', 'properties': {'javascript': {'type': 'integer', 'minimum': 0}, 'plain_html': {'type': 'integer', 'minimum': 0}, 'premium_proxy': {'type': 'integer', 'minimum': 0}, 'javascript_premium_proxy': {'type': 'integer', 'minimum': 0}}, 'description': 'Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both).', 'minProperties': 1, 'additionalProperties': False}, 'search_engines': {'type': 'array', 'items': {'enum': ['google', 'bing', 'yahoo', 'yandex', 'baidu', 'duckduckgo', 'naver', 'brave'], 'type': 'string'}, 'minItems': 1, 'description': "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.", 'uniqueItems': True}, 'min_concurrency': {'type': 'integer', 'minimum': 1, 'description': 'Minimum number of concurrent requests (or browsers) the plan must allow.'}, 'monthly_searches': {'type': 'integer', 'minimum': 0, 'description': 'Search requests per month (one results page each).'}, 'search_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine\'s country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries.', 'uniqueItems': True}, 'exit_ip_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries.', 'uniqueItems': True}, 'ai_extraction_pages': {'type': 'integer', 'minimum': 0, 'description': 'How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields.'}, 'min_pages_per_crawl': {'type': 'integer', 'minimum': 1, 'description': 'Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total.'}, 'monthly_pages_total': {'type': 'integer', 'minimum': 0, 'description': 'Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input.'}, 'search_result_types': {'type': 'array', 'items': {'enum': ['organic', 'ads', 'local_pack', 'knowledge_graph', 'people_also_ask', 'related_searches', 'shopping', 'news', 'images', 'videos', 'ai_overview'], 'type': 'string'}, 'minItems': 1, 'description': 'Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.', 'uniqueItems': True}, 'max_monthly_cost_usd': {'type': 'number', 'minimum': 0, 'description': 'Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent.'}, 'min_requests_per_minute': {'type': 'number', 'description': 'Minimum request rate the plan must allow, per minute.', 'exclusiveMinimum': 0}, 'browser_seconds_per_page': {'type': 'number', 'description': 'Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long.', 'exclusiveMinimum': 0}, 'realtime_search_required': {'type': 'boolean', 'description': 'Search results must be returned in real time (not through a queue).'}, 'target_errors_not_billed': {'type': 'boolean', 'description': 'Error responses from the target site (e.g. 404) must not be billed.'}, 'needs_recurring_free_tier': {'type': 'boolean', 'description': 'The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit).'}, 'failed_requests_not_billed': {'type': 'boolean', 'description': 'Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed.'}, 'structured_extraction_pages': {'type': 'integer', 'minimum': 0, 'description': 'How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two.'}, 'only_successful_requests_billed': {'type': 'boolean', 'description': 'Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds.'}}, 'description': 'Give offer_ids, plans or both; 20 plans at most in total.', 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['as_of', 'needs_input', 'results', 'assumptions', 'notes'], 'properties': {'as_of': {'type': 'string'}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'request': {'type': 'object'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['offer_id', 'offer_name', 'product_id', 'provider_name', 'match', 'meets_all', 'verdict', 'billing', 'monthly_cost', 'conditions', 'unmet_conditions', 'unknown_conditions', 'link', 'checked_at', 'cheapest_in_product'], 'properties': {'link': {'type': 'object', 'required': ['url', 'landing', 'link_level', 'affiliate'], 'properties': {'url': {'type': 'string'}, 'note': {'type': ['string', 'null']}, 'landing': {'type': 'string'}, 'affiliate': {'type': 'object', 'required': ['status'], 'properties': {'status': {'type': 'string'}, 'program': {'type': ['string', 'null']}, 'disclosure': {'type': ['string', 'null']}}}, 'link_level': {'type': 'string'}}}, 'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'listed': {'type': 'boolean'}, 'billing': {'type': 'string'}, 'verdict': {'type': 'string', 'description': 'One sentence: the conditions met, or the ones not met or not stated, with the reason.'}, 'offer_id': {'type': 'string'}, 'page_url': {'type': 'string'}, 'meets_all': {'enum': [True, False, 'unknown'], 'description': 'Judged against the required conditions of this call only: true when every one is met, false when one is not met, "unknown" when none fails and one is not stated on the official pages.'}, 'checked_at': {'type': ['string', 'null']}, 'conditions': {'type': 'array', 'items': {'type': 'object', 'required': ['condition', 'label', 'required', 'verdict', 'reason', 'facts'], 'properties': {'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Facts the verdict was judged from. The monthly budget is judged from monthly_cost; its price facts are listed there only.'}, 'label': {'type': 'string'}, 'reason': {'type': 'string'}, 'verdict': {'enum': ['MET', 'UNMET', 'UNKNOWN']}, 'required': {'type': 'boolean'}, 'condition': {'type': 'string'}}}}, 'offer_name': {'type': 'string'}, 'product_id': {'type': 'string'}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'provider_id': {'type': 'string'}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}, 'product_name': {'type': 'string'}, 'preferred_met': {'type': 'integer'}, 'provider_name': {'type': 'string'}, 'billing_options': {'type': 'array', 'items': {'type': 'string'}}, 'unmet_conditions': {'type': 'array', 'items': {'type': 'string'}}, 'prices_exclude_tax': {'type': ['boolean', 'null']}, 'unknown_conditions': {'type': 'array', 'items': {'type': 'string'}}, 'cheapest_in_product': {'type': ['object', 'null'], 'required': ['offer_id', 'offer_name', 'billing', 'monthly_cost', 'is_this_plan'], 'properties': {'billing': {'type': 'string'}, 'offer_id': {'type': 'string'}, 'page_url': {'type': 'string'}, 'offer_name': {'type': 'string'}, 'is_this_plan': {'type': 'boolean'}, 'monthly_cost': {'type': 'object'}}, 'description': 'The cheapest listed plan of the same product that meets every required condition of this call; is_this_plan is true when that is the checked plan. null when no plan of the product meets them all.'}}}}, 'resolution': {'type': 'array', 'items': {'type': 'object', 'required': ['input', 'status', 'offer_id', 'candidates'], 'properties': {'note': {'type': ['string', 'null']}, 'input': {'type': 'string'}, 'status': {'enum': ['resolved', 'ambiguous', 'not_found'], 'description': 'resolved: one plan, checked in results; ambiguous: several plans fit, listed in candidates and not checked; not_found: no plan in the catalog fits.'}, 'offer_id': {'type': ['string', 'null']}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['offer_id', 'offer_name', 'provider_name'], 'properties': {'listed': {'type': 'boolean'}, 'offer_id': {'type': 'string'}, 'offer_name': {'type': 'string'}, 'product_name': {'type': 'string'}, 'provider_name': {'type': 'string'}}}}, 'matched_by': {'enum': ['id', 'name', 'url', None]}, 'candidates_total': {'type': 'integer'}}}, 'description': 'How each entry of plans was read.'}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'needs_input': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'reason'], 'properties': {'field': {'type': 'string'}, 'reason': {'type': 'string'}}}}}}
输入模式
{'type': 'object', 'properties': {'scale': {'type': 'number', 'maximum': 1000, 'description': 'Multiply every monthly count by this factor for the end of the path, e.g. 2 for twice the current workload. Give target or scale.', 'exclusiveMinimum': 0}, 'detail': {'enum': ['summary', 'full'], 'type': 'string', 'default': 'summary', 'description': 'summary returns one source sentence per fact; full returns every recorded fact and sentence.'}, 'target': {'type': 'object', 'properties': {'monthly_pages': {'type': 'object', 'properties': {'javascript': {'type': 'integer', 'minimum': 0}, 'plain_html': {'type': 'integer', 'minimum': 0}, 'premium_proxy': {'type': 'integer', 'minimum': 0}, 'javascript_premium_proxy': {'type': 'integer', 'minimum': 0}}, 'description': 'Pages per month by type at the end of the path. Types not listed keep their current count; give 0 to drop a type.', 'minProperties': 1, 'additionalProperties': False}, 'monthly_searches': {'type': 'integer', 'minimum': 0, 'description': 'Searches per month at the end of the path.'}, 'ai_extraction_pages': {'type': 'integer', 'minimum': 0, 'description': 'AI-extraction pages per month at the end of the path.'}, 'structured_extraction_pages': {'type': 'integer', 'minimum': 0, 'description': 'Structured-extraction pages per month at the end of the path.'}}, 'description': 'Workload at the end of the path; fields not given keep their current value. Give target or scale.', 'minProperties': 1, 'additionalProperties': False}, 'offer_ids': {'type': 'array', 'items': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'maxItems': 10, 'minItems': 1, 'description': 'Compare only these plans and follow each of them along the path. Default: every plan that can serve the workload, following the cheapest full match at the start.', 'uniqueItems': True}, 'preferred': {'type': 'object', 'properties': {'data_regions': {'type': 'array', 'items': {'type': 'string', 'maxLength': 20, 'minLength': 2}, 'minItems': 1, 'description': 'Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries.', 'uniqueItems': True}, 'billing_types': {'type': 'array', 'items': {'enum': ['monthly_subscription', 'annual_subscription', 'pay_as_you_go', 'prepaid_credits'], 'type': 'string'}, 'minItems': 1, 'description': 'Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (A fixed-size credit pack bought before use, usually with an expiry.) Free plans always qualify.', 'uniqueItems': True}, 'search_engines': {'type': 'array', 'items': {'enum': ['google', 'bing', 'yahoo', 'yandex', 'baidu', 'duckduckgo', 'naver', 'brave'], 'type': 'string'}, 'minItems': 1, 'description': "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.", 'uniqueItems': True}, 'min_concurrency': {'type': 'integer', 'minimum': 1, 'description': 'Minimum number of concurrent requests (or browsers) the plan must allow.'}, 'search_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine\'s country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries.', 'uniqueItems': True}, 'exit_ip_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries.', 'uniqueItems': True}, 'min_pages_per_crawl': {'type': 'integer', 'minimum': 1, 'description': 'Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total.'}, 'search_result_types': {'type': 'array', 'items': {'enum': ['organic', 'ads', 'local_pack', 'knowledge_graph', 'people_also_ask', 'related_searches', 'shopping', 'news', 'images', 'videos', 'ai_overview'], 'type': 'string'}, 'minItems': 1, 'description': 'Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.', 'uniqueItems': True}, 'max_monthly_cost_usd': {'type': 'number', 'minimum': 0, 'description': 'Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent.'}, 'min_requests_per_minute': {'type': 'number', 'description': 'Minimum request rate the plan must allow, per minute.', 'exclusiveMinimum': 0}, 'realtime_search_required': {'type': 'boolean', 'description': 'Search results must be returned in real time (not through a queue).'}, 'target_errors_not_billed': {'type': 'boolean', 'description': 'Error responses from the target site (e.g. 404) must not be billed.'}, 'needs_recurring_free_tier': {'type': 'boolean', 'description': 'The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit).'}, 'failed_requests_not_billed': {'type': 'boolean', 'description': 'Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed.'}, 'only_successful_requests_billed': {'type': 'boolean', 'description': 'Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds.'}}, 'description': 'Nice-to-have conditions; they do not filter, they break ties.', 'additionalProperties': False}, 'data_regions': {'type': 'array', 'items': {'type': 'string', 'maxLength': 20, 'minLength': 2}, 'minItems': 1, 'description': 'Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries.', 'uniqueItems': True}, 'billing_types': {'type': 'array', 'items': {'enum': ['monthly_subscription', 'annual_subscription', 'pay_as_you_go', 'prepaid_credits'], 'type': 'string'}, 'minItems': 1, 'description': 'Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (A fixed-size credit pack bought before use, usually with an expiry.) Free plans always qualify.', 'uniqueItems': True}, 'monthly_pages': {'type': 'object', 'properties': {'javascript': {'type': 'integer', 'minimum': 0}, 'plain_html': {'type': 'integer', 'minimum': 0}, 'premium_proxy': {'type': 'integer', 'minimum': 0}, 'javascript_premium_proxy': {'type': 'integer', 'minimum': 0}}, 'description': 'Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both).', 'minProperties': 1, 'additionalProperties': False}, 'product_types': {'type': 'array', 'items': {'enum': ['scraping_api', 'serp_api', 'headless_browser', 'platform'], 'type': 'string'}, 'minItems': 1, 'description': 'Limit to these product types. Default: every type that can serve the workload.', 'uniqueItems': True}, 'search_engines': {'type': 'array', 'items': {'enum': ['google', 'bing', 'yahoo', 'yandex', 'baidu', 'duckduckgo', 'naver', 'brave'], 'type': 'string'}, 'minItems': 1, 'description': "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.", 'uniqueItems': True}, 'min_concurrency': {'type': 'integer', 'minimum': 1, 'description': 'Minimum number of concurrent requests (or browsers) the plan must allow.'}, 'monthly_searches': {'type': 'integer', 'minimum': 0, 'description': 'Search requests per month (one results page each).'}, 'search_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine\'s country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries.', 'uniqueItems': True}, 'exit_ip_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries.', 'uniqueItems': True}, 'ai_extraction_pages': {'type': 'integer', 'minimum': 0, 'description': 'How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields.'}, 'min_pages_per_crawl': {'type': 'integer', 'minimum': 1, 'description': 'Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total.'}, 'monthly_pages_total': {'type': 'integer', 'minimum': 0, 'description': 'Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input.'}, 'search_result_types': {'type': 'array', 'items': {'enum': ['organic', 'ads', 'local_pack', 'knowledge_graph', 'people_also_ask', 'related_searches', 'shopping', 'news', 'images', 'videos', 'ai_overview'], 'type': 'string'}, 'minItems': 1, 'description': 'Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.', 'uniqueItems': True}, 'max_monthly_cost_usd': {'type': 'number', 'minimum': 0, 'description': 'Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent.'}, 'min_requests_per_minute': {'type': 'number', 'description': 'Minimum request rate the plan must allow, per minute.', 'exclusiveMinimum': 0}, 'browser_seconds_per_page': {'type': 'number', 'description': 'Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long.', 'exclusiveMinimum': 0}, 'realtime_search_required': {'type': 'boolean', 'description': 'Search results must be returned in real time (not through a queue).'}, 'target_errors_not_billed': {'type': 'boolean', 'description': 'Error responses from the target site (e.g. 404) must not be billed.'}, 'needs_recurring_free_tier': {'type': 'boolean', 'description': 'The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit).'}, 'failed_requests_not_billed': {'type': 'boolean', 'description': 'Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed.'}, 'structured_extraction_pages': {'type': 'integer', 'minimum': 0, 'description': 'How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two.'}, 'only_successful_requests_billed': {'type': 'boolean', 'description': 'Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['as_of', 'needs_input', 'compared', 'path', 'counts', 'at_start', 'at_end', 'switches', 'tracked', 'plans', 'assumptions', 'notes'], 'properties': {'path': {'type': ['object', 'null'], 'required': ['start', 'end', 'steps', 'resolution'], 'properties': {'end': {'type': 'object', 'properties': {'monthly_pages': {'type': 'object'}, 'monthly_searches': {'type': 'integer'}, 'ai_extraction_pages': {'type': 'integer'}, 'structured_extraction_pages': {'type': 'integer'}}, 'description': 'A monthly workload in the request format.'}, 'start': {'type': 'object', 'properties': {'monthly_pages': {'type': 'object'}, 'monthly_searches': {'type': 'integer'}, 'ai_extraction_pages': {'type': 'integer'}, 'structured_extraction_pages': {'type': 'integer'}}, 'description': 'A monthly workload in the request format.'}, 'steps': {'type': 'integer'}, 'resolution': {'type': 'string'}}}, 'as_of': {'type': 'string'}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'plans': {'type': 'array', 'items': {'type': 'object', 'required': ['offer_id', 'offer_name', 'provider_name', 'link', 'facts'], 'properties': {'link': {'type': 'object', 'required': ['url', 'landing', 'link_level', 'affiliate'], 'properties': {'url': {'type': 'string'}, 'note': {'type': ['string', 'null']}, 'landing': {'type': 'string'}, 'affiliate': {'type': 'object', 'required': ['status'], 'properties': {'status': {'type': 'string'}, 'program': {'type': ['string', 'null']}, 'disclosure': {'type': ['string', 'null']}}}, 'link_level': {'type': 'string'}}}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}}, 'listed': {'type': 'boolean'}, 'offer_id': {'type': 'string'}, 'page_url': {'type': 'string'}, 'offer_name': {'type': 'string'}, 'product_name': {'type': 'string'}, 'provider_name': {'type': 'string'}}}, 'description': 'Every plan named above, with the official facts its costs were computed from.'}, 'at_end': {'type': 'array', 'items': {'type': 'object', 'required': ['offer_id', 'offer_name', 'provider_name', 'billing', 'match', 'monthly_cost'], 'properties': {'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'billing': {'type': 'string'}, 'offer_id': {'type': 'string'}, 'offer_name': {'type': 'string'}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}, 'provider_name': {'type': 'string'}}}, 'description': 'Up to three cheapest full matches at the target workload.'}, 'counts': {'type': ['object', 'null'], 'required': ['start', 'end'], 'properties': {'end': {'type': 'object', 'required': ['candidates', 'full', 'partial', 'no_match'], 'properties': {'full': {'type': 'integer'}, 'partial': {'type': 'integer'}, 'no_match': {'type': 'integer'}, 'candidates': {'type': 'integer'}}}, 'start': {'type': 'object', 'required': ['candidates', 'full', 'partial', 'no_match'], 'properties': {'full': {'type': 'integer'}, 'partial': {'type': 'integer'}, 'no_match': {'type': 'integer'}, 'candidates': {'type': 'integer'}}}}}, 'request': {'type': 'object'}, 'tracked': {'type': 'array', 'items': {'type': 'object', 'required': ['offer_id', 'at_start', 'at_end', 'cost_change', 'volume_limit', 'budget_exceeded', 'stops_matching'], 'properties': {'at_end': {'type': 'object', 'required': ['offer_id', 'offer_name', 'provider_name', 'billing', 'match', 'monthly_cost'], 'properties': {'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'billing': {'type': 'string'}, 'offer_id': {'type': 'string'}, 'offer_name': {'type': 'string'}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}, 'provider_name': {'type': 'string'}}}, 'at_start': {'type': 'object', 'required': ['offer_id', 'offer_name', 'provider_name', 'billing', 'match', 'monthly_cost'], 'properties': {'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'billing': {'type': 'string'}, 'offer_id': {'type': 'string'}, 'offer_name': {'type': 'string'}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}, 'provider_name': {'type': 'string'}}}, 'offer_id': {'type': 'string'}, 'offer_name': {'type': 'string'}, 'cost_change': {'type': ['object', 'null'], 'required': ['workload'], 'properties': {'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'reason': {'type': 'string'}, 'billing': {'type': 'string'}, 'verdict': {'enum': ['MET', 'UNMET', 'UNKNOWN']}, 'workload': {'type': 'object', 'properties': {'monthly_pages': {'type': 'object'}, 'monthly_searches': {'type': 'integer'}, 'ai_extraction_pages': {'type': 'integer'}, 'structured_extraction_pages': {'type': 'integer'}}, 'description': 'A monthly workload in the request format.'}, 'conditions': {'type': 'array', 'items': {'type': 'object', 'required': ['condition', 'verdict', 'reason'], 'properties': {'reason': {'type': 'string'}, 'verdict': {'enum': ['MET', 'UNMET', 'UNKNOWN']}, 'condition': {'type': 'string'}}}}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}}, 'description': 'First workload where the monthly cost differs from the start.'}, 'volume_limit': {'type': ['object', 'null'], 'required': ['workload'], 'properties': {'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'reason': {'type': 'string'}, 'billing': {'type': 'string'}, 'verdict': {'enum': ['MET', 'UNMET', 'UNKNOWN']}, 'workload': {'type': 'object', 'properties': {'monthly_pages': {'type': 'object'}, 'monthly_searches': {'type': 'integer'}, 'ai_extraction_pages': {'type': 'integer'}, 'structured_extraction_pages': {'type': 'integer'}}, 'description': 'A monthly workload in the request format.'}, 'conditions': {'type': 'array', 'items': {'type': 'object', 'required': ['condition', 'verdict', 'reason'], 'properties': {'reason': {'type': 'string'}, 'verdict': {'enum': ['MET', 'UNMET', 'UNKNOWN']}, 'condition': {'type': 'string'}}}}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}}, 'description': 'First workload the plan does not cover.'}, 'provider_name': {'type': 'string'}, 'stops_matching': {'type': ['object', 'null'], 'required': ['workload'], 'properties': {'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'reason': {'type': 'string'}, 'billing': {'type': 'string'}, 'verdict': {'enum': ['MET', 'UNMET', 'UNKNOWN']}, 'workload': {'type': 'object', 'properties': {'monthly_pages': {'type': 'object'}, 'monthly_searches': {'type': 'integer'}, 'ai_extraction_pages': {'type': 'integer'}, 'structured_extraction_pages': {'type': 'integer'}}, 'description': 'A monthly workload in the request format.'}, 'conditions': {'type': 'array', 'items': {'type': 'object', 'required': ['condition', 'verdict', 'reason'], 'properties': {'reason': {'type': 'string'}, 'verdict': {'enum': ['MET', 'UNMET', 'UNKNOWN']}, 'condition': {'type': 'string'}}}}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}}, 'description': 'First workload where the plan is no longer a full match.'}, 'budget_exceeded': {'type': ['object', 'null'], 'required': ['workload'], 'properties': {'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'reason': {'type': 'string'}, 'billing': {'type': 'string'}, 'verdict': {'enum': ['MET', 'UNMET', 'UNKNOWN']}, 'workload': {'type': 'object', 'properties': {'monthly_pages': {'type': 'object'}, 'monthly_searches': {'type': 'integer'}, 'ai_extraction_pages': {'type': 'integer'}, 'structured_extraction_pages': {'type': 'integer'}}, 'description': 'A monthly workload in the request format.'}, 'conditions': {'type': 'array', 'items': {'type': 'object', 'required': ['condition', 'verdict', 'reason'], 'properties': {'reason': {'type': 'string'}, 'verdict': {'enum': ['MET', 'UNMET', 'UNKNOWN']}, 'condition': {'type': 'string'}}}}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}}, 'description': 'First workload where the monthly cost is known to exceed the budget; null without a budget or when it never does.'}}}}, 'at_start': {'type': 'array', 'items': {'type': 'object', 'required': ['offer_id', 'offer_name', 'provider_name', 'billing', 'match', 'monthly_cost'], 'properties': {'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'billing': {'type': 'string'}, 'offer_id': {'type': 'string'}, 'offer_name': {'type': 'string'}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}, 'provider_name': {'type': 'string'}}}, 'description': 'Up to three cheapest full matches at the current workload.'}, 'compared': {'enum': ['all_plans', 'given_plans']}, 'switches': {'type': 'array', 'items': {'type': 'object', 'required': ['workload', 'from', 'to', 'reason'], 'properties': {'to': {'type': ['object', 'null'], 'required': ['offer_id', 'offer_name', 'provider_name', 'billing', 'match', 'monthly_cost'], 'properties': {'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'billing': {'type': 'string'}, 'offer_id': {'type': 'string'}, 'offer_name': {'type': 'string'}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}, 'provider_name': {'type': 'string'}}}, 'from': {'type': ['object', 'null'], 'required': ['offer_id', 'offer_name', 'provider_name', 'billing', 'match', 'monthly_cost'], 'properties': {'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'billing': {'type': 'string'}, 'offer_id': {'type': 'string'}, 'offer_name': {'type': 'string'}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}, 'provider_name': {'type': 'string'}}}, 'reason': {'type': 'string'}, 'workload': {'type': 'object', 'properties': {'monthly_pages': {'type': 'object'}, 'monthly_searches': {'type': 'integer'}, 'ai_extraction_pages': {'type': 'integer'}, 'structured_extraction_pages': {'type': 'integer'}}, 'description': 'A monthly workload in the request format.'}}}, 'description': 'Each workload on the path where the cheapest full match changes.'}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'needs_input': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'reason'], 'properties': {'field': {'type': 'string'}, 'reason': {'type': 'string'}}}}}}
输入模式
{'type': 'object', 'properties': {'offer_id': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'A plan id, e.g. "firecrawl-standard".'}, 'product_id': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'A product id, e.g. "firecrawl-api".'}}, 'description': 'Give exactly one of offer_id or product_id.', 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['as_of', 'provider', 'product', 'offers'], 'properties': {'as_of': {'type': 'string'}, 'offers': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'type', 'listed', 'facts', 'link'], 'properties': {'id': {'type': 'string'}, 'link': {'type': 'object', 'required': ['url', 'landing', 'link_level', 'affiliate'], 'properties': {'url': {'type': 'string'}, 'note': {'type': ['string', 'null']}, 'landing': {'type': 'string'}, 'affiliate': {'type': 'object', 'required': ['status'], 'properties': {'status': {'type': 'string'}, 'program': {'type': ['string', 'null']}, 'disclosure': {'type': ['string', 'null']}}}, 'link_level': {'type': 'string'}}}, 'name': {'type': 'string'}, 'type': {'type': 'string'}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}}, 'listed': {'type': 'boolean'}}}}, 'product': {'type': 'object', 'required': ['id', 'name', 'kinds', 'facts'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}}, 'kinds': {'type': 'array'}}}, 'provider': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'agent_access': {'type': ['object', 'null'], 'description': "The provider's machine channels as last checked: its official MCP server (whether it answered without credentials, how it asks for them, tool names), llms.txt and OpenAPI files. Only listing requests were made. null when not checked."}, 'data_use_scope': {'type': 'object', 'description': "Pages read, robots.txt results, the terms-of-use record and rights: the provider's rights state and whether this service serves it, and the rights of each source page."}}}, 'evidence_detail': {'enum': ['summary'], 'description': 'Present when the product was too long for one response: each fact carries one source sentence. Ask for a plan by offer_id for every sentence.'}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 3, 'maximum': 20, 'minimum': 1, 'description': 'Maximum plans listed for each change and under confirm_with_provider (default 3).'}, 'detail': {'enum': ['summary', 'full'], 'type': 'string', 'default': 'summary', 'description': 'summary returns one source sentence per fact; full returns every recorded fact and sentence.'}, 'preferred': {'type': 'object', 'properties': {'data_regions': {'type': 'array', 'items': {'type': 'string', 'maxLength': 20, 'minLength': 2}, 'minItems': 1, 'description': 'Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries.', 'uniqueItems': True}, 'billing_types': {'type': 'array', 'items': {'enum': ['monthly_subscription', 'annual_subscription', 'pay_as_you_go', 'prepaid_credits'], 'type': 'string'}, 'minItems': 1, 'description': 'Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (A fixed-size credit pack bought before use, usually with an expiry.) Free plans always qualify.', 'uniqueItems': True}, 'search_engines': {'type': 'array', 'items': {'enum': ['google', 'bing', 'yahoo', 'yandex', 'baidu', 'duckduckgo', 'naver', 'brave'], 'type': 'string'}, 'minItems': 1, 'description': "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.", 'uniqueItems': True}, 'min_concurrency': {'type': 'integer', 'minimum': 1, 'description': 'Minimum number of concurrent requests (or browsers) the plan must allow.'}, 'search_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine\'s country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries.', 'uniqueItems': True}, 'exit_ip_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries.', 'uniqueItems': True}, 'min_pages_per_crawl': {'type': 'integer', 'minimum': 1, 'description': 'Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total.'}, 'search_result_types': {'type': 'array', 'items': {'enum': ['organic', 'ads', 'local_pack', 'knowledge_graph', 'people_also_ask', 'related_searches', 'shopping', 'news', 'images', 'videos', 'ai_overview'], 'type': 'string'}, 'minItems': 1, 'description': 'Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.', 'uniqueItems': True}, 'max_monthly_cost_usd': {'type': 'number', 'minimum': 0, 'description': 'Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent.'}, 'min_requests_per_minute': {'type': 'number', 'description': 'Minimum request rate the plan must allow, per minute.', 'exclusiveMinimum': 0}, 'realtime_search_required': {'type': 'boolean', 'description': 'Search results must be returned in real time (not through a queue).'}, 'target_errors_not_billed': {'type': 'boolean', 'description': 'Error responses from the target site (e.g. 404) must not be billed.'}, 'needs_recurring_free_tier': {'type': 'boolean', 'description': 'The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit).'}, 'failed_requests_not_billed': {'type': 'boolean', 'description': 'Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed.'}, 'only_successful_requests_billed': {'type': 'boolean', 'description': 'Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds.'}}, 'description': 'Nice-to-have conditions; they do not filter, they break ties.', 'additionalProperties': False}, 'negotiable': {'type': 'array', 'items': {'enum': ['monthly_volume', 'concurrency', 'rate_limit', 'monthly_budget', 'billing_type', 'free_allowance', 'failed_request_billing', 'success_billing', 'target_error_billing', 'geo_targeting', 'data_region', 'serp_response_mode', 'serp_localization', 'serp_result_types', 'serp_engines', 'crawl_page_limit'], 'type': 'string'}, 'minItems': 1, 'description': 'Conditions the user said can change: monthly_volume, concurrency, rate_limit, monthly_budget, billing_type, free_allowance, failed_request_billing, success_billing, target_error_billing, geo_targeting, data_region, serp_response_mode, serp_localization, serp_result_types, serp_engines, crawl_page_limit. Default: every required condition, each marked ask_user because the user has not said it can change.', 'uniqueItems': True}, 'data_regions': {'type': 'array', 'items': {'type': 'string', 'maxLength': 20, 'minLength': 2}, 'minItems': 1, 'description': 'Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries.', 'uniqueItems': True}, 'billing_types': {'type': 'array', 'items': {'enum': ['monthly_subscription', 'annual_subscription', 'pay_as_you_go', 'prepaid_credits'], 'type': 'string'}, 'minItems': 1, 'description': 'Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (A fixed-size credit pack bought before use, usually with an expiry.) Free plans always qualify.', 'uniqueItems': True}, 'monthly_pages': {'type': 'object', 'properties': {'javascript': {'type': 'integer', 'minimum': 0}, 'plain_html': {'type': 'integer', 'minimum': 0}, 'premium_proxy': {'type': 'integer', 'minimum': 0}, 'javascript_premium_proxy': {'type': 'integer', 'minimum': 0}}, 'description': 'Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both).', 'minProperties': 1, 'additionalProperties': False}, 'product_types': {'type': 'array', 'items': {'enum': ['scraping_api', 'serp_api', 'headless_browser', 'platform'], 'type': 'string'}, 'minItems': 1, 'description': 'Limit to these product types. Default: every type that can serve the workload.', 'uniqueItems': True}, 'search_engines': {'type': 'array', 'items': {'enum': ['google', 'bing', 'yahoo', 'yandex', 'baidu', 'duckduckgo', 'naver', 'brave'], 'type': 'string'}, 'minItems': 1, 'description': "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.", 'uniqueItems': True}, 'min_concurrency': {'type': 'integer', 'minimum': 1, 'description': 'Minimum number of concurrent requests (or browsers) the plan must allow.'}, 'monthly_searches': {'type': 'integer', 'minimum': 0, 'description': 'Search requests per month (one results page each).'}, 'search_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine\'s country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries.', 'uniqueItems': True}, 'exit_ip_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries.', 'uniqueItems': True}, 'ai_extraction_pages': {'type': 'integer', 'minimum': 0, 'description': 'How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields.'}, 'min_pages_per_crawl': {'type': 'integer', 'minimum': 1, 'description': 'Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total.'}, 'monthly_pages_total': {'type': 'integer', 'minimum': 0, 'description': 'Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input.'}, 'search_result_types': {'type': 'array', 'items': {'enum': ['organic', 'ads', 'local_pack', 'knowledge_graph', 'people_also_ask', 'related_searches', 'shopping', 'news', 'images', 'videos', 'ai_overview'], 'type': 'string'}, 'minItems': 1, 'description': 'Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.', 'uniqueItems': True}, 'max_monthly_cost_usd': {'type': 'number', 'minimum': 0, 'description': 'Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent.'}, 'min_requests_per_minute': {'type': 'number', 'description': 'Minimum request rate the plan must allow, per minute.', 'exclusiveMinimum': 0}, 'browser_seconds_per_page': {'type': 'number', 'description': 'Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long.', 'exclusiveMinimum': 0}, 'realtime_search_required': {'type': 'boolean', 'description': 'Search results must be returned in real time (not through a queue).'}, 'target_errors_not_billed': {'type': 'boolean', 'description': 'Error responses from the target site (e.g. 404) must not be billed.'}, 'needs_recurring_free_tier': {'type': 'boolean', 'description': 'The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit).'}, 'failed_requests_not_billed': {'type': 'boolean', 'description': 'Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed.'}, 'structured_extraction_pages': {'type': 'integer', 'minimum': 0, 'description': 'How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two.'}, 'only_successful_requests_billed': {'type': 'boolean', 'description': 'Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['as_of', 'needs_input', 'counts', 'changes', 'confirm_with_provider', 'assumptions', 'notes'], 'properties': {'as_of': {'type': 'string'}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'counts': {'type': 'object', 'required': ['candidates', 'full', 'partial', 'no_match'], 'properties': {'full': {'type': 'integer'}, 'partial': {'type': 'integer'}, 'no_match': {'type': 'integer'}, 'candidates': {'type': 'integer'}}}, 'changes': {'type': 'array', 'items': {'type': 'object', 'required': ['condition', 'label', 'field', 'current', 'ask_user', 'options', 'blocked_by', 'note'], 'properties': {'note': {'type': ['string', 'null']}, 'field': {'type': ['string', 'null'], 'description': 'Request field of the condition; null for monthly_volume, which changes the workload fields.'}, 'label': {'type': 'string'}, 'current': {}, 'options': {'type': 'array', 'items': {'type': 'object', 'required': ['change', 'summary', 'admitted_total', 'admitted'], 'properties': {'change': {'type': 'object', 'description': 'Request fields to set; null removes the field.'}, 'summary': {'type': 'string'}, 'admitted': {'type': 'array', 'items': {'type': 'object', 'required': ['offer_id', 'offer_name', 'provider_name', 'billing', 'monthly_cost', 'meets_all', 'meets_all_after_change', 'was', 'facts', 'link'], 'properties': {'was': {'type': 'array', 'items': {'type': 'object', 'required': ['condition', 'verdict', 'reason'], 'properties': {'reason': {'type': 'string'}, 'verdict': {'enum': ['MET', 'UNMET', 'UNKNOWN']}, 'condition': {'type': 'string'}}}, 'description': 'Required conditions this plan did not meet before the change.'}, 'link': {'type': 'object', 'required': ['url', 'landing', 'link_level', 'affiliate'], 'properties': {'url': {'type': 'string'}, 'note': {'type': ['string', 'null']}, 'landing': {'type': 'string'}, 'affiliate': {'type': 'object', 'required': ['status'], 'properties': {'status': {'type': 'string'}, 'program': {'type': ['string', 'null']}, 'disclosure': {'type': ['string', 'null']}}}, 'link_level': {'type': 'string'}}}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Official facts behind those verdicts (price facts are under monthly_cost).'}, 'listed': {'type': 'boolean'}, 'billing': {'type': 'string'}, 'offer_id': {'type': 'string'}, 'page_url': {'type': 'string'}, 'meets_all': {'enum': [True, False, 'unknown'], 'description': 'Against the request as given, before the change: false or "unknown".'}, 'offer_name': {'type': 'string'}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}, 'product_name': {'type': 'string'}, 'provider_name': {'type': 'string'}, 'meets_all_after_change': {'enum': [True], 'type': 'boolean', 'description': 'Against the request with this change applied: always true, because only plans that then meet every required condition are listed.'}}}}, 'admitted_total': {'type': 'integer'}}}}, 'ask_user': {'type': 'boolean', 'description': 'True when negotiable was not given: ask the user before changing this condition.'}, 'condition': {'type': 'string'}, 'blocked_by': {'type': 'array', 'items': {'type': 'object', 'required': ['condition', 'plans'], 'properties': {'label': {'type': 'string'}, 'plans': {'type': 'integer'}, 'condition': {'type': 'string'}}}, 'description': 'When no change of this condition alone is enough: other conditions not met by the plans that fail this one.'}}}}, 'request': {'type': 'object'}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'needs_input': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'reason'], 'properties': {'field': {'type': 'string'}, 'reason': {'type': 'string'}}}}, 'confirm_with_provider': {'type': 'object', 'required': ['total', 'plans'], 'properties': {'plans': {'type': 'array', 'items': {'type': 'object', 'required': ['offer_id', 'offer_name', 'provider_name', 'monthly_cost', 'meets_all', 'unknown', 'pages_checked', 'link'], 'properties': {'link': {'type': 'object', 'required': ['url', 'landing', 'link_level', 'affiliate'], 'properties': {'url': {'type': 'string'}, 'note': {'type': ['string', 'null']}, 'landing': {'type': 'string'}, 'affiliate': {'type': 'object', 'required': ['status'], 'properties': {'status': {'type': 'string'}, 'program': {'type': ['string', 'null']}, 'disclosure': {'type': ['string', 'null']}}}, 'link_level': {'type': 'string'}}}, 'listed': {'type': 'boolean'}, 'billing': {'type': 'string'}, 'unknown': {'type': 'array', 'items': {'type': 'object', 'required': ['condition', 'reason', 'checked_at'], 'properties': {'label': {'type': 'string'}, 'reason': {'type': 'string'}, 'condition': {'type': 'string'}, 'checked_at': {'type': 'string'}}}}, 'offer_id': {'type': 'string'}, 'page_url': {'type': 'string'}, 'meets_all': {'enum': [True, False, 'unknown'], 'description': 'Judged against the required conditions of this call only: true when every one is met, false when one is not met, "unknown" when none fails and one is not stated on the official pages.'}, 'offer_name': {'type': 'string'}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}, 'product_name': {'type': 'string'}, 'pages_checked': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Official pages read for this provider.'}, 'provider_name': {'type': 'string'}}}}, 'total': {'type': 'integer'}}}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 5, 'maximum': 5, 'minimum': 1, 'description': 'Maximum plans returned in each list (default and maximum 5).'}, 'detail': {'enum': ['summary', 'full'], 'type': 'string', 'default': 'summary', 'description': 'summary returns one source sentence per fact; full returns every recorded fact and sentence.'}, 'preferred': {'type': 'object', 'properties': {'data_regions': {'type': 'array', 'items': {'type': 'string', 'maxLength': 20, 'minLength': 2}, 'minItems': 1, 'description': 'Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries.', 'uniqueItems': True}, 'billing_types': {'type': 'array', 'items': {'enum': ['monthly_subscription', 'annual_subscription', 'pay_as_you_go', 'prepaid_credits'], 'type': 'string'}, 'minItems': 1, 'description': 'Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (A fixed-size credit pack bought before use, usually with an expiry.) Free plans always qualify.', 'uniqueItems': True}, 'search_engines': {'type': 'array', 'items': {'enum': ['google', 'bing', 'yahoo', 'yandex', 'baidu', 'duckduckgo', 'naver', 'brave'], 'type': 'string'}, 'minItems': 1, 'description': "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.", 'uniqueItems': True}, 'min_concurrency': {'type': 'integer', 'minimum': 1, 'description': 'Minimum number of concurrent requests (or browsers) the plan must allow.'}, 'search_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine\'s country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries.', 'uniqueItems': True}, 'exit_ip_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries.', 'uniqueItems': True}, 'min_pages_per_crawl': {'type': 'integer', 'minimum': 1, 'description': 'Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total.'}, 'search_result_types': {'type': 'array', 'items': {'enum': ['organic', 'ads', 'local_pack', 'knowledge_graph', 'people_also_ask', 'related_searches', 'shopping', 'news', 'images', 'videos', 'ai_overview'], 'type': 'string'}, 'minItems': 1, 'description': 'Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.', 'uniqueItems': True}, 'max_monthly_cost_usd': {'type': 'number', 'minimum': 0, 'description': 'Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent.'}, 'min_requests_per_minute': {'type': 'number', 'description': 'Minimum request rate the plan must allow, per minute.', 'exclusiveMinimum': 0}, 'realtime_search_required': {'type': 'boolean', 'description': 'Search results must be returned in real time (not through a queue).'}, 'target_errors_not_billed': {'type': 'boolean', 'description': 'Error responses from the target site (e.g. 404) must not be billed.'}, 'needs_recurring_free_tier': {'type': 'boolean', 'description': 'The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit).'}, 'failed_requests_not_billed': {'type': 'boolean', 'description': 'Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed.'}, 'only_successful_requests_billed': {'type': 'boolean', 'description': 'Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds.'}}, 'description': 'Nice-to-have conditions; they do not filter, they break ties.', 'additionalProperties': False}, 'data_regions': {'type': 'array', 'items': {'type': 'string', 'maxLength': 20, 'minLength': 2}, 'minItems': 1, 'description': 'Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries.', 'uniqueItems': True}, 'billing_types': {'type': 'array', 'items': {'enum': ['monthly_subscription', 'annual_subscription', 'pay_as_you_go', 'prepaid_credits'], 'type': 'string'}, 'minItems': 1, 'description': 'Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (A fixed-size credit pack bought before use, usually with an expiry.) Free plans always qualify.', 'uniqueItems': True}, 'monthly_pages': {'type': 'object', 'properties': {'javascript': {'type': 'integer', 'minimum': 0}, 'plain_html': {'type': 'integer', 'minimum': 0}, 'premium_proxy': {'type': 'integer', 'minimum': 0}, 'javascript_premium_proxy': {'type': 'integer', 'minimum': 0}}, 'description': 'Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both).', 'minProperties': 1, 'additionalProperties': False}, 'product_types': {'type': 'array', 'items': {'enum': ['scraping_api', 'serp_api', 'headless_browser', 'platform'], 'type': 'string'}, 'minItems': 1, 'description': 'Limit to these product types. Default: every type that can serve the workload.', 'uniqueItems': True}, 'search_engines': {'type': 'array', 'items': {'enum': ['google', 'bing', 'yahoo', 'yandex', 'baidu', 'duckduckgo', 'naver', 'brave'], 'type': 'string'}, 'minItems': 1, 'description': "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.", 'uniqueItems': True}, 'min_concurrency': {'type': 'integer', 'minimum': 1, 'description': 'Minimum number of concurrent requests (or browsers) the plan must allow.'}, 'monthly_searches': {'type': 'integer', 'minimum': 0, 'description': 'Search requests per month (one results page each).'}, 'search_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine\'s country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries.', 'uniqueItems': True}, 'exit_ip_countries': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z]{2}$'}, 'minItems': 1, 'description': 'ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries.', 'uniqueItems': True}, 'ai_extraction_pages': {'type': 'integer', 'minimum': 0, 'description': 'How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields.'}, 'min_pages_per_crawl': {'type': 'integer', 'minimum': 1, 'description': 'Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total.'}, 'monthly_pages_total': {'type': 'integer', 'minimum': 0, 'description': 'Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input.'}, 'search_result_types': {'type': 'array', 'items': {'enum': ['organic', 'ads', 'local_pack', 'knowledge_graph', 'people_also_ask', 'related_searches', 'shopping', 'news', 'images', 'videos', 'ai_overview'], 'type': 'string'}, 'minItems': 1, 'description': 'Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.', 'uniqueItems': True}, 'max_monthly_cost_usd': {'type': 'number', 'minimum': 0, 'description': 'Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent.'}, 'min_requests_per_minute': {'type': 'number', 'description': 'Minimum request rate the plan must allow, per minute.', 'exclusiveMinimum': 0}, 'browser_seconds_per_page': {'type': 'number', 'description': 'Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long.', 'exclusiveMinimum': 0}, 'realtime_search_required': {'type': 'boolean', 'description': 'Search results must be returned in real time (not through a queue).'}, 'target_errors_not_billed': {'type': 'boolean', 'description': 'Error responses from the target site (e.g. 404) must not be billed.'}, 'needs_recurring_free_tier': {'type': 'boolean', 'description': 'The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit).'}, 'failed_requests_not_billed': {'type': 'boolean', 'description': 'Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed.'}, 'structured_extraction_pages': {'type': 'integer', 'minimum': 0, 'description': 'How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two.'}, 'only_successful_requests_billed': {'type': 'boolean', 'description': 'Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['as_of', 'needs_input', 'counts', 'full_matches', 'partial_matches', 'zero_result', 'assumptions', 'notes'], 'properties': {'as_of': {'type': 'string'}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'counts': {'type': 'object', 'required': ['candidates', 'full', 'partial', 'no_match'], 'properties': {'full': {'type': 'integer'}, 'partial': {'type': 'integer'}, 'no_match': {'type': 'integer'}, 'candidates': {'type': 'integer'}}}, 'request': {'type': 'object'}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'needs_input': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'reason'], 'properties': {'field': {'type': 'string'}, 'reason': {'type': 'string'}}}}, 'zero_result': {'type': ['object', 'null'], 'properties': {'note': {'type': 'string'}, 'conditions': {'type': 'array', 'items': {'type': 'object', 'required': ['condition', 'label', 'excluded', 'would_match_if_relaxed', 'closest'], 'properties': {'label': {'type': 'string'}, 'closest': {'type': ['object', 'null'], 'required': ['offer_id', 'offer_name', 'provider_name', 'billing', 'monthly_cost', 'meets_all', 'fails'], 'properties': {'fails': {'type': 'string'}, 'billing': {'type': 'string'}, 'offer_id': {'type': 'string'}, 'page_url': {'type': 'string'}, 'meets_all': {'enum': [True, False, 'unknown'], 'description': 'Judged against the required conditions of this call only: true when every one is met, false when one is not met, "unknown" when none fails and one is not stated on the official pages.'}, 'offer_name': {'type': 'string'}, 'monthly_cost': {'type': 'object'}, 'provider_name': {'type': 'string'}}, 'description': 'The cheapest plan that meets every other required condition but not this one. It does not meet the request (meets_all false or "unknown").'}, 'unknown': {'type': 'integer'}, 'excluded': {'type': 'integer'}, 'condition': {'type': 'string'}, 'would_match_if_relaxed': {'type': 'integer'}}}}}}, 'full_matches': {'type': 'array', 'items': {'type': 'object', 'required': ['offer_id', 'offer_name', 'product_id', 'provider_name', 'match', 'meets_all', 'verdict', 'billing', 'monthly_cost', 'conditions', 'unmet_conditions', 'unknown_conditions', 'link', 'checked_at'], 'properties': {'link': {'type': 'object', 'required': ['url', 'landing', 'link_level', 'affiliate'], 'properties': {'url': {'type': 'string'}, 'note': {'type': ['string', 'null']}, 'landing': {'type': 'string'}, 'affiliate': {'type': 'object', 'required': ['status'], 'properties': {'status': {'type': 'string'}, 'program': {'type': ['string', 'null']}, 'disclosure': {'type': ['string', 'null']}}}, 'link_level': {'type': 'string'}}}, 'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'listed': {'type': 'boolean'}, 'billing': {'type': 'string'}, 'verdict': {'type': 'string', 'description': 'One sentence: the conditions met, or the ones not met or not stated, with the reason.'}, 'offer_id': {'type': 'string'}, 'page_url': {'type': 'string'}, 'meets_all': {'enum': [True, False, 'unknown'], 'description': 'Judged against the required conditions of this call only: true when every one is met, false when one is not met, "unknown" when none fails and one is not stated on the official pages.'}, 'checked_at': {'type': ['string', 'null']}, 'conditions': {'type': 'array', 'items': {'type': 'object', 'required': ['condition', 'label', 'required', 'verdict', 'reason', 'facts'], 'properties': {'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Facts the verdict was judged from. The monthly budget is judged from monthly_cost; its price facts are listed there only.'}, 'label': {'type': 'string'}, 'reason': {'type': 'string'}, 'verdict': {'enum': ['MET', 'UNMET', 'UNKNOWN']}, 'required': {'type': 'boolean'}, 'condition': {'type': 'string'}}}}, 'offer_name': {'type': 'string'}, 'product_id': {'type': 'string'}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'provider_id': {'type': 'string'}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}, 'product_name': {'type': 'string'}, 'preferred_met': {'type': 'integer'}, 'provider_name': {'type': 'string'}, 'billing_options': {'type': 'array', 'items': {'type': 'string'}}, 'unmet_conditions': {'type': 'array', 'items': {'type': 'string'}}, 'prices_exclude_tax': {'type': ['boolean', 'null']}, 'unknown_conditions': {'type': 'array', 'items': {'type': 'string'}}}}}, 'partial_matches': {'type': 'array', 'items': {'type': 'object', 'required': ['offer_id', 'offer_name', 'product_id', 'provider_name', 'match', 'meets_all', 'verdict', 'billing', 'monthly_cost', 'conditions', 'unmet_conditions', 'unknown_conditions', 'link', 'checked_at'], 'properties': {'link': {'type': 'object', 'required': ['url', 'landing', 'link_level', 'affiliate'], 'properties': {'url': {'type': 'string'}, 'note': {'type': ['string', 'null']}, 'landing': {'type': 'string'}, 'affiliate': {'type': 'object', 'required': ['status'], 'properties': {'status': {'type': 'string'}, 'program': {'type': ['string', 'null']}, 'disclosure': {'type': ['string', 'null']}}}, 'link_level': {'type': 'string'}}}, 'match': {'enum': ['FULL_MATCH', 'PARTIAL_MATCH', 'NO_MATCH']}, 'listed': {'type': 'boolean'}, 'billing': {'type': 'string'}, 'verdict': {'type': 'string', 'description': 'One sentence: the conditions met, or the ones not met or not stated, with the reason.'}, 'offer_id': {'type': 'string'}, 'page_url': {'type': 'string'}, 'meets_all': {'enum': [True, False, 'unknown'], 'description': 'Judged against the required conditions of this call only: true when every one is met, false when one is not met, "unknown" when none fails and one is not stated on the official pages.'}, 'checked_at': {'type': ['string', 'null']}, 'conditions': {'type': 'array', 'items': {'type': 'object', 'required': ['condition', 'label', 'required', 'verdict', 'reason', 'facts'], 'properties': {'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Facts the verdict was judged from. The monthly budget is judged from monthly_cost; its price facts are listed there only.'}, 'label': {'type': 'string'}, 'reason': {'type': 'string'}, 'verdict': {'enum': ['MET', 'UNMET', 'UNKNOWN']}, 'required': {'type': 'boolean'}, 'condition': {'type': 'string'}}}}, 'offer_name': {'type': 'string'}, 'product_id': {'type': 'string'}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'provider_id': {'type': 'string'}, 'monthly_cost': {'type': 'object', 'required': ['status', 'usd', 'explanation'], 'properties': {'low': {'type': ['number', 'null']}, 'usd': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'facts': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'status', 'value', 'level', 'evidence', 'checked_at'], 'properties': {'key': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'level': {'type': ['string', 'null'], 'description': 'Where the fact is recorded: offer (the plan), product or provider.'}, 'stale': {'type': 'boolean'}, 'value': {}, 'status': {'enum': ['TRUE', 'FALSE', 'NOT_SUPPORTED', 'UNKNOWN', 'CONFLICT', 'STALE', 'MISSING'], 'description': 'TRUE: stated with the value; FALSE / NOT_SUPPORTED: stated as unavailable; UNKNOWN: not stated; CONFLICT: official pages disagree (value lists each version); STALE: past its recheck date; MISSING: not recorded.'}, 'derived': {'type': 'string', 'description': 'How the value follows from the quoted sentence when it is not literal.'}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'quote'], 'properties': {'url': {'type': 'string', 'description': 'Official page the sentence was found on.'}, 'quote': {'type': 'string', 'description': 'The sentence as it appears on that page.'}, 'source_type': {'enum': ['official_pricing', 'official_docs', 'third_party'], 'description': 'Only with detail=full.'}, 'retrieved_at': {'type': 'string', 'description': 'Date the page was read (YYYY-MM-DD). Only with detail=full.'}}}}, 'applies_to': {'type': ['object', 'null'], 'description': 'get_details only: billing options the fact is limited to.'}, 'checked_at': {'type': ['string', 'null']}, 'exceptions': {'type': 'array', 'description': 'get_details only: plans with a different value.'}, 'via_exception': {'type': 'boolean', 'description': 'Present and true when a plan-specific exception replaced the general value.'}, 'also_stated_in': {'type': 'array', 'items': {'type': 'string'}, 'description': 'get_details only: other official machine-readable documents of the provider (llms.txt, llms-full.txt, OpenAPI files, MCP tool listings) that contain the same quoted sentences.'}}}, 'description': 'Price facts the cost was computed from.'}, 'status': {'enum': ['exact', 'range', 'lower_bound', 'unknown']}, 'explanation': {'type': 'string'}, 'lower_bound': {'type': ['number', 'null']}, 'upfront_usd': {'type': ['number', 'null']}}}, 'product_name': {'type': 'string'}, 'preferred_met': {'type': 'integer'}, 'provider_name': {'type': 'string'}, 'billing_options': {'type': 'array', 'items': {'type': 'string'}}, 'unmet_conditions': {'type': 'array', 'items': {'type': 'string'}}, 'prices_exclude_tax': {'type': ['boolean', 'null']}, 'unknown_conditions': {'type': 'array', 'items': {'type': 'string'}}}}}}}
近期工具变更
类似的 MCP 服务器
shiply
Publishes and manages web applications with SQL databases, serverless functions, domains, email tests, client intake, contracts, …
Fine Structure
Builds and hosts full-stack applications from prompts and supports agent communication through WhatsApp and email.
mcp
Provisions and manages cloud instances, networks, storage, databases, backups, VPNs, application deployments, and autocoding-agen…
EchoRelay
Manages a hosted API relay runtime, including projects, endpoints, credentials, publishing, keys, delivery logs, and dead-letter …
Supero
Builds, validates, publishes, tests, and deploys multi-tenant applications with schemas, CRUD operations, external data connector…
Replicate
Provides access to Replicate models, versions, collections, hardware, predictions, and deployments for running and managing hoste…
Relvato
Monitors websites through configurable checks, scans, run histories, alerts, health overviews, and troubleshooting prompts.
Relin
Configures webhook sources and destinations, monitors delivery health, investigates failures, manages retries, and replays events.