{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"Myrmigo REST API","version":"0.2.0","summary":"Reference for tasks on travel and rental bookings: official site and entry page, the company that services the booking, dated facts, where the person acts.","description":"The same answers as the MCP tools check_booking_change_cancel_refund and find_official_booking_site (https://mcp.myrmigo.com/mcp), as JSON. POST /v1/reference and the GET routes need no key. Parse the fields: `card` is text for a model and may change. New fields and enum values may be added; ignore the ones you do not know. Show `disclosure` whenever it is present. Guide text is CC BY-SA 4.0 (credit Myrmigo); quotes belong to their owners. Errors: {\"error\",\"code\"}; on 429, wait for Retry-After. POST /v1/rights (the MCP tool check_flight_compensation) is a descriptive EU261/UK261 rules check from dated official sources, not legal advice. Browser pages and extensions can call GET /v1/intents, GET /v1/sites, GET /v1/guides/{site}/{ref}, GET /v1/schema/rights.json, GET /v1/schema/route.json, GET /v1/schema/guide.json, GET /openapi.json from any origin (CORS, without credentials); call the other routes from a server. Guide: https://myrmigo.com/developers/","termsOfService":"https://myrmigo.com/terms/","contact":{"name":"Myrmigo","url":"https://myrmigo.com/developers/"}},"externalDocs":{"description":"Integration guide","url":"https://myrmigo.com/developers/"},"servers":[{"url":"https://mcp.myrmigo.com"}],"tags":[{"name":"reference","description":"Anonymous, read-only"},{"name":"agent","description":"Needs an mrm_live_ key"},{"name":"owner","description":"Owner Shield"}],"paths":{"/v1/reference":{"post":{"operationId":"reference","tags":["reference"],"summary":"Reference answer for one task (anonymous)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferenceFindInput"},"example":{"task":"ferry.change","where":"Blue Star","booked_via":"Ferryhopper"}}}},"responses":{"200":{"description":"The answer (myrmigo.route/1, no run_id)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferenceRouteResult"}}}},"400":{"description":"The body is not what the route takes; `error` says which field and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A browser Origin this route does not accept, or a Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The body is over 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Wait for Retry-After.","headers":{"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/rights":{"post":{"operationId":"rights","tags":["reference"],"security":[{},{"bearer":[]}],"summary":"EU261/UK261 flight compensation check for one flight (not legal advice); the same as the MCP tool check_flight_compensation","description":"Typed facts about one flight, none of them personal data; used for this answer only and never stored or logged. verdict depends: ask the user `questions`, then call again. The traveller files any claim personally; Myrmigo submits nothing. Not open to browser pages.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RightsInput"},"example":{"flight_date":"2026-09-26","from":"ATH","to":"PAS","carrier":"A3","event":"cancelled","notice_days":0}}}},"responses":{"200":{"description":"The answer (myrmigo.rights/1)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RightsAnswer"}}}},"400":{"description":"A field is missing or invalid; `error` says which and how to fix it (it never repeats the value).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid key (omit the header for anonymous access)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A browser Origin this route does not accept, or a Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The body is over 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"10 per minute and 100 per day per network or organisation. Wait for Retry-After.","headers":{"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/route":{"post":{"operationId":"route","tags":["agent"],"summary":"Agent answer: a step card where the site allows it, and a run_id","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentFindInput"}}}},"responses":{"200":{"description":"The answer (myrmigo.route/1)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRouteResult"}}}},"400":{"description":"The body is not what the route takes; `error` says which field and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A browser Origin this route does not accept, or a Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The body is over 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/runs":{"post":{"operationId":"report","tags":["agent"],"summary":"Report the outcome of a run (scrubbed before it is stored)","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportInput"}}}},"responses":{"200":{"description":"Recorded, or not recorded with the reason in `effect`","content":{"application/json":{"schema":{"type":"object","description":"myrmigo report result","properties":{"recorded":{"type":"boolean"},"effect":{"type":"string"},"text":{"type":"string"}}}}}},"400":{"description":"The body is not a JSON object.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A browser Origin this route does not accept, or a Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The body is over 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A field is invalid, the run_id is unknown, or the scrubber rejected the report; `fix` says what to change","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"A report without a run_id is a flag: 10 per minute and 100 per day. Wait for Retry-After.","headers":{"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1":{"get":{"operationId":"index","tags":["reference"],"summary":"Where things are: this document, the MCP server, the reference route, the task ids and the answer schema","responses":{"200":{"description":"Links","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"A Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/intents":{"get":{"operationId":"intents","tags":["reference"],"summary":"Task ids, what each needs and where the person acts","responses":{"200":{"description":"myrmigo.intents/1","content":{"application/json":{"schema":{"type":"object","description":"Task list","properties":{"schema":{"const":"myrmigo.intents/1"},"intents":{"type":"array","items":{"type":"object"}}}}}}},"403":{"description":"A browser Origin this route does not accept, or a Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/sites":{"get":{"operationId":"sites","tags":["reference"],"summary":"Sites in the catalog","security":[{},{"bearer":[]}],"responses":{"200":{"description":"myrmigo.sites/1","content":{"application/json":{"schema":{"type":"object","description":"Site list","properties":{"schema":{"const":"myrmigo.sites/1"},"sites":{"type":"array","items":{"type":"object"}}}}}}},"401":{"description":"Invalid key (omit the header for anonymous access)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A browser Origin this route does not accept, or a Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/guides/{site}/{ref}":{"get":{"operationId":"guide","tags":["reference"],"summary":"One guide version, served under the site's terms (ETag = body hash)","security":[{},{"bearer":[]}],"parameters":[{"name":"site","in":"path","required":true,"schema":{"type":"string"},"example":"ferryhopper"},{"name":"ref","in":"path","required":true,"schema":{"type":"string"},"description":"task[~variant][@version]","example":"ferry.change"},{"name":"lang","in":"query","required":false,"schema":{"type":"string"}},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"myrmigo.guide_version/1","content":{"application/json":{"schema":{"type":"object"}}}},"304":{"description":"Not modified"},"401":{"description":"Invalid key (omit the header for anonymous access)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A browser Origin this route does not accept, or a Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not mapped, or no guide for this task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Withdrawn, excluded or disallowed; `reason` says which","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/flags":{"post":{"operationId":"flag","tags":["reference"],"summary":"Flag wrong or outdated content (enum values only, no free text)","security":[{},{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlagInput"}}}},"responses":{"202":{"description":"Recorded, or a duplicate","content":{"application/json":{"schema":{"type":"object","description":"Flag result","properties":{"recorded":{"type":"boolean"},"effect":{"type":"string"}}}}}},"400":{"description":"The body is not what the route takes; `error` says which field and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid key (omit the header for anonymous access)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A browser Origin this route does not accept, or a Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Site or task not listed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The body is over 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Wait for Retry-After.","headers":{"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Flags are not recorded on this server","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/terms-register":{"get":{"operationId":"termsRegister","tags":["reference"],"summary":"How Myrmigo reads each site's terms for agent use (not legal advice)","responses":{"200":{"description":"myrmigo.terms_register/1","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"A browser Origin this route does not accept, or a Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/owner/claims":{"post":{"operationId":"ownerClaim","tags":["owner"],"summary":"Start a domain claim: returns a claim token and a DNS TXT record to publish","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","maxLength":253}}},"example":{"domain":"example.com"}}}},"responses":{"201":{"description":"Claim opened","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"The body is not what the route takes; `error` says which field and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A browser Origin this route does not accept, or a Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Already verified, or too many open claims","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The body is over 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Wait for Retry-After.","headers":{"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/owner/claims/verify":{"post":{"operationId":"ownerVerify","tags":["owner"],"summary":"Check the TXT record (within 72 hours); returns an owner token and the sites it covers","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain","claim_token"],"properties":{"domain":{"type":"string"},"claim_token":{"type":"string"}}}}}},"responses":{"200":{"description":"Verified","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"The body is not what the route takes; `error` says which field and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"A browser Origin this route does not accept, or a Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No open claim for this domain and token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The body is over 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"TXT record not found yet; `expected` shows it, and `hint` says whether a Myrmigo record with another value is there (`other_value`) or none (`not_found`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Wait for Retry-After.","headers":{"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"DNS lookup failed; try again later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/owner/disallows":{"post":{"operationId":"ownerDisallow","tags":["owner"],"summary":"Switch guides off for a site or one task (takes effect at once)","security":[{"owner":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["site"],"properties":{"site":{"type":"string"},"intent":{"type":"string","default":"*"},"reason":{"type":"string"}}}}}},"responses":{"200":{"description":"Already disallowed (it stays in effect)","content":{"application/json":{"schema":{"type":"object"}}}},"201":{"description":"Disallowed","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"The body is not what the route takes; `error` says which field and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid owner token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The owner token does not cover that site. Or: A browser Origin this route does not accept, or a Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Site or task not listed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The body is over 64 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Wait for Retry-After.","headers":{"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/schema/rights.json":{"get":{"operationId":"rightsSchema","tags":["reference"],"summary":"JSON Schema of myrmigo.rights/1","responses":{"200":{"description":"JSON Schema (draft 2020-12)","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"A Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/schema/route.json":{"get":{"operationId":"routeSchema","tags":["reference"],"summary":"JSON Schema of myrmigo.route/1","responses":{"200":{"description":"JSON Schema (draft 2020-12)","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"A Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/schema/guide.json":{"get":{"operationId":"guideSchema","tags":["reference"],"summary":"JSON Schema of myrmigo.guide/1","responses":{"200":{"description":"JSON Schema (draft 2020-12)","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"A Host that is not this server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/openapi.json":{"get":{"operationId":"openapi","tags":["reference"],"summary":"This document (also at /v1/openapi.json)","responses":{"200":{"description":"OpenAPI 3.1","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/healthz":{"get":{"operationId":"health","summary":"Liveness","parameters":[{"name":"db","in":"query","required":false,"schema":{"type":"string"},"description":"Present (e.g. ?db=1): also check the database, within 2 seconds, and name the build"}],"responses":{"200":{"description":"{\"ok\":true}","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"With ?db=1: the database did not answer ({\"ok\":false})","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"An mrm_live_ organisation key, issued by Myrmigo (not self-serve)."},"owner":{"type":"http","scheme":"bearer","description":"An owner token from POST /v1/owner/claims/verify."}},"schemas":{"ReferenceFindInput":{"type":"object","properties":{"task":{"type":"string","description":"One id, or a short English phrase if none fits: flight.change flight.cancel flight.name_correction flight.disruption checkin.online boarding_pass.get baggage.add seat.select assistance.request stay.change_dates stay.change_guests stay.cancel ferry.change ferry.cancel ferry.eticket ferry.disruption booking.find refund.request refund.status invoice.get claim.compensation account.update_contact voucher.redeem trip.book rental.book rental.status rental.change rental.cancel rental.extend dev.deploy_app dev.add_custom_domain dev.set_secret dev.create_repo dev.protect_branch dev.publish_package dev.create_token"},"where":{"description":"Site, brand, or page URL without its query; omit on email, search or blank pages.","type":["string","null"]},"booked_via":{"description":"Only if booked via another site or agent: its name or domain.","type":["string","null"]}},"required":["task"]},"AgentFindInput":{"type":"object","properties":{"task":{"type":"string","description":"One id, or a short English phrase if none fits: flight.change flight.cancel flight.name_correction flight.disruption checkin.online boarding_pass.get baggage.add seat.select assistance.request stay.change_dates stay.change_guests stay.cancel ferry.change ferry.cancel ferry.eticket ferry.disruption booking.find refund.request refund.status invoice.get claim.compensation account.update_contact voucher.redeem trip.book rental.book rental.status rental.change rental.cancel rental.extend dev.deploy_app dev.add_custom_domain dev.set_secret dev.create_repo dev.protect_branch dev.publish_package dev.create_token"},"where":{"description":"Site, brand, or page URL without its query; omit on email, search or blank pages.","type":["string","null"]},"booked_via":{"description":"Only if booked via another site or agent: its name or domain.","type":["string","null"]},"goal":{"description":"The user's request, any language, without names, codes, emails or dates.","type":["string","null"]},"id":{"type":["string","null"]},"run_id":{"type":["string","null"]}},"required":["task"]},"ReportInput":{"type":"object","properties":{"run_id":{"type":["string","null"]},"outcome":{"type":"string","enum":["success","failure","blocked","user_aborted"]},"followed":{"description":"exactly | with_changes | not_used","type":["string","null"]},"failed_step":{"description":"Step number or w1","type":["string","null"]},"reason":{"description":"One of: element_not_found unexpected_page step_order_wrong timeout site_error agent_error login_required captcha_or_bot_wall not_eligible user_declined other","type":["string","null"]},"patch":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"steps":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"concern":{"description":"One of: broken_or_outdated wrong_fact unsafe_instructions off_site_navigation asks_unneeded_data missing_confirmation contains_personal_data wrong_site","type":["string","null"]},"where":{"type":["string","null"]},"task":{"type":["string","null"]}},"required":["outcome"]},"FlagInput":{"type":"object","properties":{"site":{"type":"string","pattern":"^[a-z0-9_]{1,40}$"},"intent":{"type":"string","pattern":"^(?:[a-z_]{1,30}\\.[a-z_]{1,30}|\\*)$"},"version":{"anyOf":[{"type":"integer","minimum":1,"maximum":100000},{"type":"null"}]},"concern":{"type":"string","enum":["broken_or_outdated","wrong_fact","unsafe_instructions","off_site_navigation","asks_unneeded_data","missing_confirmation","contains_personal_data","wrong_site"]}},"required":["site","intent","concern"]},"RightsInput":{"type":"object","properties":{"flight_date":{"type":"string","description":"Scheduled departure, YYYY-MM-DD"},"from":{"type":"string","description":"IATA airport where the booking starts"},"to":{"type":"string","description":"IATA airport, final destination"},"carrier":{"description":"Operating airline: IATA code or name","type":["string","null"]},"event":{"type":"string","enum":["cancelled","delayed","denied_boarding","downgraded"],"description":"cancelled: by the airline; denied_boarding: refused against their will, e.g. overbooking"},"arrival_delay_minutes":{"description":"At the final destination; if rerouted, on the new flight","type":["number","null"]},"notice_days":{"description":"cancelled: whole days' notice before departure","type":["number","null"]},"reroute_departure_offset_minutes":{"description":"cancelled: new minus original departure (negative: earlier)","type":["number","null"]},"cause":{"description":"Reason the airline gave","anyOf":[{"type":"string","enum":["unknown","technical","operational","airline_strike","external_strike","weather","air_traffic_control","security","bird_strike","earlier_flight","other_external"]},{"type":"null"}]},"distance_km":{"description":"Only if an airport is not recognised","type":["number","null"]}},"required":["flight_date","from","to","event"]},"RightsAnswer":{"type":"object","properties":{"schema":{"type":"string","const":"myrmigo.rights/1","description":"The format id of this answer."},"verdict":{"type":"string","description":"eligible: every condition holds and the amount is settled. not_eligible: a rule decides it by itself (no regime covers the flight, 14 days of notice, a replacement within the time limits, an arrival less than 3 h late). depends: a fact, a proof or a legal question is open; ask the user `questions`.","examples":["eligible","not_eligible","depends"]},"depends_on":{"type":"array","items":{"type":"string","examples":["airport","carrier","date_coverage","arrival_delay","notice","reroute","cause_proof","cause_unknown","distance","intra_community"]},"description":"Why the verdict is depends (empty otherwise): branch on these without parsing text."},"regime":{"anyOf":[{"type":"string","examples":["eu261","uk261"]},{"type":"null"}],"description":"The rules that apply (the departure airport's first); null when none, or when the facts leave it open."},"also_regime":{"anyOf":[{"type":"string","examples":["eu261","uk261"]},{"type":"null"}],"description":"The other rules may also cover the flight; compensation is paid once, never added."},"rules":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"as_of":{"type":"string"},"covers":{"type":"object","properties":{"from":{"type":["string","null"]},"to":{"type":["string","null"]}},"required":["from","to"]}},"required":["id","as_of","covers"]},{"type":"null"}],"description":"The rules version by flight date, the day its data was read, and the flight dates Myrmigo serves it for."},"flight":{"type":"object","properties":{"date":{"type":"string"},"event":{"type":"string","examples":["cancelled","delayed","denied_boarding","downgraded"]},"cause":{"anyOf":[{"type":"string","examples":["unknown","technical","operational","airline_strike","external_strike","weather","air_traffic_control","security","bird_strike","earlier_flight","other_external"]},{"type":"null"}]},"from":{"type":"object","properties":{"iata":{"type":"string"},"known":{"type":"boolean"},"name":{"type":["string","null"]},"country":{"type":["string","null"]},"area":{"anyOf":[{"type":"string","examples":["eu","eea","ch","uk","other"]},{"type":"null"}]}},"required":["iata","known","name","country","area"]},"to":{"type":"object","properties":{"iata":{"type":"string"},"known":{"type":"boolean"},"name":{"type":["string","null"]},"country":{"type":["string","null"]},"area":{"anyOf":[{"type":"string","examples":["eu","eea","ch","uk","other"]},{"type":"null"}]}},"required":["iata","known","name","country","area"]},"carrier":{"type":"object","properties":{"code":{"type":["string","null"]},"name":{"type":["string","null"]},"licence":{"anyOf":[{"anyOf":[{"type":"string","examples":["eu","eea","ch","uk","other"]},{"type":"string","const":"ambiguous"}]},{"type":"null"}]},"operators":{"type":"array","items":{"type":"string"}}},"required":["code","name","licence","operators"]},"distance_km":{"type":["number","null"]},"distance_basis":{"anyOf":[{"type":"string","examples":["airports","caller"]},{"type":"null"}]},"intra_community":{"type":["boolean","null"]}},"required":["date","event","cause","from","to","carrier","distance_km","distance_basis","intra_community"],"description":"The facts as the rules read them. An airport or airline the data does not list is `known: false` or null, never guessed."},"compensation":{"type":"object","properties":{"kind":{"type":"string","examples":["fixed","percent_of_fare"]},"currency":{"anyOf":[{"type":"string","examples":["EUR","GBP"]},{"type":"null"}]},"full":{"type":["number","null"]},"reduced":{"type":["number","null"]},"applies":{"type":"string","examples":["full","reduced","either","unknown","none"]},"possible":{"type":"array","items":{"type":"object","properties":{"currency":{"anyOf":[{"type":"string","examples":["EUR","GBP"]},{"type":"null"}]},"amount":{"type":"number"}},"required":["currency","amount"]}},"band":{"type":["string","null"]},"per":{"type":"string","const":"passenger"}},"required":["kind","currency","full","reduced","applies","possible","band","per"],"description":"The amount per passenger, from the rules' own table only. either: full or halved, depending on when the replacement arrived; unknown: `possible` lists every amount the facts leave open."},"why":{"type":"array","items":{"type":"object","properties":{"rule":{"type":["string","null"]},"rules":{"type":"array","items":{"type":"string"}},"text":{"type":"string"},"sources":{"type":"array","items":{"type":"string"}}},"required":["rule","rules","text","sources"]},"description":"The reasons, in order, each with the rule ids and source ids it rests on."},"assumes":{"type":"array","items":{"type":"string"},"description":"What the answer takes as given."},"owed_now":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","examples":["refund_or_rerouting","care","refund_option","downgrade_refund"]},"text":{"type":"string"},"rules":{"type":"array","items":{"type":"string"}}},"required":["kind","text","rules"]},"description":"What the airline owes whatever the verdict (refund within 7 days or re-routing, care)."},"questions":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","examples":["flight_date","from","to","carrier","arrival_delay_minutes","notice_days","reroute_departure_offset_minutes","cause","distance_km"]},"ask":{"type":"string"},"changes":{"type":"string"}},"required":["input","ask","changes"]},"description":"What would settle or change the verdict: ask the user, then call again with the input filled."},"claim":{"type":"array","items":{"type":"object","properties":{"step":{"type":"number"},"kind":{"type":"string","examples":["airline","neb","adr","caa"]},"name":{"type":"string"},"url":{"type":["string","null"]},"via_group":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}],"description":"Set on the airline step when `url` is its group's claim form, which the airline's own site sends passengers to (Olympic Air: the Aegean Airlines form); null otherwise."},"email":{"type":["string","null"]},"forms":{"type":"array","items":{"type":"object","properties":{"language":{"type":"string"},"url":{"type":"string"}},"required":["language","url"]}},"when":{"type":"string"},"rules":{"type":"array","items":{"type":"string"}}},"required":["step","kind","name","url","via_group","email","forms","when","rules"]},"description":"Where the traveller claims, in order: the airline first, then the national enforcement body (EU261) or the ADR scheme or the CAA (UK261). The traveller files personally; Myrmigo submits nothing. Links only where they were read on the official site (or, `via_group`, on the airline's group's site, where its own site sends passengers)."},"evidence":{"type":"array","items":{"type":"string"},"description":"What to keep. Myrmigo needs none of it."},"limitation":{"type":"object","properties":{"text":{"type":"string"},"rules":{"type":"array","items":{"type":"string"}},"periods":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string"},"period":{"type":"string"},"source":{"type":"string"}},"required":["country","period","source"]}},"notes":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string"},"text":{"type":"string"},"sources":{"type":"array","items":{"type":"string"}}},"required":["country","text","sources"]}}},"required":["text","rules","periods","notes"],"description":"The claim deadline: a period only where an official body states one (`periods`); a cautious note with its sources where the law is read but not settled (`notes`, e.g. Greece); otherwise national law, check."},"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"publisher":{"type":"string"},"url":{"type":"string"},"fetched_on":{"type":"string"}},"required":["id","title","publisher","url","fetched_on"]},"description":"The official sources behind the answer, with the day each was read."},"card":{"type":"string","description":"The same answer as compact text for a model (what the MCP tool returns). Not a stable format: parse the fields, not the card."},"notice":{"type":"string","const":"not_legal_advice","description":"A descriptive rules check from dated official sources, not legal advice: the airline, the enforcement body or a court decides."}},"required":["schema","verdict","depends_on","regime","also_regime","rules","flight","compensation","why","assumes","owed_now","questions","claim","evidence","limitation","sources","card","notice"]},"ReferenceRouteResult":{"type":"object","properties":{"schema":{"type":"string","const":"myrmigo.route/1","description":"The format id of this answer."},"surface":{"type":"string","description":"reference: POST /v1/reference and the anonymous MCP server. agent: POST /v1/route with a key.","examples":["reference","agent"]},"match":{"type":"string","description":"How the request matched a step guide, not whether the site was found. none: no guide for this task; with coverage L0 or L1 it is a normal reference answer. question, servicing_question, need_site: ask the user `question.ask_user` (when present), then call again with the chosen option's task or booked_via. For an option without booked_via (another site or travel agent), send the name the user gives as booked_via, or \"not sure\". out_of_scope: see `refusal`. exact, likely: a guide was found (agent surface, where the site allows it).","examples":["exact","likely","question","servicing_question","none","need_site","out_of_scope"]},"coverage":{"anyOf":[{"type":"string","examples":["L0","L1","L2"]},{"type":"null"}],"description":"L0: official site, entry page and channels. L1: also what to have ready, where the person acts and up to 3 dated facts. L2: also a step guide. null when no site was resolved."},"task":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"schema_action":{"type":"string"},"schema_object":{"type":"string"}},"required":["id","schema_action","schema_object"]},{"type":"null"}],"description":"The task Myrmigo understood: an id from GET /v1/intents. null when none fits."},"site":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"owner":{"type":"string","examples":["claimed","unclaimed"]}},"required":["id","name","domain","owner"]},{"type":"null"}],"description":"The site that services the booking. It can differ from `where` when booked_via names another company."},"servicing_party":{"anyOf":[{"type":"object","properties":{"site":{"type":"string"},"entity":{"type":"string"},"reference_type":{"type":"string","examples":["operator_pnr","seller_ref","either"]},"basis":{"type":"string","examples":["rule","where","booked_via","goal"]}},"required":["site","entity","reference_type","basis"]},{"type":"null"}],"description":"Which company services this booking, which booking reference it takes, and why."},"mode":{"type":"string","description":"How Myrmigo reads the site's terms for agents. unsigned: reference only. excluded: only the official route is given.","examples":["unsigned","co_pilot","agent_assist","excluded"]},"best_route":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","examples":["official_channel","guide","deep_link","human_contact"]},"ref":{"type":"string"},"label":{"type":"string"}},"required":["type","ref","label"]},{"type":"null"}],"description":"Where to go first. `ref` is a URL, or an MCP or API endpoint when type is official_channel."},"also_channels":{"description":"Further official channels for the task, after best_route.","type":"array","items":{"type":"object","properties":{"type":{"type":"string","examples":["mcp","api","app","webmcp","cli"]},"ref":{"type":"string"},"label":{"type":"string"}},"required":["type","ref","label"]}},"disclosure":{"description":"A conflict-of-interest line about this site. Show it to the user with the answer whenever it is present.","type":"string"},"entry_url":{"description":"The official page where the task starts.","type":["string","null"]},"official_domains":{"type":"array","items":{"type":"string"}},"envelope":{"type":"object","properties":{"allowed_domains":{"type":"array","items":{"type":"string"}}},"required":["allowed_domains"],"description":"The hosts the agent navigates on for this task. Not a network allowlist: payment, bank approval (3-D Secure) and CAPTCHA load from other hosts."},"ask_user_first":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"prompt":{"type":"string"}},"required":["name","prompt"]},"description":"What to ask the user for before starting."},"human_only":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","examples":["login","mfa","captcha","3ds","travel_documents","identity_check","payment_details","irreversible_submit","legal_attestation"]},"note":{"type":"string"}},"required":["kind","note"]},"description":"Where the person acts themselves: payment, ID, sign-in, CAPTCHA, bank approval."},"checkpoints":{"type":"array","items":{"type":"string","examples":["login","mfa","captcha","3ds","travel_documents","identity_check","payment_details","irreversible_submit","legal_attestation"]}},"facts":{"type":"array","items":{"type":"object","properties":{"topic":{"type":"string"},"value":{"type":"string"},"source_url":{"type":"string"},"quote":{"type":"string"},"as_of":{"type":"string"},"confirm_on_site":{"type":"boolean","const":true}},"required":["topic","value","source_url","as_of","confirm_on_site"]},"description":"Dated facts with their source. Confirm them on the site; quotes belong to their owners."},"health":{"anyOf":[{"type":"object","properties":{"state":{"type":"string","examples":["ok","suspect","broken","insufficient_data"]},"success":{"type":"object","properties":{"rate":{"type":"number"},"ci95":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}],"items":false,"minItems":2,"maxItems":2},"n":{"type":"number"}},"required":["rate","ci95","n"]},"reported_by_orgs":{"anyOf":[{"type":"number"},{"type":"string","const":"<3"}]},"working_orgs":{"type":"number"}},"required":["state","reported_by_orgs"]},{"type":"null"}],"description":"How reliable the guide has been in reports, when there is one."},"guide":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"number"},"status":{"type":"string","examples":["unverified_seed","staff_verified","owner_verified","withdrawn"]},"verified":{"type":"object","properties":{"by":{"type":"string","examples":["staff","owner"]},"day":{"type":"string"}},"required":["by","day"]},"body_hash":{"type":"string"},"signature":{"type":["string","null"]},"rendering":{"type":"string","examples":["card","prose"]},"summary":{"type":"array","items":{"type":"string"}},"steps":{"type":"array","items":{"type":"object","properties":{"n":{"type":"integer","minimum":1,"maximum":40},"id":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,40}$"},"do":{"type":"string","examples":["goto","click","fill","choose","check","pick_date","press","wait_for","read","user"]},"target":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"match":{"type":"string","examples":["exact","contains"]},"within":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}}},"required":["role"]},"nth":{"type":"integer","minimum":1,"maximum":10}},"required":["role"]},"url":{"type":"string","format":"uri"},"value":{"anyOf":[{"type":"string","pattern":"^\\{[a-z][a-z0-9_]{0,30}\\}$"},{"type":"object","properties":{"option":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}}},"required":["option"]}]},"picker":{"type":"object","properties":{"open":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"match":{"type":"string","examples":["exact","contains"]},"within":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}}},"required":["role"]},"nth":{"type":"integer","minimum":1,"maximum":10}},"required":["role"]},"next_month":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"match":{"type":"string","examples":["exact","contains"]},"within":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}}},"required":["role"]},"nth":{"type":"integer","minimum":1,"maximum":10}},"required":["role"]},"day_label_format":{"type":"string","maxLength":40},"typed_input_ignored":{"type":"boolean"}}},"key":{"type":"string","examples":["Enter","Escape","Tab","ArrowDown","ArrowUp"]},"extract":{"maxItems":6,"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,30}$"}},"expect":{"type":"object","properties":{"url_contains":{"type":"string","maxLength":80,"pattern":"^[/a-z0-9\\-_.{}]+$"},"text":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"sees":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"match":{"type":"string","examples":["exact","contains"]},"within":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}}},"required":["role"]},"nth":{"type":"integer","minimum":1,"maximum":10}},"required":["role"]},"absent":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"timeout_s":{"type":"integer","minimum":1,"maximum":60}}},"optional":{"type":"boolean"},"for_each":{"type":"string","examples":["passenger","segment","room"]},"checkpoint":{"type":"string","examples":["login","mfa","captcha","3ds","travel_documents","identity_check","payment_details","irreversible_submit","legal_attestation"]},"gate":{"type":"object","properties":{"kind":{"type":"string","examples":["payment","irreversible","fee","data_submission"]},"show_user":{"maxItems":6,"type":"array","items":{"anyOf":[{"type":"string","pattern":"^\\{[a-z][a-z0-9_]{0,30}\\}$"},{"type":"string","pattern":"^\\$[a-z][a-z0-9_]{0,30}$"}]}}},"required":["kind","show_user"]},"pitfall":{"type":"string","examples":["consent_banner","upsell_modal","preselected_extra","date_picker_month_nav","typed_date_ignored","confirm_twice","type_to_confirm","decoy_button","late_modal","session_timeout","new_tab","iframe","chat_popup","accent_insensitive","voucher_default","fee","login_wall","captcha"]},"tip":{"type":"string","maxLength":140}},"required":["n","id","do"]}}},"required":["id","version","status","body_hash","signature","rendering","summary"]},{"type":"null"}],"description":"The step guide, when one is served (guide text: CC BY-SA 4.0, credit Myrmigo)."},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"why":{"type":"string"}},"required":["id","why"]}},"question":{"description":"Ask the user this, then call again with the chosen option's task or booked_via. For an option without booked_via (another site or travel agent), send the name the user gives as booked_via, or \"not sure\".","type":"object","properties":{"ask_user":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"task":{"type":"string"},"booked_via":{"type":"string"}},"required":["label"]}}},"required":["ask_user","options"]},"refusal":{"description":"Why the request is out of scope (match out_of_scope).","type":"string"},"warning":{"description":"For example \"NOT MAPPED: …\" when the named site is not in the catalog.","type":"string"},"rights_check":{"description":"On answers about a disrupted flight or a compensation claim (and an airline refund): the EU261/UK261 check for the flight, as the MCP tool and its REST route (POST /v1/rights), with the operating airline to send when the site maps to one. Not legal advice.","type":"object","properties":{"tool":{"type":"string","const":"check_flight_compensation"},"rest":{"type":"string"},"carrier":{"type":["string","null"]}},"required":["tool","rest","carrier"]},"flag_url":{"type":"string","description":"Where to report wrong or outdated content."},"card":{"type":"string","description":"The same answer as compact text for a model (what the MCP tool returns). Not a stable format: parse the fields, not the card."},"notice":{"type":"string","const":"unverified_third_party_reference"}},"required":["schema","surface","match","coverage","task","site","servicing_party","mode","best_route","entry_url","official_domains","envelope","ask_user_first","human_only","checkpoints","facts","health","guide","alternatives","flag_url","card","notice"]},"AgentRouteResult":{"type":"object","properties":{"schema":{"type":"string","const":"myrmigo.route/1","description":"The format id of this answer."},"surface":{"type":"string","description":"reference: POST /v1/reference and the anonymous MCP server. agent: POST /v1/route with a key.","examples":["reference","agent"]},"match":{"type":"string","description":"How the request matched a step guide, not whether the site was found. none: no guide for this task; with coverage L0 or L1 it is a normal reference answer. question, servicing_question, need_site: ask the user `question.ask_user` (when present), then call again with the chosen option's task or booked_via. For an option without booked_via (another site or travel agent), send the name the user gives as booked_via, or \"not sure\". out_of_scope: see `refusal`. exact, likely: a guide was found (agent surface, where the site allows it).","examples":["exact","likely","question","servicing_question","none","need_site","out_of_scope"]},"coverage":{"anyOf":[{"type":"string","examples":["L0","L1","L2"]},{"type":"null"}],"description":"L0: official site, entry page and channels. L1: also what to have ready, where the person acts and up to 3 dated facts. L2: also a step guide. null when no site was resolved."},"task":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"schema_action":{"type":"string"},"schema_object":{"type":"string"}},"required":["id","schema_action","schema_object"]},{"type":"null"}],"description":"The task Myrmigo understood: an id from GET /v1/intents. null when none fits."},"site":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"owner":{"type":"string","examples":["claimed","unclaimed"]}},"required":["id","name","domain","owner"]},{"type":"null"}],"description":"The site that services the booking. It can differ from `where` when booked_via names another company."},"servicing_party":{"anyOf":[{"type":"object","properties":{"site":{"type":"string"},"entity":{"type":"string"},"reference_type":{"type":"string","examples":["operator_pnr","seller_ref","either"]},"basis":{"type":"string","examples":["rule","where","booked_via","goal"]}},"required":["site","entity","reference_type","basis"]},{"type":"null"}],"description":"Which company services this booking, which booking reference it takes, and why."},"mode":{"type":"string","description":"How Myrmigo reads the site's terms for agents. unsigned: reference only. excluded: only the official route is given.","examples":["unsigned","co_pilot","agent_assist","excluded"]},"best_route":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","examples":["official_channel","guide","deep_link","human_contact"]},"ref":{"type":"string"},"label":{"type":"string"}},"required":["type","ref","label"]},{"type":"null"}],"description":"Where to go first. `ref` is a URL, or an MCP or API endpoint when type is official_channel."},"also_channels":{"description":"Further official channels for the task, after best_route.","type":"array","items":{"type":"object","properties":{"type":{"type":"string","examples":["mcp","api","app","webmcp","cli"]},"ref":{"type":"string"},"label":{"type":"string"}},"required":["type","ref","label"]}},"disclosure":{"description":"A conflict-of-interest line about this site. Show it to the user with the answer whenever it is present.","type":"string"},"entry_url":{"description":"The official page where the task starts.","type":["string","null"]},"official_domains":{"type":"array","items":{"type":"string"}},"envelope":{"type":"object","properties":{"allowed_domains":{"type":"array","items":{"type":"string"}}},"required":["allowed_domains"],"description":"The hosts the agent navigates on for this task. Not a network allowlist: payment, bank approval (3-D Secure) and CAPTCHA load from other hosts."},"ask_user_first":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"prompt":{"type":"string"}},"required":["name","prompt"]},"description":"What to ask the user for before starting."},"human_only":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","examples":["login","mfa","captcha","3ds","travel_documents","identity_check","payment_details","irreversible_submit","legal_attestation"]},"note":{"type":"string"}},"required":["kind","note"]},"description":"Where the person acts themselves: payment, ID, sign-in, CAPTCHA, bank approval."},"checkpoints":{"type":"array","items":{"type":"string","examples":["login","mfa","captcha","3ds","travel_documents","identity_check","payment_details","irreversible_submit","legal_attestation"]}},"facts":{"type":"array","items":{"type":"object","properties":{"topic":{"type":"string"},"value":{"type":"string"},"source_url":{"type":"string"},"quote":{"type":"string"},"as_of":{"type":"string"},"confirm_on_site":{"type":"boolean","const":true}},"required":["topic","value","source_url","as_of","confirm_on_site"]},"description":"Dated facts with their source. Confirm them on the site; quotes belong to their owners."},"health":{"anyOf":[{"type":"object","properties":{"state":{"type":"string","examples":["ok","suspect","broken","insufficient_data"]},"success":{"type":"object","properties":{"rate":{"type":"number"},"ci95":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}],"items":false,"minItems":2,"maxItems":2},"n":{"type":"number"}},"required":["rate","ci95","n"]},"reported_by_orgs":{"anyOf":[{"type":"number"},{"type":"string","const":"<3"}]},"working_orgs":{"type":"number"}},"required":["state","reported_by_orgs"]},{"type":"null"}],"description":"How reliable the guide has been in reports, when there is one."},"guide":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"number"},"status":{"type":"string","examples":["unverified_seed","staff_verified","owner_verified","withdrawn"]},"verified":{"type":"object","properties":{"by":{"type":"string","examples":["staff","owner"]},"day":{"type":"string"}},"required":["by","day"]},"body_hash":{"type":"string"},"signature":{"type":["string","null"]},"rendering":{"type":"string","examples":["card","prose"]},"summary":{"type":"array","items":{"type":"string"}},"steps":{"type":"array","items":{"type":"object","properties":{"n":{"type":"integer","minimum":1,"maximum":40},"id":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,40}$"},"do":{"type":"string","examples":["goto","click","fill","choose","check","pick_date","press","wait_for","read","user"]},"target":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"match":{"type":"string","examples":["exact","contains"]},"within":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}}},"required":["role"]},"nth":{"type":"integer","minimum":1,"maximum":10}},"required":["role"]},"url":{"type":"string","format":"uri"},"value":{"anyOf":[{"type":"string","pattern":"^\\{[a-z][a-z0-9_]{0,30}\\}$"},{"type":"object","properties":{"option":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}}},"required":["option"]}]},"picker":{"type":"object","properties":{"open":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"match":{"type":"string","examples":["exact","contains"]},"within":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}}},"required":["role"]},"nth":{"type":"integer","minimum":1,"maximum":10}},"required":["role"]},"next_month":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"match":{"type":"string","examples":["exact","contains"]},"within":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}}},"required":["role"]},"nth":{"type":"integer","minimum":1,"maximum":10}},"required":["role"]},"day_label_format":{"type":"string","maxLength":40},"typed_input_ignored":{"type":"boolean"}}},"key":{"type":"string","examples":["Enter","Escape","Tab","ArrowDown","ArrowUp"]},"extract":{"maxItems":6,"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,30}$"}},"expect":{"type":"object","properties":{"url_contains":{"type":"string","maxLength":80,"pattern":"^[/a-z0-9\\-_.{}]+$"},"text":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"sees":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"match":{"type":"string","examples":["exact","contains"]},"within":{"type":"object","properties":{"role":{"type":"string","examples":["button","link","textbox","searchbox","combobox","listbox","option","checkbox","radio","switch","tab","menuitem","dialog","alertdialog","heading","region","list","listitem","group","grid","gridcell","alert","text"]},"name":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}}},"required":["role"]},"nth":{"type":"integer","minimum":1,"maximum":10}},"required":["role"]},"absent":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{4})?$"},"additionalProperties":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"timeout_s":{"type":"integer","minimum":1,"maximum":60}}},"optional":{"type":"boolean"},"for_each":{"type":"string","examples":["passenger","segment","room"]},"checkpoint":{"type":"string","examples":["login","mfa","captcha","3ds","travel_documents","identity_check","payment_details","irreversible_submit","legal_attestation"]},"gate":{"type":"object","properties":{"kind":{"type":"string","examples":["payment","irreversible","fee","data_submission"]},"show_user":{"maxItems":6,"type":"array","items":{"anyOf":[{"type":"string","pattern":"^\\{[a-z][a-z0-9_]{0,30}\\}$"},{"type":"string","pattern":"^\\$[a-z][a-z0-9_]{0,30}$"}]}}},"required":["kind","show_user"]},"pitfall":{"type":"string","examples":["consent_banner","upsell_modal","preselected_extra","date_picker_month_nav","typed_date_ignored","confirm_twice","type_to_confirm","decoy_button","late_modal","session_timeout","new_tab","iframe","chat_popup","accent_insensitive","voucher_default","fee","login_wall","captcha"]},"tip":{"type":"string","maxLength":140}},"required":["n","id","do"]}}},"required":["id","version","status","body_hash","signature","rendering","summary"]},{"type":"null"}],"description":"The step guide, when one is served (guide text: CC BY-SA 4.0, credit Myrmigo)."},"run_id":{"description":"Agent surface only: the handle for POST /v1/runs. Absent on /v1/reference.","type":["string","null"]},"alternatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"why":{"type":"string"}},"required":["id","why"]}},"question":{"description":"Ask the user this, then call again with the chosen option's task or booked_via. For an option without booked_via (another site or travel agent), send the name the user gives as booked_via, or \"not sure\".","type":"object","properties":{"ask_user":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"task":{"type":"string"},"booked_via":{"type":"string"}},"required":["label"]}}},"required":["ask_user","options"]},"refusal":{"description":"Why the request is out of scope (match out_of_scope).","type":"string"},"warning":{"description":"For example \"NOT MAPPED: …\" when the named site is not in the catalog.","type":"string"},"rights_check":{"description":"On answers about a disrupted flight or a compensation claim (and an airline refund): the EU261/UK261 check for the flight, as the MCP tool and its REST route (POST /v1/rights), with the operating airline to send when the site maps to one. Not legal advice.","type":"object","properties":{"tool":{"type":"string","const":"check_flight_compensation"},"rest":{"type":"string"},"carrier":{"type":["string","null"]}},"required":["tool","rest","carrier"]},"flag_url":{"type":"string","description":"Where to report wrong or outdated content."},"card":{"type":"string","description":"The same answer as compact text for a model (what the MCP tool returns). Not a stable format: parse the fields, not the card."},"notice":{"type":"string","const":"unverified_third_party_reference"}},"required":["schema","surface","match","coverage","task","site","servicing_party","mode","best_route","entry_url","official_domains","envelope","ask_user_first","human_only","checkpoints","facts","health","guide","run_id","alternatives","flag_url","card","notice"]},"Error":{"type":"object","properties":{"error":{"type":"string","description":"One line: what was wrong and how to fix it. Meant for people and logs; branch on `code`."},"code":{"type":"string","description":"Stable machine-readable reason.","examples":["invalid_request","unauthorized","forbidden","origin_not_allowed","host_not_allowed","not_found","conflict","gone","payload_too_large","rejected","rate_limited","internal","writes_disabled","unavailable"]}},"required":["error","code"]}}}}