{"id":"speedworkers_page_history","name":"SpeedWorkers Page History","alias":"SpeedworkersPageHistory","aliases":[],"description_short":"Get the SpeedWorkers indexation history of URLs: when they were cached, with which status code and whether they could be served to bots.","description_long":"\n    List the past indexations of one or more URLs by Botify SpeedWorkers, newest\n    first: date, whether the page was stored in the cache, HTTP status code\n    returned by the origin, device variant, page size, matching cache behavior,\n    whether the page could be served to bots (and why not), canonical URL, next\n    refresh and expiration times, fetching and rendering times.\n\n    Pass every URL in a single call. Each call scans the SpeedWorkers indexation\n    table once, however many URLs it lists, so calling this tool with several\n    URLs at once is what keeps the number of scans down.\n\n    SpeedWorkers stores the history under the URL resolved before caching\n    (ignored query parameters removed...): by default each URL is resolved\n    first, and the requested URL is used when the resolved one has no history.\n\n    Each event has an `event_id`: pass it to `speedworkers_page_snapshot` to get\n    the HTML stored during this indexation. Use `speedworkers_page_preview` for\n    the page currently delivered to bots.\n\n    The project must have SpeedWorkers enabled.\n    ","description_tool_prompt":"\n    List the past indexations of one or more URLs by Botify SpeedWorkers, newest\n    first: date, whether the page was stored in the cache, HTTP status code\n    returned by the origin, device variant, page size, matching cache behavior,\n    whether the page could be served to bots (and why not), canonical URL, next\n    refresh and expiration times, fetching and rendering times.\n\n    Pass every URL in a single call. Each call scans the SpeedWorkers indexation\n    table once, however many URLs it lists, so calling this tool with several\n    URLs at once is what keeps the number of scans down.\n\n    SpeedWorkers stores the history under the URL resolved before caching\n    (ignored query parameters removed...): by default each URL is resolved\n    first, and the requested URL is used when the resolved one has no history.\n\n    Each event has an `event_id`: pass it to `speedworkers_page_snapshot` to get\n    the HTML stored during this indexation. Use `speedworkers_page_preview` for\n    the page currently delivered to bots.\n\n    The project must have SpeedWorkers enabled.\n    ","source":"Botify SpeedWorkers","conversation_examples":[],"tags":["url data"],"available_in_chat":true,"available_in_deepthink":true,"available_in_mcp":true,"mcp_audience":"all","config":{"type":"object","properties":{},"required":[]},"item":{"type":"object","properties":{"urls":{"description":"URLs to get the SpeedWorkers indexation history of. Pass several URLs in one call: they are read in a single scan of the indexation table. One call returns at most 10000 events (URLs x limit). Resolving URLs counts each URL twice, once for the resolved form and once for the requested one.","items":{"type":"string"},"maxItems":1000,"minItems":1,"title":"URLs","type":"array"},"days":{"default":15,"description":"Number of past days to look for indexation events in.","maximum":90,"minimum":1,"title":"Days","type":"integer"},"limit":{"default":50,"description":"Maximum number of indexation events to return per URL, newest first.","maximum":500,"minimum":1,"title":"Limit","type":"integer"},"resolve_url":{"default":true,"description":"Resolve each URL the way SpeedWorkers does before caching it (ignored query parameters removed...), since the indexation history is stored under the resolved URL.","title":"Resolve URL","type":"boolean"}},"required":["urls"]},"response":{"$defs":{"SpeedWorkersIndexationEvent":{"properties":{"event_id":{"description":"Opaque ID of the indexation event. Pass it to the `speedworkers_page_snapshot` tool to get the HTML SpeedWorkers stored during this indexation.","title":"Event Id","type":"string"},"indexed_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the indexation happened","title":"Indexed At"},"indexed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether the page was stored in the SpeedWorkers cache","title":"Indexed"},"http_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"HTTP status code returned by the origin","title":"Http Code"},"device":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Device variant (desktop, mobile, na)","title":"Device"},"page_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Page size, in bytes","title":"Page Size"},"section_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ID of the matching cache behavior (section)","title":"Section Id"},"section_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Name of the matching cache behavior (section)","title":"Section Name"},"ready_to_be_served":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether the page can be served to bots (indexed, a servable status code, and no failed or errored quality control)","title":"Ready To Be Served"},"not_ready_to_be_served_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Why the page cannot be served to bots (status_code, quality_controls, not_indexed)","title":"Not Ready To Be Served Reason"},"not_deliverable_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Why the page would not be delivered to bots (e.g. not_cached, quality_controls_failed, last_refresh_5xx). `delivered` when it was delivered, `cached` when it was served from cache with no blocking reason.","title":"Not Deliverable Reason"},"canonical_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Canonical URL found in the page","title":"Canonical Url"},"canonical_equal":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether the canonical URL is the page URL","title":"Canonical Equal"},"next_refresh_time":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the page is due for a refresh","title":"Next Refresh Time"},"expiration_time":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"description":"When the cached page expires","title":"Expiration Time"},"ttl_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Time between the indexation and the next refresh, in minutes","title":"Ttl Minutes"},"time_to_fetch_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Time spent fetching the page, in ms","title":"Time To Fetch Ms"},"time_to_render_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Time spent rendering the page, in ms","title":"Time To Render Ms"}},"required":["event_id"],"title":"SpeedWorkersIndexationEvent","type":"object"},"SpeedWorkersUrlHistory":{"properties":{"queried_url":{"description":"The URL from the request","title":"Queried Url","type":"string"},"resolved_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The URL as resolved by SpeedWorkers before caching, when it differs from the requested one","title":"Resolved Url"},"events":{"default":[],"description":"Indexation events, newest first","items":{"$ref":"#/$defs/SpeedWorkersIndexationEvent"},"title":"Events","type":"array"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Why no indexation event was returned, if any","title":"Reason"}},"required":["queried_url"],"title":"SpeedWorkersUrlHistory","type":"object"}},"properties":{"pages":{"description":"Indexation history of each requested URL, in the order given","items":{"$ref":"#/$defs/SpeedWorkersUrlHistory"},"title":"Pages","type":"array"}},"required":["pages"],"title":"SpeedWorkersPageHistoryProcessedItem","type":"object"},"has_canvas":false,"open_canvas_automatically":false}