Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Live → Recently observed
Recently observed → Live
Live → Recently observed
https://surfingdog.ai/.well-known/mcp/server-card.json (mcp_streamable_http) — from ard_catalog
Changed the definition of "report_door" and "search_businesses"
⟨94 unchanged words⟩ carries no person and nothing that was said. Reports signed with your own key or your platform's, about businesses your own signed searches here returned, earn a larger reading allowance (this network's /report.md).
⟨173 unchanged words⟩ as found, with the date it waschecked.checked; a local one is listed once its site is matched to its entry on public maps or in a business register, or its owner proves the site is theirs. Software, API and AI companies (category software-ai ⟨40 unchanged words⟩
Added "ask_business", "check_dns", "request_booking" and 2 more; changed the definition of "check_business", "get_business", "get_census" and 5 more (9 tools before, 14 now)
⟨181 unchanged words⟩ own. To find businesses, use search_businesses instead. A setup link in the answer is for the owner to fill in themselves. Capability ids are defined at https://surfingdog.ai/spec/capabilities/.
⟨1319 unchanged words⟩ ,"hide":{"type":"string"},"manage":{"description":"The owner's page (/b/<domain>/owner): claim, correct or hide, with no AI and no account.","format":"uri","type":"string"},"opt_out":{"type":"string"}},"required":["claim","hide","opt_out"],"type":"object"},"pay_with":{"description":"How the business is paid, each way with its evidence: declared by the business, or seen on its own pages and files.","items":{"properties":{"label":{"description":"Its English name: Apple Pay for apple_pay.","type":"string"},"src":{"enum":["declared","seen"],"type":"string"},"token":{"description":"A payment token of GET /v1/attributes.","type":"string"},"url":{"description":"The page, file, profile, manifest or door the evidence is at.","format":"uri","type":"string"},"via":{"description":"Where the evidence is: registration, manifest, schema_org, ucp, acp, door, file or page today. A later network may add one: read a via you do not know as evidence of its src.","pattern":"^[a-z][a-z0-9_]{0,31}$","type":"string"}},"required":["token","label","src","via"],"type":"object"},"type":"array
Added "get_census"; changed the definition of "check_business" and "get_business" (8 tools before, 9 now)
⟨71 unchanged words⟩ a few minutes after the last read). A done result also carries door_history: what this network's own reads found of the site's doors, kept for good: when each was seen answering and on how many days, and for a door read every day (a member's, a claimed listing's), from 14 days checked, the share of days every check answered, as a count and a share ("answered 41 of 42 days (97%)"): a day with a failed or a refused check counts as a missed day, and a refused one is shown as refused. Use it when a person asks how agent-ready ⟨7 unchanged words⟩ their own. To find businesses, use search_businesses instead. Capability ids are defined at https://surfingdog.ai/spec/capabilities/.
⟨481 unchanged words⟩ "maxLength":253,"type":"string"},"door_history":{"description":"Every door type at every host of the site a read of the network's found answering (§4.8).","properties":{"as_of":{"description":"The UTC day it was read on.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"doors":{"items":{"properties":{"checks":{"description":"A door the network reads every day (a member's, a claimed listing's), from 14 checked days.","properties":{"answered":{"description":"Of them, days on which every check answered: one missed check (failed, or blocked while the door is down by the network's reads) makes the day missed, and one refused check (blocked otherwise) makes it refused.","maximum":9007199254740991,"minimum":0,"type":"integer"},"days":{"description":"Days checked: days on which the network's daily read of the door concluded. A read an agent's report or the business asked for is no check.","maximum":9007199254740991,"minimum":1,"type":"integer"},"first_checked":{"description":"The first day checked.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"last_checked":{"description":"The last day checked.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"recent":{"description":"The last 90 days ending on as_of, oldest first: a every check answered, x one was missed, b one was refused and none missed, . no check that day.","pattern":"^[axb.]{90}$","type":"string"},"refused":{"description":"Of them, days on which a check was refused and none was missed: never answered days.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["first_checked","last_checked","days","answered","refused","recent"],"type":"object"},"current":{"description":"Whether a door of this type is at this host now (not gone).","type":"boolean"},"days_seen":{"description":"On how many days a read of the network's found it answering: a door read about once a month is seen on few days, and nothing is said of the days between.","maximum":9007199254740991,"minimum":1,"type":"integer"},"first_seen":{"description":"The first UTC day a read of the network's found a door of this type at this host answering.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"host":{"description":"The door's host, lower case.","type":"string"},"last_seen":{"description":"The last such day.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"summary":{"description":"With checks, in English: \"Answered every check on 41 of 42 days checked since 3 Oct 2026 (97%).\", the share floored, the days refused after it (\"(75%; refused our check on 5)\"), \"from … to …\" when the last check is more than 7 days old. Informative: another network may word it its own way.","type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"}},"required":["type","host","first_seen","last_seen","days_seen","current"],"type":"object"},"type":"array"}},"required":["as_of","doors"],"type":"object"},"
Changed the definition of "check_business", "get_business", "register_business" and 2 more
⟨596 unchanged words⟩ listed","readable","askable","bookable","orderable","payable"],"type":"string"},"not_certification" ⟨1276 unchanged words⟩
⟨506 unchanged words⟩ listed","readable","askable","bookable","orderable","payable"],"type":"string"},"protocol" ⟨886 unchanged words⟩ :["listed","readable","askable","bookable","orderable","payable"],"type":"string"}, ⟨1536 unchanged words⟩
Changed the definition of "get_business"
⟨1038 unchanged words⟩ type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d$\\d|24:00)$","type":"string"}],"type": ⟨21 unchanged words⟩ type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d$\\d|24:00)$","type":"string"}],"type": ⟨21 unchanged words⟩ type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d$\\d|24:00)$","type":"string"}],"type": ⟨21 unchanged words⟩ type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d$\\d|24:00)$","type":"string"}],"type": ⟨21 unchanged words⟩
Added "report_door"; changed the definition of "check_business", "get_business", "register_business" and 2 more (7 tools before, 8 now)
⟨778 unchanged words⟩ ,"overall"],"type":"object"},"report":{"description":"Report how each use of a door went, done or not: see the guide.","properties":{"guide":{"description":"How to report, for an agent: <network>/report.md.","format":"uri","type":"string"},"reward":{"description":"What the agent gets for reporting, in one sentence.","type":"string"},"tool":{"description":"The MCP tool that takes door reports: report_door.","type":"string"},"url":{"description":"The same over REST: POST <network>/v1/door-reports.","format":"uri","type":"string"}},"required":["tool","url","guide","reward"],"type":"object"},"rules":{"description":"The score rules applied ⟨1019 unchanged words⟩
before
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"accepts":{"properties":{"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"pay":{"description":"Payment tokens of GET /v1/attributes' payments.","items":{"type":"string"},"type":"array"}},"required":["kinds"],"type":"object"},"address":{"description":"The street only when the business published one.","properties":{"country":{"maxLength":2,"minLength":2,"type":"string"},"locality":{"type":"string"},"postal_code":{"type":"string"},"street":{"type":"string"}},"type":"object"},"answering":{"description":"Its inbox answered this network within the last day.","type":"boolean"},"attributes":{"additionalProperties":{"properties":{"src":{"enum":["declared","seen","probably"],"type":"string"},"v":{"type":["boolean","string","number"]}},"required":["v","src"],"type":"object"},"description":"Keys of GET /v1/attributes.","propertyNames":{"type":"string"},"type":"object"},"categories":{"description":"Slugs of the categories list.","items":{"type":"string"},"type":"array"},"category":{"properties":{"alternates":{"items":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"},"maxItems":2,"type":"array"},"group":{"description":"Its group: a slug of GET /v1/categories.","type":"string"},"path":{"description":"Ancestor ids of the primary, root first, the primary last.","items":{"type":"string"},"type":"array"},"primary":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"}},"required":["primary","alternates","path"],"type":"object"},"city":{"type":"string"},"claimed":{"type":"boolean"},"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"description":{"description":"As the business wrote it.","type":"string"},"distance_km":{"description":"Searches near a point only.","minimum":0,"type":"number"},"domain":{"description":"The business's own domain, where its inbox is.","type":"string"},"doors":{"items":{"properties":{"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"level":{"description":"What this door alone reaches, from the network's own probe.","enum":["listed","readable","askable","bookable","payable"],"type":"string"},"protocol":{"description":"The protocol it speaks, for type \"other\" only.","maxLength":40,"type":"string"},"src":{"description":"declared: the business said so; seen: read from the door's own tools.","enum":["declared","seen"],"type":"string"},"status":{"description":"failing: 3 failures in 7 days; it counts for nothing until it works.","enum":["live","failing"],"type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"},"url":{"format":"uri","type":"string"}},"required":["type","url","level","status","kinds","src"],"type":"object"},"type":"array"},"facts":{"description":"Every displayed value of an entry that is not a member, with its source and date.","items":{"properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"field":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"},"url":{"description":"The page or door it was read from.","format":"uri","type":"string"},"v":{},"via":{"type":"string"}},"required":["field","v","src","at"],"type":"object"},"type":"array"},"found":{"properties":{"about_url":{"description":"The network's page for businesses: why it is here, and how to correct it or opt out.","format":"uri","type":"string"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"note":{"description":"\"found on its own website · not a member · checked <YYYY-MM-DD>\"","type":"string"}},"required":["note","checked_at","about_url"],"type":"object"},"has_inbox":{"description":"It has an inbox door: ours or any compatible inbox.","type":"boolean"},"hours":{"description":"The whole week, and the closures that have not ended.","properties":{"closures":{"items":{"properties":{"from":{"format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"to":{"format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"}},"required":["from","to"],"type":"object"},"type":"array"},"timezone":{"type":"string"},"weekly":{"properties":{"fri":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"mon":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"sat":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"sun":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"thu":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"tue":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"wed":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"}},"type":"object"}},"required":["timezone","weekly","closures"],"type":"object"},"hours_today":{"description":"Today's hours in its own time zone, like \"09:00–13:00, 14:00–19:00\", or \"closed today\"; null when it published none.","type":["string","null"]},"human_contact_only":{"description":"It publishes only human channels; never served while nothing below askable is listed.","type":"boolean"},"inbox":{"description":"The business's own inbox, where it takes bookings, orders and questions; this server takes no bookings or orders. Present whenever has_inbox is true or absent.","properties":{"mcp":{"description":"Where an assistant books, orders or asks.","format":"uri","type":"string"},"openapi":{"format":"uri","type":"string"},"rest":{"format":"uri","type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"},"languages":{"items":{"type":"string"},"type":"array"},"level":{"description":"The highest level of its live doors (§4.9).","enum":["listed","readable","askable","bookable","payable"],"type":"string"},"listing_url":{"description":"Its full listing on this network (GET /v1/businesses/{domain}).","format":"uri","type":"string"},"name":{"description":"As the business wrote it.","type":"string"},"open_now":{"description":"Open at the moment of the answer by the hours it published, in its own time zone; null when it published none.","type":["boolean","null"]},"outcomes":{"additionalProperties":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"description":"How many of the promises made at this business closed with each outcome (ADR-017 §3).","propertyNames":{"enum":["booking.completed","order.fulfilled","booking.cancelled_by_business","order.not_fulfilled","booking.no_show_business","order.not_received","promise.unclosed","booking.no_show_customer","booking.cancelled_late_by_customer","order.payment_failed","order.charged_back","booking.cancelled_by_customer","order.cancelled_by_customer","order.lapsed","refund.honoured","refund.late","refund.cancelled_by_customer","order.refund_refused"],"type":"string"},"type":"object"},"place":{"description":"For entries that are not members; a member keeps city, country and address.","properties":{"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"kind":{"items":{"enum":["storefront","service_area","online"],"type":"string"},"type":"array"},"locality":{"type":"string"},"region":{"type":"string"},"service_area":{"properties":{"countries":{"items":{"maxLength":2,"minLength":2,"type":"string"},"maxItems":50,"type":"array"},"radius_km":{"exclusiveMinimum":0,"maximum":300,"type":"number"}},"type":"object"},"ships_to":{"description":"ISO 3166-1 alpha-2 codes, or [\"*\"] for anywhere.","items":{"type":"string"},"type":"array"}},"required":["kind"],"type":"object"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"requestable":{"description":"The kinds a live door declared it answers; never from what the crawler saw alone.","items":{"enum":["ask","quote"],"type":"string"},"type":"array"},"rules":{"properties":{"url":{"format":"uri","type":"string"},"version":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["version","url"],"type":"object"},"services":{"description":"Names and how each is taken; prices, durations and free times are at its inbox.","items":{"properties":{"name":{"maxLength":80,"minLength":1,"type":"string"},"type":{"enum":["booking","order","quote_request"],"type":"string"}},"required":["name","type"],"type":"object"},"type":"array"},"source":{"description":"member: through its inbox; registered: by the business, with a proof; found: by the network's crawler.","enum":["member","registered","found"],"type":"string"},"standing":{"description":"From the last nightly count of the promises it kept; absent while the directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plain sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"],"type":"object"},"tags":{"description":"Other words the business gave for what it does.","items":{"type":"string"},"type":"array"},"takes":{"description":"What its inbox takes: booking, order, quote_request, message, refund.","items":{"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"},"why":{"description":"Why it is in this place of the list, in plain words.","type":"string"}},"required":["domain","name","categories","tags","languages","takes","services","open_now","hours_today","answering","listing_url","outcomes"],"title":"MCP get_business: structuredContent","type":"object"}Changed the definition of "get_business", "register_business", "search_businesses" and 1 more
⟨86 unchanged words⟩ , every fact with its source and date.Book,Thisorderserver takes no bookings oraskorders;attheitslistingownnamesdoors,thenotbusiness'shere.
Changed the definition of "check_business", "get_business", "register_business" and 2 more
⟨906 unchanged words⟩ ,"not_checkable"],"type":"string"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"
Changed the definition of "check_business"
Check howChecksfarwhat an AI agent cangodo withonea business's website:whether an agent canmessageit, book, order, sign up,cancelpay, change ornegotiatecancel.thereWaits up to 25 seconds; if the read isn't finished,throughreturns
Certificate recorded, valid to 2026-12-23
Authorization not required
Unknown → Live
First tool surface recorded: 7 tools (server version 1.0.0)
https://surfingdog.ai/mcp (mcp_streamable_http) — from ard_catalog, with the record
Showing the latest 18 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨168 unchanged words⟩ is shown as refused. This server takes nobookingsorders ororders;payments; the listing names the business's owndoors.doors, and request_booking can ask its inbox for a time. Its agentic score, if checked, is at ⟨9 unchanged words⟩
before
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"accepts":{"properties":{"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"pay":{"description":"Payment tokens of GET /v1/attributes' payments.","items":{"type":"string"},"type":"array"}},"required":["kinds"],"type":"object"},"address":{"description":"The street only when the business published one.","properties":{"country":{"maxLength":2,"minLength":2,"type":"string"},"locality":{"type":"string"},"postal_code":{"type":"string"},"street":{"type":"string"}},"type":"object"},"answering":{"description":"Its inbox answered this network within the last day.","type":"boolean"},"attributes":{"additionalProperties":{"properties":{"src":{"enum":["declared","seen","probably"],"type":"string"},"v":{"type":["boolean","string","number"]}},"required":["v","src"],"type":"object"},"description":"Keys of GET /v1/attributes.","propertyNames":{"type":"string"},"type":"object"},"categories":{"description":"Slugs of the categories list.","items":{"type":"string"},"type":"array"},"category":{"properties":{"alternates":{"items":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"},"maxItems":2,"type":"array"},"group":{"description":"Its group: a slug of GET /v1/categories.","type":"string"},"path":{"description":"Ancestor ids of the primary, root first, the primary last.","items":{"type":"string"},"type":"array"},"primary":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"}},"required":["primary","alternates","path"],"type":"object"},"city":{"type":"string"},"claimed":{"type":"boolean"},"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"description":{"description":"As the business wrote it.","type":"string"},"distance_km":{"description":"Searches near a point only.","minimum":0,"type":"number"},"domain":{"description":"The business's own domain, where its inbox is.","type":"string"},"door_history":{"description":"The history of the doors this listing shows (§4.8).","properties":{"as_of":{"description":"The UTC day it was read on.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"doors":{"items":{"properties":{"checks":{"description":"A door the network reads every day (a member's, a claimed listing's), from 14 checked days.","properties":{"answered":{"description":"Of them, days on which every check answered: one missed check (failed, or blocked while the door is down by the network's reads) makes the day missed, and one refused check (blocked otherwise) makes it refused.","maximum":9007199254740991,"minimum":0,"type":"integer"},"days":{"description":"Days checked: days on which the network's daily read of the door concluded. A read an agent's report or the business asked for is no check.","maximum":9007199254740991,"minimum":1,"type":"integer"},"first_checked":{"description":"The first day checked.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"last_checked":{"description":"The last day checked.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"recent":{"description":"The last 90 days ending on as_of, oldest first: a every check answered, x one was missed, b one was refused and none missed, . no check that day.","pattern":"^[axb.]{90}$","type":"string"},"refused":{"description":"Of them, days on which a check was refused and none was missed: never answered days.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["first_checked","last_checked","days","answered","refused","recent"],"type":"object"},"current":{"description":"Whether a door of this type is at this host now (not gone).","type":"boolean"},"days_seen":{"description":"On how many days a read of the network's found it answering: a door read about once a month is seen on few days, and nothing is said of the days between.","maximum":9007199254740991,"minimum":1,"type":"integer"},"first_seen":{"description":"The first UTC day a read of the network's found a door of this type at this host answering.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"host":{"description":"The door's host, lower case.","type":"string"},"last_seen":{"description":"The last such day.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"summary":{"description":"With checks, in English: \"Answered every check on 41 of 42 days checked since 3 Oct 2026 (97%).\", the share floored, the days refused after it (\"(75%; refused our check on 5)\"), \"from … to …\" when the last check is more than 7 days old. Informative: another network may word it its own way.","type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"}},"required":["type","host","first_seen","last_seen","days_seen","current"],"type":"object"},"type":"array"}},"required":["as_of","doors"],"type":"object"},"doors":{"items":{"properties":{"checked":{"description":"A member's inbox door, on its detail: what the network's own reads last found in the past 24 hours (§4.8). answered; failing; could_not_check, the door refused the read (403, 429, a challenge page), so the business's signed ping alone says it answers. Absent when the network made no read.","properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"by":{"const":"network","type":"string"},"status":{"enum":["answered","failing","could_not_check"],"type":"string"}},"required":["status","at","by"],"type":"object"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"level":{"description":"What this door alone reaches, from the network's own probe.","enum":["listed","readable","askable","bookable","orderable","payable"],"type":"string"},"protocol":{"description":"The protocol it speaks, for type \"other\" only.","maxLength":40,"type":"string"},"src":{"description":"declared: the business said so; seen: read from the door's own tools.","enum":["declared","seen"],"type":"string"},"status":{"description":"failing: 3 failures in 7 days; it counts for nothing until it works.","enum":["live","failing"],"type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"},"url":{"format":"uri","type":"string"}},"required":["type","url","level","status","kinds","src"],"type":"object"},"type":"array"},"facts":{"description":"Every displayed value of an entry that is not a member, with its source and date.","items":{"properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"field":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"},"url":{"description":"The page or door it was read from.","format":"uri","type":"string"},"v":{},"via":{"type":"string"}},"required":["field","v","src","at"],"type":"object"},"type":"array"},"found":{"properties":{"about_url":{"description":"The network's page for businesses: why it is here, and how to correct it or opt out.","format":"uri","type":"string"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"note":{"description":"\"found on its own website · not a member · checked <YYYY-MM-DD>\"","type":"string"}},"required":["note","checked_at","about_url"],"type":"object"},"has_inbox":{"description":"It has an inbox door: ours or any compatible inbox.","type":"boolean"},"hours":{"description":"The whole week, and the closures that have not ended.","properties":{"closures":{"items":{"properties":{"from":{"format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"to":{"format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"}},"required":["from","to"],"type":"object"},"type":"array"},"timezone":{"type":"string"},"weekly":{"properties":{"fri":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"mon":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"sat":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"sun":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"thu":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"tue":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"wed":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"}},"type":"object"}},"required":["timezone","weekly","closures"],"type":"object"},"hours_today":{"description":"Today's hours in its own time zone, like \"09:00–13:00, 14:00–19:00\", or \"closed today\"; null when it published none.","type":["string","null"]},"human_contact_only":{"description":"It publishes only human channels; never served while nothing below askable is listed.","type":"boolean"},"inbox":{"description":"The business's own inbox, where it takes bookings, orders and questions; this server takes no bookings or orders. Present whenever has_inbox is true or absent.","properties":{"mcp":{"description":"Where an assistant books, orders or asks.","format":"uri","type":"string"},"openapi":{"format":"uri","type":"string"},"rest":{"format":"uri","type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"},"languages":{"items":{"type":"string"},"type":"array"},"level":{"description":"The highest level of its live doors (§4.9).","enum":["listed","readable","askable","bookable","orderable","payable"],"type":"string"},"listing_url":{"description":"Its full listing on this network (GET /v1/businesses/{domain}).","format":"uri","type":"string"},"name":{"description":"As the business wrote it.","type":"string"},"open_now":{"description":"Open at the moment of the answer by the hours it published, in its own time zone; null when it published none.","type":["boolean","null"]},"outcomes":{"additionalProperties":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"description":"How many of the promises made at this business closed with each outcome (ADR-017 §3).","propertyNames":{"enum":["booking.completed","order.fulfilled","booking.cancelled_by_business","order.not_fulfilled","booking.no_show_business","order.not_received","promise.unclosed","booking.no_show_customer","booking.cancelled_late_by_customer","order.payment_failed","order.charged_back","booking.cancelled_by_customer","order.cancelled_by_customer","order.lapsed","refund.honoured","refund.late","refund.cancelled_by_customer","order.refund_refused"],"type":"string"},"type":"object"},"place":{"description":"For entries that are not members; a member keeps city, country and address.","properties":{"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"kind":{"items":{"enum":["storefront","service_area","online"],"type":"string"},"type":"array"},"locality":{"type":"string"},"region":{"type":"string"},"service_area":{"properties":{"countries":{"items":{"maxLength":2,"minLength":2,"type":"string"},"maxItems":50,"type":"array"},"radius_km":{"exclusiveMinimum":0,"maximum":300,"type":"number"}},"type":"object"},"ships_to":{"description":"ISO 3166-1 alpha-2 codes, or [\"*\"] for anywhere.","items":{"type":"string"},"type":"array"}},"required":["kind"],"type":"object"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"report":{"description":"Report how each use of a door went, done or not: see the guide.","properties":{"guide":{"description":"How to report, for an agent: <network>/report.md.","format":"uri","type":"string"},"reward":{"description":"What the agent gets for reporting, in one sentence.","type":"string"},"tool":{"description":"The MCP tool that takes door reports: report_door.","type":"string"},"url":{"description":"The same over REST: POST <network>/v1/door-reports.","format":"uri","type":"string"}},"required":["tool","url","guide","reward"],"type":"object"},"requestable":{"description":"The kinds a live door declared it answers; never from what the crawler saw alone.","items":{"enum":["ask","quote"],"type":"string"},"type":"array"},"rules":{"properties":{"url":{"format":"uri","type":"string"},"version":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["version","url"],"type":"object"},"services":{"description":"Names and how each is taken; prices, durations and free times are at its inbox.","items":{"properties":{"name":{"maxLength":80,"minLength":1,"type":"string"},"type":{"enum":["booking","order","quote_request"],"type":"string"}},"required":["name","type"],"type":"object"},"type":"array"},"source":{"description":"member: through its inbox; registered: by the business, with a proof; found: by the network's crawler.","enum":["member","registered","found"],"type":"string"},"standing":{"description":"From the last nightly count of the promises it kept; absent while the directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plain sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"],"type":"object"},"tags":{"description":"Other words the business gave for what it does.","items":{"type":"string"},"type":"array"},"takes":{"description":"What its inbox takes: booking, order, quote_request, message, refund.","items":{"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"},"why":{"description":"Why it is in this place of the list, in plain words.","type":"string"}},"required":["domain","name","categories","tags","languages","takes","services","open_now","hours_today","answering","listing_url","outcomes"],"title":"MCP get_business: structuredContent","type":"object"}after
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"accepts":{"properties":{"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"pay":{"description":"Payment tokens of GET /v1/attributes' payments.","items":{"type":"string"},"type":"array"},"pay_with":{"description":"Each of pay with its evidence, in the vocabulary's order. Absent from a listing built before it.","items":{"properties":{"label":{"description":"Its English name: Apple Pay for apple_pay.","type":"string"},"src":{"enum":["declared","seen"],"type":"string"},"token":{"description":"A payment token of GET /v1/attributes.","type":"string"},"url":{"description":"The page, file, profile, manifest or door the evidence is at.","format":"uri","type":"string"},"via":{"description":"Where the evidence is: registration, manifest, schema_org, ucp, acp, door, file or page today. A later network may add one: read a via you do not know as evidence of its src.","pattern":"^[a-z][a-z0-9_]{0,31}$","type":"string"}},"required":["token","label","src","via"],"type":"object"},"type":"array"}},"required":["kinds"],"type":"object"},"address":{"description":"The street only when the business published one.","properties":{"country":{"maxLength":2,"minLength":2,"type":"string"},"locality":{"type":"string"},"postal_code":{"type":"string"},"street":{"type":"string"}},"type":"object"},"answering":{"description":"Its inbox answered this network within the last day.","type":"boolean"},"attributes":{"additionalProperties":{"properties":{"src":{"enum":["declared","seen","probably"],"type":"string"},"v":{"type":["boolean","string","number"]}},"required":["v","src"],"type":"object"},"description":"Keys of GET /v1/attributes.","propertyNames":{"type":"string"},"type":"object"},"categories":{"description":"Slugs of the categories list.","items":{"type":"string"},"type":"array"},"category":{"properties":{"alternates":{"items":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"},"maxItems":2,"type":"array"},"group":{"description":"Its group: a slug of GET /v1/categories.","type":"string"},"path":{"description":"Ancestor ids of the primary, root first, the primary last.","items":{"type":"string"},"type":"array"},"primary":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"}},"required":["primary","alternates","path"],"type":"object"},"city":{"type":"string"},"claimed":{"type":"boolean"},"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"description":{"description":"As the business wrote it.","type":"string"},"distance_km":{"description":"Searches near a point only.","minimum":0,"type":"number"},"domain":{"description":"The business's own domain, where its inbox is.","type":"string"},"door_history":{"description":"The history of the doors this listing shows (§4.8).","properties":{"as_of":{"description":"The UTC day it was read on.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"doors":{"items":{"properties":{"checks":{"description":"A door the network reads every day (a member's, a claimed listing's), from 14 checked days.","properties":{"answered":{"description":"Of them, days on which every check answered: one missed check (failed, or blocked while the door is down by the network's reads) makes the day missed, and one refused check (blocked otherwise) makes it refused.","maximum":9007199254740991,"minimum":0,"type":"integer"},"days":{"description":"Days checked: days on which the network's daily read of the door concluded. A read an agent's report or the business asked for is no check.","maximum":9007199254740991,"minimum":1,"type":"integer"},"first_checked":{"description":"The first day checked.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"last_checked":{"description":"The last day checked.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"recent":{"description":"The last 90 days ending on as_of, oldest first: a every check answered, x one was missed, b one was refused and none missed, . no check that day.","pattern":"^[axb.]{90}$","type":"string"},"refused":{"description":"Of them, days on which a check was refused and none was missed: never answered days.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["first_checked","last_checked","days","answered","refused","recent"],"type":"object"},"current":{"description":"Whether a door of this type is at this host now (not gone).","type":"boolean"},"days_seen":{"description":"On how many days a read of the network's found it answering: a door read about once a month is seen on few days, and nothing is said of the days between.","maximum":9007199254740991,"minimum":1,"type":"integer"},"first_seen":{"description":"The first UTC day a read of the network's found a door of this type at this host answering.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"host":{"description":"The door's host, lower case.","type":"string"},"last_seen":{"description":"The last such day.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"summary":{"description":"With checks, in English: \"Answered every check on 41 of 42 days checked since 3 Oct 2026 (97%).\", the share floored, the days refused after it (\"(75%; refused our check on 5)\"), \"from … to …\" when the last check is more than 7 days old. Informative: another network may word it its own way.","type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"}},"required":["type","host","first_seen","last_seen","days_seen","current"],"type":"object"},"type":"array"}},"required":["as_of","doors"],"type":"object"},"doors":{"items":{"properties":{"checked":{"description":"A member's inbox door, on its detail: what the network's own reads last found in the past 24 hours (§4.8). answered; failing; could_not_check, the door refused the read (403, 429, a challenge page), so the business's signed ping alone says it answers. Absent when the network made no read.","properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"by":{"const":"network","type":"string"},"status":{"enum":["answered","failing","could_not_check"],"type":"string"}},"required":["status","at","by"],"type":"object"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"level":{"description":"What this door alone reaches, from the network's own probe.","enum":["listed","readable","askable","bookable","orderable","payable"],"type":"string"},"protocol":{"description":"The protocol it speaks, for type \"other\" only.","maxLength":40,"type":"string"},"src":{"description":"declared: the business said so; seen: read from the door's own tools.","enum":["declared","seen"],"type":"string"},"status":{"description":"failing: 3 failures in 7 days; it counts for nothing until it works.","enum":["live","failing"],"type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"},"url":{"format":"uri","type":"string"}},"required":["type","url","level","status","kinds","src"],"type":"object"},"type":"array"},"facts":{"description":"Every displayed value of an entry that is not a member, with its source and date.","items":{"properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"field":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"},"url":{"description":"The page or door it was read from.","format":"uri","type":"string"},"v":{},"via":{"description":"How it came: model, read by a language model; business, the business's own word (its registration, or a correction it made).","type":"string"}},"required":["field","v","src","at"],"type":"object"},"type":"array"},"found":{"properties":{"about_url":{"description":"The network's page for businesses: why it is here, and how to correct it or opt out.","format":"uri","type":"string"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"note":{"description":"\"found on its own website · not a member · checked <YYYY-MM-DD>\"","type":"string"}},"required":["note","checked_at","about_url"],"type":"object"},"has_inbox":{"description":"It has an inbox door: ours or any compatible inbox.","type":"boolean"},"hours":{"description":"The whole week, and the closures that have not ended.","properties":{"closures":{"items":{"properties":{"from":{"format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"to":{"format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"}},"required":["from","to"],"type":"object"},"type":"array"},"timezone":{"type":"string"},"weekly":{"properties":{"fri":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"mon":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"sat":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"sun":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"thu":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"tue":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"wed":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"}},"type":"object"}},"required":["timezone","weekly","closures"],"type":"object"},"hours_today":{"description":"Today's hours in its own time zone, like \"09:00–13:00, 14:00–19:00\", or \"closed today\"; null when it published none.","type":["string","null"]},"human_contact_only":{"description":"It publishes only human channels; never served while nothing below askable is listed.","type":"boolean"},"inbox":{"description":"The business's own inbox, where it takes bookings, orders and questions; this server takes no orders or payments and books nothing itself. Present whenever has_inbox is true or absent.","properties":{"mcp":{"description":"Where an assistant books, orders or asks.","format":"uri","type":"string"},"openapi":{"format":"uri","type":"string"},"rest":{"format":"uri","type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"},"languages":{"items":{"type":"string"},"type":"array"},"level":{"description":"The highest level of its live doors (§4.9).","enum":["listed","readable","askable","bookable","orderable","payable"],"type":"string"},"listing_url":{"description":"Its full listing on this network (GET /v1/businesses/{domain}).","format":"uri","type":"string"},"name":{"description":"As the business wrote it.","type":"string"},"open_now":{"description":"Open at the moment of the answer by the hours it published, in its own time zone; null when it published none.","type":["boolean","null"]},"outcomes":{"additionalProperties":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"description":"How many of the promises made at this business closed with each outcome (ADR-017 §3).","propertyNames":{"enum":["booking.completed","order.fulfilled","booking.cancelled_by_business","order.not_fulfilled","booking.no_show_business","order.not_received","promise.unclosed","booking.no_show_customer","booking.cancelled_late_by_customer","order.payment_failed","order.charged_back","booking.cancelled_by_customer","order.cancelled_by_customer","order.lapsed","refund.honoured","refund.late","refund.cancelled_by_customer","order.refund_refused"],"type":"string"},"type":"object"},"place":{"description":"For entries that are not members; a member keeps city, country and address.","properties":{"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"kind":{"items":{"enum":["storefront","service_area","online"],"type":"string"},"type":"array"},"locality":{"type":"string"},"region":{"type":"string"},"service_area":{"properties":{"countries":{"items":{"maxLength":2,"minLength":2,"type":"string"},"maxItems":50,"type":"array"},"radius_km":{"exclusiveMinimum":0,"maximum":300,"type":"number"}},"type":"object"},"ships_to":{"description":"ISO 3166-1 alpha-2 codes, or [\"*\"] for anywhere.","items":{"type":"string"},"type":"array"}},"required":["kind"],"type":"object"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"report":{"description":"Report how each use of a door went, done or not: see the guide.","properties":{"guide":{"description":"How to report, for an agent: <network>/report.md.","format":"uri","type":"string"},"reward":{"description":"What the agent gets for reporting, in one sentence.","type":"string"},"tool":{"description":"The MCP tool that takes door reports: report_door.","type":"string"},"url":{"description":"The same over REST: POST <network>/v1/door-reports.","format":"uri","type":"string"}},"required":["tool","url","guide","reward"],"type":"object"},"requestable":{"description":"The kinds a live door declared it answers; never from what the crawler saw alone.","items":{"enum":["ask","quote"],"type":"string"},"type":"array"},"rules":{"properties":{"url":{"format":"uri","type":"string"},"version":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["version","url"],"type":"object"},"services":{"description":"Names and how each is taken; prices, durations and free times are at its inbox.","items":{"properties":{"name":{"maxLength":80,"minLength":1,"type":"string"},"type":{"enum":["booking","order","quote_request"],"type":"string"}},"required":["name","type"],"type":"object"},"type":"array"},"source":{"description":"member: through its inbox; registered: by the business, with a proof; found: by the network's crawler.","enum":["member","registered","found"],"type":"string"},"standing":{"description":"From the last nightly count of the promises it kept; absent while the directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plain sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"],"type":"object"},"tags":{"description":"Other words the business gave for what it does.","items":{"type":"string"},"type":"array"},"takes":{"description":"What its inbox takes: booking, order, quote_request, message, refund.","items":{"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"},"why":{"description":"Why it is in this place of the list, in plain words.","type":"string"}},"required":["domain","name","categories","tags","languages","takes","services","open_now","hours_today","answering","listing_url","outcomes"],"title":"MCP get_business: structuredContent","type":"object"}⟨333 unchanged words⟩ :"string"},"metric":{"description":"A metric's name, or a family's with its key after a colon: checked, agent_ready, can:<capability>, door:<door type>, level:<level name>, no_ai,orfor a city places, and for the whole, a country and a cityplaces.pay_read, pay:<payment token>, pay_declared:<payment token> today. Metrics are added, never renamed: a reader skips one it does not know.","pattern":"^(checked|agent_ready|places|no_ai|can:[a-z][a-z0-9_]*|door*(:[a-z0-9_]+|level:[a-z]+)$?$","type":"string"},"scope":{ ⟨141 unchanged words⟩
⟨89 unchanged words⟩ AP2, ACP delegated payment, x402, UCPhandlers.handlers, Visa Intelligent Commerce, Mastercard Agent Pay.","items":{"type":"string"},"type":"array"},"labels":{"additionalProperties":{"type":"string"},"description":"Each token's English name.","propertyNames":{"type":"string"},"type":"object"},"methods":{"items":{"type":"string"},"type":"array"},"version":{"description":"The version of vocab/payments.json.","maximum":9007199254740991,"minimum":1,"type":"integer"},"wallets":{"items":{"type" ⟨26 unchanged words⟩
⟨38 unchanged words⟩ type":"string"},"type":"array"},"pay_with":{"description":"Each of pay with its evidence, in the vocabulary's order. Absent from a listing built before it.","items":{"properties":{"label":{"description":"Its English name: Apple Pay for apple_pay.","type":"string"},"src":{"enum":["declared","seen"],"type":"string"},"token":{"description":"A payment token of GET /v1/attributes.","type":"string"},"url":{"description":"The page, file, profile, manifest or door the evidence is at.","format":"uri","type":"string"},"via":{"description":"Where the evidence is: registration, manifest, schema_org, ucp, acp, door, file or page today. A later network may add one: read a via you do not know as evidence of its src.","pattern":"^[a-z][a-z0-9_]{0,31}$","type":"string"}},"required":["token","label","src","via"],"type":"object"},"type":"array"}},"required":["kinds"],"type":"object"},"answering" ⟨726 unchanged words⟩ , orders and questions; this server takes nobookingsorders ororders.payments and books nothing itself. Present whenever has_inbox is true or absent.", ⟨1944 unchanged words⟩
After youRecordsusehow a business's door went (its inbox, MCP, A2A or API),saywhenhowyouitusedwentone: it answered (ok), refused (slot_taken, ⟨18 unchanged words⟩ ), or it needs a person (info). Report every use, done or not,; up to 100atusesaintime.one call. A report is private to the business and ⟨33 unchanged words⟩ carries no person and nothing that was said.Your reports make us re-check doors, so your searches send you to doors that work.
⟨32 unchanged words⟩ price band, what their doors take andwhathow theyacceptare paid (accepts: kinds, and ways to pay such as card, apple_pay, paypal or x402; each result's accepts.pay_with says whether the business declared each or it was only seen, on its site or in its shop platform's standard profile, and where), whether a door answers asks or quotes ⟨36 unchanged words⟩ only leaves businesses out. This server takes nobookingsorders ororders;paymentseachand books nothing itself: request_booking asks a business's own inbox for a time, and the business confirms it there. Each result lists the business's own doors. A business ⟨64 unchanged words⟩
⟨44 unchanged words⟩ type":"string"},"type":"array"},"pay_with":{"description":"Each of pay with its evidence, in the vocabulary's order. Absent from a listing built before it.","items":{"properties":{"label":{"description":"Its English name: Apple Pay for apple_pay.","type":"string"},"src":{"enum":["declared","seen"],"type":"string"},"token":{"description":"A payment token of GET /v1/attributes.","type":"string"},"url":{"description":"The page, file, profile, manifest or door the evidence is at.","format":"uri","type":"string"},"via":{"description":"Where the evidence is: registration, manifest, schema_org, ucp, acp, door, file or page today. A later network may add one: read a via you do not know as evidence of its src.","pattern":"^[a-z][a-z0-9_]{0,31}$","type":"string"}},"required":["token","label","src","via"],"type":"object"},"type":"array"}},"required":["kinds"],"type":"object"},"answering" ⟨726 unchanged words⟩ , orders and questions; this server takes nobookingsorders ororders.payments and books nothing itself. Present whenever has_inbox is true or absent.", ⟨1580 unchanged words⟩
⟨38 unchanged words⟩ type":"string"},"type":"array"},"pay_with":{"description":"Each of pay with its evidence, in the vocabulary's order. Absent from a listing built before it.","items":{"properties":{"label":{"description":"Its English name: Apple Pay for apple_pay.","type":"string"},"src":{"enum":["declared","seen"],"type":"string"},"token":{"description":"A payment token of GET /v1/attributes.","type":"string"},"url":{"description":"The page, file, profile, manifest or door the evidence is at.","format":"uri","type":"string"},"via":{"description":"Where the evidence is: registration, manifest, schema_org, ucp, acp, door, file or page today. A later network may add one: read a via you do not know as evidence of its src.","pattern":"^[a-z][a-z0-9_]{0,31}$","type":"string"}},"required":["token","label","src","via"],"type":"object"},"type":"array"}},"required":["kinds"],"type":"object"},"answering" ⟨726 unchanged words⟩ , orders and questions; this server takes nobookingsorders ororders.payments and books nothing itself. Present whenever has_inbox is true or absent.", ⟨1946 unchanged words⟩
Ask a business — Sends your person's question to a business's own inbox, as a message. Only for a business in this directory with its own inbox (its listing names one), and only when your person asked you to contact it. The business can answer your person by email, at the address they agreed to give it; never a phone number. This network carries the request and keeps only a record that it was delivered. The answer is the inbox's: the business's own words, and an access token to read the request's state.
Check an inbox's DNS and discovery — Checks whether AI agents are led from the business's website and DNS to its agent inbox, and whether the inbox answers at inbox.<domain> (or the host given): for a business's own AI. Reads the inbox's DNS record (against target, when given) and manifest, the site's robots.txt (no AI assistant kept out), and five ways the domain can point to the inbox: four on the website (/.well-known/agent-inbox.json, a line in llms.txt, <link rel="agent-inbox">, a schema.org potentialAction) and a _agent-inbox TXT record. ready needs one of the four on the website. Every item not in place comes with the exa…
Request a booking — Without start: the business's free times for one of its services, read from its own inbox; nothing is sent. With start: asks the business's own inbox to book that time for your person. A priced service first answers with its terms (confirm): show them to your person, and send terms_sha only after their yes. Only for a business in this directory with its own inbox (its listing names one), and only when your person asked you to contact it. The business can answer your person by email, at the address they agreed to give it; never a phone number. This network carries the request and keeps only a …
Ask a business for a quote — Asks a business for a price, in its own inbox, for something your person describes. Only for a business in this directory with its own inbox (its listing names one), and only when your person asked you to contact it. The business can answer your person by email, at the address they agreed to give it; never a phone number. This network carries the request and keeps only a record that it was delivered. The answer is the inbox's: the business's own words, and an access token to read the request and its quote.
Set up an agent inbox — For a business's own AI: the link where the business's owner sets up their own agent inbox, hosted by Surfing Dog, at inbox.<domain>. Give the owner the link; they check the details and type their own email there. This tool never signs anyone up and takes no email. It says so when the business already runs an inbox, or when one cannot be hosted for the domain (an address at a hosting platform, where no DNS record can be added). The open-source inbox, to run on the business's own servers instead, is always named. After the owner adds the DNS record, check_dns says whether agents can reach the …
⟨85 unchanged words⟩ member, every fact with its source anddate.date; and its doors' history from this network's own reads: when each was first and last seen answering, and on how many days, and for a door read every day (a member's, a claimed listing's), from 14 days checked, the share of days every check answered, as a count and a share ("answered 41 of 42 days (97%)"): a day with a failed or a refused check counts as a missed day, and a refused one is shown as refused. This server takes no bookings or orders; the ⟨8 unchanged words⟩ score, if checked, is at https://surfingdog.ai/b/<domain>. Capability ids are defined at https://surfingdog.ai/spec/capabilities/.
⟨247 unchanged words⟩ inbox is.","type":"string"},"door_history":{"description":"The history of the doors this listing shows (§4.8).","properties":{"as_of":{"description":"The UTC day it was read on.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"doors":{"items":{"properties":{"checks":{"description":"A door the network reads every day (a member's, a claimed listing's), from 14 checked days.","properties":{"answered":{"description":"Of them, days on which every check answered: one missed check (failed, or blocked while the door is down by the network's reads) makes the day missed, and one refused check (blocked otherwise) makes it refused.","maximum":9007199254740991,"minimum":0,"type":"integer"},"days":{"description":"Days checked: days on which the network's daily read of the door concluded. A read an agent's report or the business asked for is no check.","maximum":9007199254740991,"minimum":1,"type":"integer"},"first_checked":{"description":"The first day checked.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"last_checked":{"description":"The last day checked.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"recent":{"description":"The last 90 days ending on as_of, oldest first: a every check answered, x one was missed, b one was refused and none missed, . no check that day.","pattern":"^[axb.]{90}$","type":"string"},"refused":{"description":"Of them, days on which a check was refused and none was missed: never answered days.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["first_checked","last_checked","days","answered","refused","recent"],"type":"object"},"current":{"description":"Whether a door of this type is at this host now (not gone).","type":"boolean"},"days_seen":{"description":"On how many days a read of the network's found it answering: a door read about once a month is seen on few days, and nothing is said of the days between.","maximum":9007199254740991,"minimum":1,"type":"integer"},"first_seen":{"description":"The first UTC day a read of the network's found a door of this type at this host answering.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"host":{"description":"The door's host, lower case.","type":"string"},"last_seen":{"description":"The last such day.","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"summary":{"description":"With checks, in English: \"Answered every check on 41 of 42 days checked since 3 Oct 2026 (97%).\", the share floored, the days refused after it (\"(75%; refused our check on 5)\"), \"from … to …\" when the last check is more than 7 days old. Informative: another network may word it its own way.","type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"}},"required":["type","host","first_seen","last_seen","days_seen","current"],"type":"object"},"type":"array"}},"required":["as_of","doors"],"type":"object"},"doors":{"items":{"properties":{"checked ⟨2690 unchanged words⟩
The census — Monthly counts of what AI agents can do at the websites this network checked: how many an agent can message, book, order from or pay, through which doors, by country, kind of business (group), website platform, where the sites came from (source) or city. Counts only; no business is named. Without edition, the latest published one; without scope, the whole; with a scope and no key, each key's headline counts; with a key, all of its counts. Open data under CC BY 4.0: credit "Surfing Dog census, surfingdog.ai, CC BY 4.0", and "© Overture Maps Foundation" with city counts. Capability ids are defi…
before
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"card":{"description":"The card search_businesses gives, as it stands now.","properties":{"accepts":{"properties":{"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"pay":{"description":"Payment tokens of GET /v1/attributes' payments.","items":{"type":"string"},"type":"array"}},"required":["kinds"],"type":"object"},"answering":{"description":"Its inbox answered this network within the last day.","type":"boolean"},"attributes":{"additionalProperties":{"properties":{"src":{"enum":["declared","seen","probably"],"type":"string"},"v":{"type":["boolean","string","number"]}},"required":["v","src"],"type":"object"},"description":"Keys of GET /v1/attributes.","propertyNames":{"type":"string"},"type":"object"},"categories":{"description":"Slugs of the categories list.","items":{"type":"string"},"type":"array"},"category":{"properties":{"alternates":{"items":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"},"maxItems":2,"type":"array"},"group":{"description":"Its group: a slug of GET /v1/categories.","type":"string"},"path":{"description":"Ancestor ids of the primary, root first, the primary last.","items":{"type":"string"},"type":"array"},"primary":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"}},"required":["primary","alternates","path"],"type":"object"},"city":{"type":"string"},"claimed":{"type":"boolean"},"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"description":{"description":"As the business wrote it.","type":"string"},"distance_km":{"description":"Searches near a point only.","minimum":0,"type":"number"},"domain":{"description":"The business's own domain, where its inbox is.","type":"string"},"doors":{"items":{"properties":{"checked":{"description":"A member's inbox door, on its detail: what the network's own reads last found in the past 24 hours (§4.8). answered; failing; could_not_check, the door refused the read (403, 429, a challenge page), so the business's signed ping alone says it answers. Absent when the network made no read.","properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"by":{"const":"network","type":"string"},"status":{"enum":["answered","failing","could_not_check"],"type":"string"}},"required":["status","at","by"],"type":"object"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"level":{"description":"What this door alone reaches, from the network's own probe.","enum":["listed","readable","askable","bookable","payable"],"type":"string"},"protocol":{"description":"The protocol it speaks, for type \"other\" only.","maxLength":40,"type":"string"},"src":{"description":"declared: the business said so; seen: read from the door's own tools.","enum":["declared","seen"],"type":"string"},"status":{"description":"failing: 3 failures in 7 days; it counts for nothing until it works.","enum":["live","failing"],"type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"},"url":{"format":"uri","type":"string"}},"required":["type","url","level","status","kinds","src"],"type":"object"},"type":"array"},"found":{"properties":{"about_url":{"description":"The network's page for businesses: why it is here, and how to correct it or opt out.","format":"uri","type":"string"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"note":{"description":"\"found on its own website · not a member · checked <YYYY-MM-DD>\"","type":"string"}},"required":["note","checked_at","about_url"],"type":"object"},"has_inbox":{"description":"It has an inbox door: ours or any compatible inbox.","type":"boolean"},"hours_today":{"description":"Today's hours in its own time zone, like \"09:00–13:00, 14:00–19:00\", or \"closed today\"; null when it published none.","type":["string","null"]},"human_contact_only":{"description":"It publishes only human channels; never served while nothing below askable is listed.","type":"boolean"},"inbox":{"description":"The business's own inbox, where it takes bookings, orders and questions; this server takes no bookings or orders. Present whenever has_inbox is true or absent.","properties":{"mcp":{"description":"Where an assistant books, orders or asks.","format":"uri","type":"string"},"openapi":{"format":"uri","type":"string"},"rest":{"format":"uri","type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"},"languages":{"items":{"type":"string"},"type":"array"},"level":{"description":"The highest level of its live doors (§4.9).","enum":["listed","readable","askable","bookable","payable"],"type":"string"},"listing_url":{"description":"Its full listing on this network (GET /v1/businesses/{domain}).","format":"uri","type":"string"},"name":{"description":"As the business wrote it.","type":"string"},"open_now":{"description":"Open at the moment of the answer by the hours it published, in its own time zone; null when it published none.","type":["boolean","null"]},"place":{"description":"For entries that are not members; a member keeps city, country and address.","properties":{"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"kind":{"items":{"enum":["storefront","service_area","online"],"type":"string"},"type":"array"},"locality":{"type":"string"},"region":{"type":"string"},"service_area":{"properties":{"countries":{"items":{"maxLength":2,"minLength":2,"type":"string"},"maxItems":50,"type":"array"},"radius_km":{"exclusiveMinimum":0,"maximum":300,"type":"number"}},"type":"object"},"ships_to":{"description":"ISO 3166-1 alpha-2 codes, or [\"*\"] for anywhere.","items":{"type":"string"},"type":"array"}},"required":["kind"],"type":"object"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"requestable":{"description":"The kinds a live door declared it answers; never from what the crawler saw alone.","items":{"enum":["ask","quote"],"type":"string"},"type":"array"},"services":{"description":"Names and how each is taken; prices, durations and free times are at its inbox.","items":{"properties":{"name":{"maxLength":80,"minLength":1,"type":"string"},"type":{"enum":["booking","order","quote_request"],"type":"string"}},"required":["name","type"],"type":"object"},"type":"array"},"source":{"description":"member: through its inbox; registered: by the business, with a proof; found: by the network's crawler.","enum":["member","registered","found"],"type":"string"},"standing":{"description":"From the last nightly count of the promises it kept; absent while the directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plain sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"],"type":"object"},"tags":{"description":"Other words the business gave for what it does.","items":{"type":"string"},"type":"array"},"takes":{"description":"What its inbox takes: booking, order, quote_request, message, refund.","items":{"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"},"why":{"description":"Why it is in this place of the list, in plain words.","type":"string"}},"required":["domain","name","categories","tags","languages","takes","services","open_now","hours_today","answering","listing_url"],"type":"object"},"challenge":{"description":"Put the token in place one of these ways, then call again with proof.method and challenge_id.","properties":{"expires_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"id":{"type":"string"},"token":{"type":"string"},"ways":{"items":{"oneOf":[{"properties":{"content":{"type":"string"},"method":{"const":"well_known","type":"string"},"url":{"format":"uri","type":"string"}},"required":["method","url","content"],"type":"object"},{"properties":{"member":{"const":"claims","type":"string"},"method":{"const":"manifest","type":"string"},"value":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"}},"required":["method","member","value"],"type":"object"},{"properties":{"method":{"const":"dns","type":"string"},"name":{"type":"string"},"type":{"const":"TXT","type":"string"},"value":{"type":"string"}},"required":["method","name","type","value"],"type":"object"},{"properties":{"algs":{"items":{"enum":["EdDSA","ES256"],"type":"string"},"type":"array"},"method":{"const":"key","type":"string"},"sign":{"type":"string"}},"required":["method","sign","algs"],"type":"object"},{"properties":{"method":{"const":"code","type":"string"},"note":{"type":"string"}},"required":["method","note"],"type":"object"}]},"type":"array"}},"required":["id","token","expires_at","ways"],"type":"object"},"claim_token":{"description":"Given by a successful register_business: proof again for 90 days, for this listing only.","pattern":"^sdc_[A-Za-z0-9_-]{43}$","type":"string"},"claim_token_expires_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"claimed":{"type":"boolean"},"detail":{"description":"The answer in one plain sentence.","type":"string"},"domain":{"type":"string"},"dropped":{"description":"Each part not taken and why: refused_kind, category_not_listed, contact_detail, not_in_vocabulary, and the like.","items":{"properties":{"detail":{"type":"string"},"field":{"type":"string"},"reason":{"type":"string"}},"required":["field","reason","detail"],"type":"object"},"type":"array"},"level":{"enum":["listed","readable","askable","bookable","payable"],"type":"string"},"listed":{"description":"Whether search shows it now.","type":"boolean"},"next_level":{"description":"What it takes to reach the next level, in plain words.","properties":{"how":{"type":"string"},"level":{"enum":["listed","readable","askable","bookable","payable"],"type":"string"}},"required":["level","how"],"type":"object"},"notes":{"items":{"type":"string"},"type":"array"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"status":{"description":"listed: in search now; not_agent_ready: claimed, below askable; probe_pending: doors declared, not yet probed; proof_needed: see challenge; code_sent: call again with the code; member: it is listed through its inbox; refused: see detail.","enum":["listed","not_agent_ready","probe_pending","proof_needed","code_sent","member","refused"],"type":"string"},"want_inbox":{"type":"string"}},"required":["status","domain"],"title":"MCP register_business: structuredContent","type":"object"}after
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"card":{"description":"The card search_businesses gives, as it stands now.","properties":{"accepts":{"properties":{"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"pay":{"description":"Payment tokens of GET /v1/attributes' payments.","items":{"type":"string"},"type":"array"}},"required":["kinds"],"type":"object"},"answering":{"description":"Its inbox answered this network within the last day.","type":"boolean"},"attributes":{"additionalProperties":{"properties":{"src":{"enum":["declared","seen","probably"],"type":"string"},"v":{"type":["boolean","string","number"]}},"required":["v","src"],"type":"object"},"description":"Keys of GET /v1/attributes.","propertyNames":{"type":"string"},"type":"object"},"categories":{"description":"Slugs of the categories list.","items":{"type":"string"},"type":"array"},"category":{"properties":{"alternates":{"items":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"},"maxItems":2,"type":"array"},"group":{"description":"Its group: a slug of GET /v1/categories.","type":"string"},"path":{"description":"Ancestor ids of the primary, root first, the primary last.","items":{"type":"string"},"type":"array"},"primary":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"}},"required":["primary","alternates","path"],"type":"object"},"city":{"type":"string"},"claimed":{"type":"boolean"},"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"description":{"description":"As the business wrote it.","type":"string"},"distance_km":{"description":"Searches near a point only.","minimum":0,"type":"number"},"domain":{"description":"The business's own domain, where its inbox is.","type":"string"},"doors":{"items":{"properties":{"checked":{"description":"A member's inbox door, on its detail: what the network's own reads last found in the past 24 hours (§4.8). answered; failing; could_not_check, the door refused the read (403, 429, a challenge page), so the business's signed ping alone says it answers. Absent when the network made no read.","properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"by":{"const":"network","type":"string"},"status":{"enum":["answered","failing","could_not_check"],"type":"string"}},"required":["status","at","by"],"type":"object"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"level":{"description":"What this door alone reaches, from the network's own probe.","enum":["listed","readable","askable","bookable","orderable","payable"],"type":"string"},"protocol":{"description":"The protocol it speaks, for type \"other\" only.","maxLength":40,"type":"string"},"src":{"description":"declared: the business said so; seen: read from the door's own tools.","enum":["declared","seen"],"type":"string"},"status":{"description":"failing: 3 failures in 7 days; it counts for nothing until it works.","enum":["live","failing"],"type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"},"url":{"format":"uri","type":"string"}},"required":["type","url","level","status","kinds","src"],"type":"object"},"type":"array"},"found":{"properties":{"about_url":{"description":"The network's page for businesses: why it is here, and how to correct it or opt out.","format":"uri","type":"string"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"note":{"description":"\"found on its own website · not a member · checked <YYYY-MM-DD>\"","type":"string"}},"required":["note","checked_at","about_url"],"type":"object"},"has_inbox":{"description":"It has an inbox door: ours or any compatible inbox.","type":"boolean"},"hours_today":{"description":"Today's hours in its own time zone, like \"09:00–13:00, 14:00–19:00\", or \"closed today\"; null when it published none.","type":["string","null"]},"human_contact_only":{"description":"It publishes only human channels; never served while nothing below askable is listed.","type":"boolean"},"inbox":{"description":"The business's own inbox, where it takes bookings, orders and questions; this server takes no bookings or orders. Present whenever has_inbox is true or absent.","properties":{"mcp":{"description":"Where an assistant books, orders or asks.","format":"uri","type":"string"},"openapi":{"format":"uri","type":"string"},"rest":{"format":"uri","type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"},"languages":{"items":{"type":"string"},"type":"array"},"level":{"description":"The highest level of its live doors (§4.9).","enum":["listed","readable","askable","bookable","orderable","payable"],"type":"string"},"listing_url":{"description":"Its full listing on this network (GET /v1/businesses/{domain}).","format":"uri","type":"string"},"name":{"description":"As the business wrote it.","type":"string"},"open_now":{"description":"Open at the moment of the answer by the hours it published, in its own time zone; null when it published none.","type":["boolean","null"]},"place":{"description":"For entries that are not members; a member keeps city, country and address.","properties":{"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"kind":{"items":{"enum":["storefront","service_area","online"],"type":"string"},"type":"array"},"locality":{"type":"string"},"region":{"type":"string"},"service_area":{"properties":{"countries":{"items":{"maxLength":2,"minLength":2,"type":"string"},"maxItems":50,"type":"array"},"radius_km":{"exclusiveMinimum":0,"maximum":300,"type":"number"}},"type":"object"},"ships_to":{"description":"ISO 3166-1 alpha-2 codes, or [\"*\"] for anywhere.","items":{"type":"string"},"type":"array"}},"required":["kind"],"type":"object"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"requestable":{"description":"The kinds a live door declared it answers; never from what the crawler saw alone.","items":{"enum":["ask","quote"],"type":"string"},"type":"array"},"services":{"description":"Names and how each is taken; prices, durations and free times are at its inbox.","items":{"properties":{"name":{"maxLength":80,"minLength":1,"type":"string"},"type":{"enum":["booking","order","quote_request"],"type":"string"}},"required":["name","type"],"type":"object"},"type":"array"},"source":{"description":"member: through its inbox; registered: by the business, with a proof; found: by the network's crawler.","enum":["member","registered","found"],"type":"string"},"standing":{"description":"From the last nightly count of the promises it kept; absent while the directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plain sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"],"type":"object"},"tags":{"description":"Other words the business gave for what it does.","items":{"type":"string"},"type":"array"},"takes":{"description":"What its inbox takes: booking, order, quote_request, message, refund.","items":{"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"},"why":{"description":"Why it is in this place of the list, in plain words.","type":"string"}},"required":["domain","name","categories","tags","languages","takes","services","open_now","hours_today","answering","listing_url"],"type":"object"},"challenge":{"description":"Put the token in place one of these ways, then call again with proof.method and challenge_id.","properties":{"expires_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"id":{"type":"string"},"token":{"type":"string"},"ways":{"items":{"oneOf":[{"properties":{"content":{"type":"string"},"method":{"const":"well_known","type":"string"},"url":{"format":"uri","type":"string"}},"required":["method","url","content"],"type":"object"},{"properties":{"member":{"const":"claims","type":"string"},"method":{"const":"manifest","type":"string"},"value":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"}},"required":["method","member","value"],"type":"object"},{"properties":{"method":{"const":"dns","type":"string"},"name":{"type":"string"},"type":{"const":"TXT","type":"string"},"value":{"type":"string"}},"required":["method","name","type","value"],"type":"object"},{"properties":{"algs":{"items":{"enum":["EdDSA","ES256"],"type":"string"},"type":"array"},"method":{"const":"key","type":"string"},"sign":{"type":"string"}},"required":["method","sign","algs"],"type":"object"},{"properties":{"method":{"const":"code","type":"string"},"note":{"type":"string"}},"required":["method","note"],"type":"object"}]},"type":"array"}},"required":["id","token","expires_at","ways"],"type":"object"},"claim_token":{"description":"Given by a successful register_business: proof again for 90 days, for this listing only.","pattern":"^sdc_[A-Za-z0-9_-]{43}$","type":"string"},"claim_token_expires_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"claimed":{"type":"boolean"},"detail":{"description":"The answer in one plain sentence.","type":"string"},"domain":{"type":"string"},"dropped":{"description":"Each part not taken and why: refused_kind, category_not_listed, contact_detail, not_in_vocabulary, and the like.","items":{"properties":{"detail":{"type":"string"},"field":{"type":"string"},"reason":{"type":"string"}},"required":["field","reason","detail"],"type":"object"},"type":"array"},"level":{"enum":["listed","readable","askable","bookable","orderable","payable"],"type":"string"},"listed":{"description":"Whether search shows it now.","type":"boolean"},"next_level":{"description":"What it takes to reach the next level, in plain words.","properties":{"how":{"type":"string"},"level":{"enum":["listed","readable","askable","bookable","orderable","payable"],"type":"string"}},"required":["level","how"],"type":"object"},"notes":{"items":{"type":"string"},"type":"array"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"status":{"description":"listed: in search now; not_agent_ready: claimed, below askable; probe_pending: doors declared, not yet probed; proof_needed: see challenge; code_sent: call again with the code; member: it is listed through its inbox; refused: see detail.","enum":["listed","not_agent_ready","probe_pending","proof_needed","code_sent","member","refused"],"type":"string"},"want_inbox":{"type":"string"}},"required":["status","domain"],"title":"MCP register_business: structuredContent","type":"object"}⟨316 unchanged words⟩ askable (an AI can ask), bookableor(a door takes bookings), orderable (a door takes orders), payable. bookable and orderable are one rung, and each asks for what the doors take. Nothing below askable is listed yet. This only ⟨272 unchanged words⟩
⟨494 unchanged words⟩ listed","readable","askable","bookable","orderable","payable"],"type":"string"},"protocol" ⟨344 unchanged words⟩ :["listed","readable","askable","bookable","orderable","payable"],"type":"string"}, ⟨1521 unchanged words⟩
before
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"card":{"description":"The card search_businesses gives, as it stands now.","properties":{"accepts":{"properties":{"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"pay":{"description":"Payment tokens of GET /v1/attributes' payments.","items":{"type":"string"},"type":"array"}},"required":["kinds"],"type":"object"},"answering":{"description":"Its inbox answered this network within the last day.","type":"boolean"},"attributes":{"additionalProperties":{"properties":{"src":{"enum":["declared","seen","probably"],"type":"string"},"v":{"type":["boolean","string","number"]}},"required":["v","src"],"type":"object"},"description":"Keys of GET /v1/attributes.","propertyNames":{"type":"string"},"type":"object"},"categories":{"description":"Slugs of the categories list.","items":{"type":"string"},"type":"array"},"category":{"properties":{"alternates":{"items":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"},"maxItems":2,"type":"array"},"group":{"description":"Its group: a slug of GET /v1/categories.","type":"string"},"path":{"description":"Ancestor ids of the primary, root first, the primary last.","items":{"type":"string"},"type":"array"},"primary":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"}},"required":["primary","alternates","path"],"type":"object"},"city":{"type":"string"},"claimed":{"type":"boolean"},"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"description":{"description":"As the business wrote it.","type":"string"},"distance_km":{"description":"Searches near a point only.","minimum":0,"type":"number"},"domain":{"description":"The business's own domain, where its inbox is.","type":"string"},"doors":{"items":{"properties":{"checked":{"description":"A member's inbox door, on its detail: what the network's own reads last found in the past 24 hours (§4.8). answered; failing; could_not_check, the door refused the read (403, 429, a challenge page), so the business's signed ping alone says it answers. Absent when the network made no read.","properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"by":{"const":"network","type":"string"},"status":{"enum":["answered","failing","could_not_check"],"type":"string"}},"required":["status","at","by"],"type":"object"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"level":{"description":"What this door alone reaches, from the network's own probe.","enum":["listed","readable","askable","bookable","payable"],"type":"string"},"protocol":{"description":"The protocol it speaks, for type \"other\" only.","maxLength":40,"type":"string"},"src":{"description":"declared: the business said so; seen: read from the door's own tools.","enum":["declared","seen"],"type":"string"},"status":{"description":"failing: 3 failures in 7 days; it counts for nothing until it works.","enum":["live","failing"],"type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"},"url":{"format":"uri","type":"string"}},"required":["type","url","level","status","kinds","src"],"type":"object"},"type":"array"},"found":{"properties":{"about_url":{"description":"The network's page for businesses: why it is here, and how to correct it or opt out.","format":"uri","type":"string"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"note":{"description":"\"found on its own website · not a member · checked <YYYY-MM-DD>\"","type":"string"}},"required":["note","checked_at","about_url"],"type":"object"},"has_inbox":{"description":"It has an inbox door: ours or any compatible inbox.","type":"boolean"},"hours_today":{"description":"Today's hours in its own time zone, like \"09:00–13:00, 14:00–19:00\", or \"closed today\"; null when it published none.","type":["string","null"]},"human_contact_only":{"description":"It publishes only human channels; never served while nothing below askable is listed.","type":"boolean"},"inbox":{"description":"The business's own inbox, where it takes bookings, orders and questions; this server takes no bookings or orders. Present whenever has_inbox is true or absent.","properties":{"mcp":{"description":"Where an assistant books, orders or asks.","format":"uri","type":"string"},"openapi":{"format":"uri","type":"string"},"rest":{"format":"uri","type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"},"languages":{"items":{"type":"string"},"type":"array"},"level":{"description":"The highest level of its live doors (§4.9).","enum":["listed","readable","askable","bookable","payable"],"type":"string"},"listing_url":{"description":"Its full listing on this network (GET /v1/businesses/{domain}).","format":"uri","type":"string"},"name":{"description":"As the business wrote it.","type":"string"},"open_now":{"description":"Open at the moment of the answer by the hours it published, in its own time zone; null when it published none.","type":["boolean","null"]},"place":{"description":"For entries that are not members; a member keeps city, country and address.","properties":{"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"kind":{"items":{"enum":["storefront","service_area","online"],"type":"string"},"type":"array"},"locality":{"type":"string"},"region":{"type":"string"},"service_area":{"properties":{"countries":{"items":{"maxLength":2,"minLength":2,"type":"string"},"maxItems":50,"type":"array"},"radius_km":{"exclusiveMinimum":0,"maximum":300,"type":"number"}},"type":"object"},"ships_to":{"description":"ISO 3166-1 alpha-2 codes, or [\"*\"] for anywhere.","items":{"type":"string"},"type":"array"}},"required":["kind"],"type":"object"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"requestable":{"description":"The kinds a live door declared it answers; never from what the crawler saw alone.","items":{"enum":["ask","quote"],"type":"string"},"type":"array"},"services":{"description":"Names and how each is taken; prices, durations and free times are at its inbox.","items":{"properties":{"name":{"maxLength":80,"minLength":1,"type":"string"},"type":{"enum":["booking","order","quote_request"],"type":"string"}},"required":["name","type"],"type":"object"},"type":"array"},"source":{"description":"member: through its inbox; registered: by the business, with a proof; found: by the network's crawler.","enum":["member","registered","found"],"type":"string"},"standing":{"description":"From the last nightly count of the promises it kept; absent while the directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plain sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"],"type":"object"},"tags":{"description":"Other words the business gave for what it does.","items":{"type":"string"},"type":"array"},"takes":{"description":"What its inbox takes: booking, order, quote_request, message, refund.","items":{"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"},"why":{"description":"Why it is in this place of the list, in plain words.","type":"string"}},"required":["domain","name","categories","tags","languages","takes","services","open_now","hours_today","answering","listing_url"],"type":"object"},"challenge":{"description":"Put the token in place one of these ways, then call again with proof.method and challenge_id.","properties":{"expires_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"id":{"type":"string"},"token":{"type":"string"},"ways":{"items":{"oneOf":[{"properties":{"content":{"type":"string"},"method":{"const":"well_known","type":"string"},"url":{"format":"uri","type":"string"}},"required":["method","url","content"],"type":"object"},{"properties":{"member":{"const":"claims","type":"string"},"method":{"const":"manifest","type":"string"},"value":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"}},"required":["method","member","value"],"type":"object"},{"properties":{"method":{"const":"dns","type":"string"},"name":{"type":"string"},"type":{"const":"TXT","type":"string"},"value":{"type":"string"}},"required":["method","name","type","value"],"type":"object"},{"properties":{"algs":{"items":{"enum":["EdDSA","ES256"],"type":"string"},"type":"array"},"method":{"const":"key","type":"string"},"sign":{"type":"string"}},"required":["method","sign","algs"],"type":"object"},{"properties":{"method":{"const":"code","type":"string"},"note":{"type":"string"}},"required":["method","note"],"type":"object"}]},"type":"array"}},"required":["id","token","expires_at","ways"],"type":"object"},"claim_token":{"description":"Given by a successful register_business: proof again for 90 days, for this listing only.","pattern":"^sdc_[A-Za-z0-9_-]{43}$","type":"string"},"claim_token_expires_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"claimed":{"type":"boolean"},"detail":{"description":"The answer in one plain sentence.","type":"string"},"domain":{"type":"string"},"dropped":{"description":"Each part not taken and why: refused_kind, category_not_listed, contact_detail, not_in_vocabulary, and the like.","items":{"properties":{"detail":{"type":"string"},"field":{"type":"string"},"reason":{"type":"string"}},"required":["field","reason","detail"],"type":"object"},"type":"array"},"level":{"enum":["listed","readable","askable","bookable","payable"],"type":"string"},"listed":{"description":"Whether search shows it now.","type":"boolean"},"next_level":{"description":"What it takes to reach the next level, in plain words.","properties":{"how":{"type":"string"},"level":{"enum":["listed","readable","askable","bookable","payable"],"type":"string"}},"required":["level","how"],"type":"object"},"notes":{"items":{"type":"string"},"type":"array"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"score_page":{"description":"Whether its agentic score result page is hidden or shown, when the call set it.","enum":["hidden","shown"],"type":"string"},"status":{"description":"As register_business's, and: off, hidden from search; removed, after an opt-out.","enum":["listed","not_agent_ready","probe_pending","proof_needed","code_sent","member","refused","off","removed"],"type":"string"},"want_inbox":{"type":"string"}},"required":["status","domain"],"title":"MCP update_business: structuredContent","type":"object"}after
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"card":{"description":"The card search_businesses gives, as it stands now.","properties":{"accepts":{"properties":{"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"pay":{"description":"Payment tokens of GET /v1/attributes' payments.","items":{"type":"string"},"type":"array"}},"required":["kinds"],"type":"object"},"answering":{"description":"Its inbox answered this network within the last day.","type":"boolean"},"attributes":{"additionalProperties":{"properties":{"src":{"enum":["declared","seen","probably"],"type":"string"},"v":{"type":["boolean","string","number"]}},"required":["v","src"],"type":"object"},"description":"Keys of GET /v1/attributes.","propertyNames":{"type":"string"},"type":"object"},"categories":{"description":"Slugs of the categories list.","items":{"type":"string"},"type":"array"},"category":{"properties":{"alternates":{"items":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"},"maxItems":2,"type":"array"},"group":{"description":"Its group: a slug of GET /v1/categories.","type":"string"},"path":{"description":"Ancestor ids of the primary, root first, the primary last.","items":{"type":"string"},"type":"array"},"primary":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"}},"required":["primary","alternates","path"],"type":"object"},"city":{"type":"string"},"claimed":{"type":"boolean"},"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"description":{"description":"As the business wrote it.","type":"string"},"distance_km":{"description":"Searches near a point only.","minimum":0,"type":"number"},"domain":{"description":"The business's own domain, where its inbox is.","type":"string"},"doors":{"items":{"properties":{"checked":{"description":"A member's inbox door, on its detail: what the network's own reads last found in the past 24 hours (§4.8). answered; failing; could_not_check, the door refused the read (403, 429, a challenge page), so the business's signed ping alone says it answers. Absent when the network made no read.","properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"by":{"const":"network","type":"string"},"status":{"enum":["answered","failing","could_not_check"],"type":"string"}},"required":["status","at","by"],"type":"object"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"level":{"description":"What this door alone reaches, from the network's own probe.","enum":["listed","readable","askable","bookable","orderable","payable"],"type":"string"},"protocol":{"description":"The protocol it speaks, for type \"other\" only.","maxLength":40,"type":"string"},"src":{"description":"declared: the business said so; seen: read from the door's own tools.","enum":["declared","seen"],"type":"string"},"status":{"description":"failing: 3 failures in 7 days; it counts for nothing until it works.","enum":["live","failing"],"type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"},"url":{"format":"uri","type":"string"}},"required":["type","url","level","status","kinds","src"],"type":"object"},"type":"array"},"found":{"properties":{"about_url":{"description":"The network's page for businesses: why it is here, and how to correct it or opt out.","format":"uri","type":"string"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"note":{"description":"\"found on its own website · not a member · checked <YYYY-MM-DD>\"","type":"string"}},"required":["note","checked_at","about_url"],"type":"object"},"has_inbox":{"description":"It has an inbox door: ours or any compatible inbox.","type":"boolean"},"hours_today":{"description":"Today's hours in its own time zone, like \"09:00–13:00, 14:00–19:00\", or \"closed today\"; null when it published none.","type":["string","null"]},"human_contact_only":{"description":"It publishes only human channels; never served while nothing below askable is listed.","type":"boolean"},"inbox":{"description":"The business's own inbox, where it takes bookings, orders and questions; this server takes no bookings or orders. Present whenever has_inbox is true or absent.","properties":{"mcp":{"description":"Where an assistant books, orders or asks.","format":"uri","type":"string"},"openapi":{"format":"uri","type":"string"},"rest":{"format":"uri","type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"},"languages":{"items":{"type":"string"},"type":"array"},"level":{"description":"The highest level of its live doors (§4.9).","enum":["listed","readable","askable","bookable","orderable","payable"],"type":"string"},"listing_url":{"description":"Its full listing on this network (GET /v1/businesses/{domain}).","format":"uri","type":"string"},"name":{"description":"As the business wrote it.","type":"string"},"open_now":{"description":"Open at the moment of the answer by the hours it published, in its own time zone; null when it published none.","type":["boolean","null"]},"place":{"description":"For entries that are not members; a member keeps city, country and address.","properties":{"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"kind":{"items":{"enum":["storefront","service_area","online"],"type":"string"},"type":"array"},"locality":{"type":"string"},"region":{"type":"string"},"service_area":{"properties":{"countries":{"items":{"maxLength":2,"minLength":2,"type":"string"},"maxItems":50,"type":"array"},"radius_km":{"exclusiveMinimum":0,"maximum":300,"type":"number"}},"type":"object"},"ships_to":{"description":"ISO 3166-1 alpha-2 codes, or [\"*\"] for anywhere.","items":{"type":"string"},"type":"array"}},"required":["kind"],"type":"object"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"requestable":{"description":"The kinds a live door declared it answers; never from what the crawler saw alone.","items":{"enum":["ask","quote"],"type":"string"},"type":"array"},"services":{"description":"Names and how each is taken; prices, durations and free times are at its inbox.","items":{"properties":{"name":{"maxLength":80,"minLength":1,"type":"string"},"type":{"enum":["booking","order","quote_request"],"type":"string"}},"required":["name","type"],"type":"object"},"type":"array"},"source":{"description":"member: through its inbox; registered: by the business, with a proof; found: by the network's crawler.","enum":["member","registered","found"],"type":"string"},"standing":{"description":"From the last nightly count of the promises it kept; absent while the directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plain sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"],"type":"object"},"tags":{"description":"Other words the business gave for what it does.","items":{"type":"string"},"type":"array"},"takes":{"description":"What its inbox takes: booking, order, quote_request, message, refund.","items":{"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"},"why":{"description":"Why it is in this place of the list, in plain words.","type":"string"}},"required":["domain","name","categories","tags","languages","takes","services","open_now","hours_today","answering","listing_url"],"type":"object"},"challenge":{"description":"Put the token in place one of these ways, then call again with proof.method and challenge_id.","properties":{"expires_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"id":{"type":"string"},"token":{"type":"string"},"ways":{"items":{"oneOf":[{"properties":{"content":{"type":"string"},"method":{"const":"well_known","type":"string"},"url":{"format":"uri","type":"string"}},"required":["method","url","content"],"type":"object"},{"properties":{"member":{"const":"claims","type":"string"},"method":{"const":"manifest","type":"string"},"value":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"}},"required":["method","member","value"],"type":"object"},{"properties":{"method":{"const":"dns","type":"string"},"name":{"type":"string"},"type":{"const":"TXT","type":"string"},"value":{"type":"string"}},"required":["method","name","type","value"],"type":"object"},{"properties":{"algs":{"items":{"enum":["EdDSA","ES256"],"type":"string"},"type":"array"},"method":{"const":"key","type":"string"},"sign":{"type":"string"}},"required":["method","sign","algs"],"type":"object"},{"properties":{"method":{"const":"code","type":"string"},"note":{"type":"string"}},"required":["method","note"],"type":"object"}]},"type":"array"}},"required":["id","token","expires_at","ways"],"type":"object"},"claim_token":{"description":"Given by a successful register_business: proof again for 90 days, for this listing only.","pattern":"^sdc_[A-Za-z0-9_-]{43}$","type":"string"},"claim_token_expires_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"claimed":{"type":"boolean"},"detail":{"description":"The answer in one plain sentence.","type":"string"},"domain":{"type":"string"},"dropped":{"description":"Each part not taken and why: refused_kind, category_not_listed, contact_detail, not_in_vocabulary, and the like.","items":{"properties":{"detail":{"type":"string"},"field":{"type":"string"},"reason":{"type":"string"}},"required":["field","reason","detail"],"type":"object"},"type":"array"},"level":{"enum":["listed","readable","askable","bookable","orderable","payable"],"type":"string"},"listed":{"description":"Whether search shows it now.","type":"boolean"},"next_level":{"description":"What it takes to reach the next level, in plain words.","properties":{"how":{"type":"string"},"level":{"enum":["listed","readable","askable","bookable","orderable","payable"],"type":"string"}},"required":["level","how"],"type":"object"},"notes":{"items":{"type":"string"},"type":"array"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"score_page":{"description":"Whether its agentic score result page is hidden or shown, when the call set it.","enum":["hidden","shown"],"type":"string"},"status":{"description":"As register_business's, and: off, hidden from search; removed, after an opt-out.","enum":["listed","not_agent_ready","probe_pending","proof_needed","code_sent","member","refused","off","removed"],"type":"string"},"want_inbox":{"type":"string"}},"required":["status","domain"],"title":"MCP update_business: structuredContent","type":"object"}after
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"accepts":{"properties":{"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"pay":{"description":"Payment tokens of GET /v1/attributes' payments.","items":{"type":"string"},"type":"array"}},"required":["kinds"],"type":"object"},"address":{"description":"The street only when the business published one.","properties":{"country":{"maxLength":2,"minLength":2,"type":"string"},"locality":{"type":"string"},"postal_code":{"type":"string"},"street":{"type":"string"}},"type":"object"},"answering":{"description":"Its inbox answered this network within the last day.","type":"boolean"},"attributes":{"additionalProperties":{"properties":{"src":{"enum":["declared","seen","probably"],"type":"string"},"v":{"type":["boolean","string","number"]}},"required":["v","src"],"type":"object"},"description":"Keys of GET /v1/attributes.","propertyNames":{"type":"string"},"type":"object"},"categories":{"description":"Slugs of the categories list.","items":{"type":"string"},"type":"array"},"category":{"properties":{"alternates":{"items":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"},"maxItems":2,"type":"array"},"group":{"description":"Its group: a slug of GET /v1/categories.","type":"string"},"path":{"description":"Ancestor ids of the primary, root first, the primary last.","items":{"type":"string"},"type":"array"},"primary":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"}},"required":["primary","alternates","path"],"type":"object"},"city":{"type":"string"},"claimed":{"type":"boolean"},"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"description":{"description":"As the business wrote it.","type":"string"},"distance_km":{"description":"Searches near a point only.","minimum":0,"type":"number"},"domain":{"description":"The business's own domain, where its inbox is.","type":"string"},"doors":{"items":{"properties":{"checked":{"description":"A member's inbox door, on its detail: what the network's own reads last found in the past 24 hours (§4.8). answered; failing; could_not_check, the door refused the read (403, 429, a challenge page), so the business's signed ping alone says it answers. Absent when the network made no read.","properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"by":{"const":"network","type":"string"},"status":{"enum":["answered","failing","could_not_check"],"type":"string"}},"required":["status","at","by"],"type":"object"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"level":{"description":"What this door alone reaches, from the network's own probe.","enum":["listed","readable","askable","bookable","payable"],"type":"string"},"protocol":{"description":"The protocol it speaks, for type \"other\" only.","maxLength":40,"type":"string"},"src":{"description":"declared: the business said so; seen: read from the door's own tools.","enum":["declared","seen"],"type":"string"},"status":{"description":"failing: 3 failures in 7 days; it counts for nothing until it works.","enum":["live","failing"],"type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"},"url":{"format":"uri","type":"string"}},"required":["type","url","level","status","kinds","src"],"type":"object"},"type":"array"},"facts":{"description":"Every displayed value of an entry that is not a member, with its source and date.","items":{"properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"field":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"},"url":{"description":"The page or door it was read from.","format":"uri","type":"string"},"v":{},"via":{"type":"string"}},"required":["field","v","src","at"],"type":"object"},"type":"array"},"found":{"properties":{"about_url":{"description":"The network's page for businesses: why it is here, and how to correct it or opt out.","format":"uri","type":"string"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"note":{"description":"\"found on its own website · not a member · checked <YYYY-MM-DD>\"","type":"string"}},"required":["note","checked_at","about_url"],"type":"object"},"has_inbox":{"description":"It has an inbox door: ours or any compatible inbox.","type":"boolean"},"hours":{"description":"The whole week, and the closures that have not ended.","properties":{"closures":{"items":{"properties":{"from":{"format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"},"to":{"format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","type":"string"}},"required":["from","to"],"type":"object"},"type":"array"},"timezone":{"type":"string"},"weekly":{"properties":{"fri":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"mon":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"sat":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"sun":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"thu":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"tue":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"},"wed":{"items":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"},{"pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","type":"string"}],"type":"array"},"maxItems":6,"type":"array"}},"type":"object"}},"required":["timezone","weekly","closures"],"type":"object"},"hours_today":{"description":"Today's hours in its own time zone, like \"09:00–13:00, 14:00–19:00\", or \"closed today\"; null when it published none.","type":["string","null"]},"human_contact_only":{"description":"It publishes only human channels; never served while nothing below askable is listed.","type":"boolean"},"inbox":{"description":"The business's own inbox, where it takes bookings, orders and questions; this server takes no bookings or orders. Present whenever has_inbox is true or absent.","properties":{"mcp":{"description":"Where an assistant books, orders or asks.","format":"uri","type":"string"},"openapi":{"format":"uri","type":"string"},"rest":{"format":"uri","type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"},"languages":{"items":{"type":"string"},"type":"array"},"level":{"description":"The highest level of its live doors (§4.9).","enum":["listed","readable","askable","bookable","payable"],"type":"string"},"listing_url":{"description":"Its full listing on this network (GET /v1/businesses/{domain}).","format":"uri","type":"string"},"name":{"description":"As the business wrote it.","type":"string"},"open_now":{"description":"Open at the moment of the answer by the hours it published, in its own time zone; null when it published none.","type":["boolean","null"]},"outcomes":{"additionalProperties":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"description":"How many of the promises made at this business closed with each outcome (ADR-017 §3).","propertyNames":{"enum":["booking.completed","order.fulfilled","booking.cancelled_by_business","order.not_fulfilled","booking.no_show_business","order.not_received","promise.unclosed","booking.no_show_customer","booking.cancelled_late_by_customer","order.payment_failed","order.charged_back","booking.cancelled_by_customer","order.cancelled_by_customer","order.lapsed","refund.honoured","refund.late","refund.cancelled_by_customer","order.refund_refused"],"type":"string"},"type":"object"},"place":{"description":"For entries that are not members; a member keeps city, country and address.","properties":{"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"kind":{"items":{"enum":["storefront","service_area","online"],"type":"string"},"type":"array"},"locality":{"type":"string"},"region":{"type":"string"},"service_area":{"properties":{"countries":{"items":{"maxLength":2,"minLength":2,"type":"string"},"maxItems":50,"type":"array"},"radius_km":{"exclusiveMinimum":0,"maximum":300,"type":"number"}},"type":"object"},"ships_to":{"description":"ISO 3166-1 alpha-2 codes, or [\"*\"] for anywhere.","items":{"type":"string"},"type":"array"}},"required":["kind"],"type":"object"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"report":{"description":"Report how each use of a door went, done or not: see the guide.","properties":{"guide":{"description":"How to report, for an agent: <network>/report.md.","format":"uri","type":"string"},"reward":{"description":"What the agent gets for reporting, in one sentence.","type":"string"},"tool":{"description":"The MCP tool that takes door reports: report_door.","type":"string"},"url":{"description":"The same over REST: POST <network>/v1/door-reports.","format":"uri","type":"string"}},"required":["tool","url","guide","reward"],"type":"object"},"requestable":{"description":"The kinds a live door declared it answers; never from what the crawler saw alone.","items":{"enum":["ask","quote"],"type":"string"},"type":"array"},"rules":{"properties":{"url":{"format":"uri","type":"string"},"version":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["version","url"],"type":"object"},"services":{"description":"Names and how each is taken; prices, durations and free times are at its inbox.","items":{"properties":{"name":{"maxLength":80,"minLength":1,"type":"string"},"type":{"enum":["booking","order","quote_request"],"type":"string"}},"required":["name","type"],"type":"object"},"type":"array"},"source":{"description":"member: through its inbox; registered: by the business, with a proof; found: by the network's crawler.","enum":["member","registered","found"],"type":"string"},"standing":{"description":"From the last nightly count of the promises it kept; absent while the directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plain sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"],"type":"object"},"tags":{"description":"Other words the business gave for what it does.","items":{"type":"string"},"type":"array"},"takes":{"description":"What its inbox takes: booking, order, quote_request, message, refund.","items":{"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"},"why":{"description":"Why it is in this place of the list, in plain words.","type":"string"}},"required":["domain","name","categories","tags","languages","takes","services","open_now","hours_today","answering","listing_url","outcomes"],"title":"MCP get_business: structuredContent","type":"object"}⟨233 unchanged words⟩ "doors":{"items":{"properties":{"checked":{"description":"A member's inbox door, on its detail: what the network's own reads last found in the past 24 hours (§4.8). answered; failing; could_not_check, the door refused the read (403, 429, a challenge page), so the business's signed ping alone says it answers. Absent when the network made no read.","properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"by":{"const":"network","type":"string"},"status":{"enum":["answered","failing","could_not_check"],"type":"string"}},"required":["status","at","by"],"type":"object"},"checked_at":{"format":"date-time","pattern": ⟨2341 unchanged words⟩
before
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"businesses":{"description":"In the directory's published order: no one can pay to move in it.","items":{"properties":{"accepts":{"properties":{"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"pay":{"description":"Payment tokens of GET /v1/attributes' payments.","items":{"type":"string"},"type":"array"}},"required":["kinds"],"type":"object"},"answering":{"description":"Its inbox answered this network within the last day.","type":"boolean"},"attributes":{"additionalProperties":{"properties":{"src":{"enum":["declared","seen","probably"],"type":"string"},"v":{"type":["boolean","string","number"]}},"required":["v","src"],"type":"object"},"description":"Keys of GET /v1/attributes.","propertyNames":{"type":"string"},"type":"object"},"categories":{"description":"Slugs of the categories list.","items":{"type":"string"},"type":"array"},"category":{"properties":{"alternates":{"items":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"},"maxItems":2,"type":"array"},"group":{"description":"Its group: a slug of GET /v1/categories.","type":"string"},"path":{"description":"Ancestor ids of the primary, root first, the primary last.","items":{"type":"string"},"type":"array"},"primary":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"}},"required":["primary","alternates","path"],"type":"object"},"city":{"type":"string"},"claimed":{"type":"boolean"},"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"description":{"description":"As the business wrote it.","type":"string"},"distance_km":{"description":"Searches near a point only.","minimum":0,"type":"number"},"domain":{"description":"The business's own domain, where its inbox is.","type":"string"},"doors":{"items":{"properties":{"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"level":{"description":"What this door alone reaches, from the network's own probe.","enum":["listed","readable","askable","bookable","payable"],"type":"string"},"protocol":{"description":"The protocol it speaks, for type \"other\" only.","maxLength":40,"type":"string"},"src":{"description":"declared: the business said so; seen: read from the door's own tools.","enum":["declared","seen"],"type":"string"},"status":{"description":"failing: 3 failures in 7 days; it counts for nothing until it works.","enum":["live","failing"],"type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"},"url":{"format":"uri","type":"string"}},"required":["type","url","level","status","kinds","src"],"type":"object"},"type":"array"},"found":{"properties":{"about_url":{"description":"The network's page for businesses: why it is here, and how to correct it or opt out.","format":"uri","type":"string"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"note":{"description":"\"found on its own website · not a member · checked <YYYY-MM-DD>\"","type":"string"}},"required":["note","checked_at","about_url"],"type":"object"},"has_inbox":{"description":"It has an inbox door: ours or any compatible inbox.","type":"boolean"},"hours_today":{"description":"Today's hours in its own time zone, like \"09:00–13:00, 14:00–19:00\", or \"closed today\"; null when it published none.","type":["string","null"]},"human_contact_only":{"description":"It publishes only human channels; never served while nothing below askable is listed.","type":"boolean"},"inbox":{"description":"The business's own inbox, where it takes bookings, orders and questions; this server takes no bookings or orders. Present whenever has_inbox is true or absent.","properties":{"mcp":{"description":"Where an assistant books, orders or asks.","format":"uri","type":"string"},"openapi":{"format":"uri","type":"string"},"rest":{"format":"uri","type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"},"languages":{"items":{"type":"string"},"type":"array"},"level":{"description":"The highest level of its live doors (§4.9).","enum":["listed","readable","askable","bookable","payable"],"type":"string"},"listing_url":{"description":"Its full listing on this network (GET /v1/businesses/{domain}).","format":"uri","type":"string"},"name":{"description":"As the business wrote it.","type":"string"},"open_now":{"description":"Open at the moment of the answer by the hours it published, in its own time zone; null when it published none.","type":["boolean","null"]},"place":{"description":"For entries that are not members; a member keeps city, country and address.","properties":{"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"kind":{"items":{"enum":["storefront","service_area","online"],"type":"string"},"type":"array"},"locality":{"type":"string"},"region":{"type":"string"},"service_area":{"properties":{"countries":{"items":{"maxLength":2,"minLength":2,"type":"string"},"maxItems":50,"type":"array"},"radius_km":{"exclusiveMinimum":0,"maximum":300,"type":"number"}},"type":"object"},"ships_to":{"description":"ISO 3166-1 alpha-2 codes, or [\"*\"] for anywhere.","items":{"type":"string"},"type":"array"}},"required":["kind"],"type":"object"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"requestable":{"description":"The kinds a live door declared it answers; never from what the crawler saw alone.","items":{"enum":["ask","quote"],"type":"string"},"type":"array"},"services":{"description":"Names and how each is taken; prices, durations and free times are at its inbox.","items":{"properties":{"name":{"maxLength":80,"minLength":1,"type":"string"},"type":{"enum":["booking","order","quote_request"],"type":"string"}},"required":["name","type"],"type":"object"},"type":"array"},"source":{"description":"member: through its inbox; registered: by the business, with a proof; found: by the network's crawler.","enum":["member","registered","found"],"type":"string"},"standing":{"description":"From the last nightly count of the promises it kept; absent while the directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plain sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"],"type":"object"},"tags":{"description":"Other words the business gave for what it does.","items":{"type":"string"},"type":"array"},"takes":{"description":"What its inbox takes: booking, order, quote_request, message, refund.","items":{"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"},"why":{"description":"Why it is in this place of the list, in plain words.","type":"string"}},"required":["domain","name","categories","tags","languages","takes","services","open_now","hours_today","answering","listing_url"],"type":"object"},"type":"array"},"next_cursor":{"description":"Pass it as cursor for the next page; null on the last.","type":["string","null"]},"rules":{"description":"The rules that ordered these businesses (GET /v1/ranking?version=N).","properties":{"url":{"format":"uri","type":"string"},"version":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["version","url"],"type":"object"}},"required":["businesses","next_cursor","rules"],"title":"MCP search_businesses: structuredContent","type":"object"}after
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"businesses":{"description":"In the directory's published order: no one can pay to move in it.","items":{"properties":{"accepts":{"properties":{"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"pay":{"description":"Payment tokens of GET /v1/attributes' payments.","items":{"type":"string"},"type":"array"}},"required":["kinds"],"type":"object"},"answering":{"description":"Its inbox answered this network within the last day.","type":"boolean"},"attributes":{"additionalProperties":{"properties":{"src":{"enum":["declared","seen","probably"],"type":"string"},"v":{"type":["boolean","string","number"]}},"required":["v","src"],"type":"object"},"description":"Keys of GET /v1/attributes.","propertyNames":{"type":"string"},"type":"object"},"categories":{"description":"Slugs of the categories list.","items":{"type":"string"},"type":"array"},"category":{"properties":{"alternates":{"items":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"},"maxItems":2,"type":"array"},"group":{"description":"Its group: a slug of GET /v1/categories.","type":"string"},"path":{"description":"Ancestor ids of the primary, root first, the primary last.","items":{"type":"string"},"type":"array"},"primary":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"src":{"enum":["declared","seen","probably"],"type":"string"}},"required":["id","label","src"],"type":"object"}},"required":["primary","alternates","path"],"type":"object"},"city":{"type":"string"},"claimed":{"type":"boolean"},"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"description":{"description":"As the business wrote it.","type":"string"},"distance_km":{"description":"Searches near a point only.","minimum":0,"type":"number"},"domain":{"description":"The business's own domain, where its inbox is.","type":"string"},"doors":{"items":{"properties":{"checked":{"description":"A member's inbox door, on its detail: what the network's own reads last found in the past 24 hours (§4.8). answered; failing; could_not_check, the door refused the read (403, 429, a challenge page), so the business's signed ping alone says it answers. Absent when the network made no read.","properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"by":{"const":"network","type":"string"},"status":{"enum":["answered","failing","could_not_check"],"type":"string"}},"required":["status","at","by"],"type":"object"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"kinds":{"items":{"enum":["ask","quote","book","order","pay"],"type":"string"},"type":"array"},"level":{"description":"What this door alone reaches, from the network's own probe.","enum":["listed","readable","askable","bookable","payable"],"type":"string"},"protocol":{"description":"The protocol it speaks, for type \"other\" only.","maxLength":40,"type":"string"},"src":{"description":"declared: the business said so; seen: read from the door's own tools.","enum":["declared","seen"],"type":"string"},"status":{"description":"failing: 3 failures in 7 days; it counts for nothing until it works.","enum":["live","failing"],"type":"string"},"type":{"pattern":"^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$","type":"string"},"url":{"format":"uri","type":"string"}},"required":["type","url","level","status","kinds","src"],"type":"object"},"type":"array"},"found":{"properties":{"about_url":{"description":"The network's page for businesses: why it is here, and how to correct it or opt out.","format":"uri","type":"string"},"checked_at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"note":{"description":"\"found on its own website · not a member · checked <YYYY-MM-DD>\"","type":"string"}},"required":["note","checked_at","about_url"],"type":"object"},"has_inbox":{"description":"It has an inbox door: ours or any compatible inbox.","type":"boolean"},"hours_today":{"description":"Today's hours in its own time zone, like \"09:00–13:00, 14:00–19:00\", or \"closed today\"; null when it published none.","type":["string","null"]},"human_contact_only":{"description":"It publishes only human channels; never served while nothing below askable is listed.","type":"boolean"},"inbox":{"description":"The business's own inbox, where it takes bookings, orders and questions; this server takes no bookings or orders. Present whenever has_inbox is true or absent.","properties":{"mcp":{"description":"Where an assistant books, orders or asks.","format":"uri","type":"string"},"openapi":{"format":"uri","type":"string"},"rest":{"format":"uri","type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"},"languages":{"items":{"type":"string"},"type":"array"},"level":{"description":"The highest level of its live doors (§4.9).","enum":["listed","readable","askable","bookable","payable"],"type":"string"},"listing_url":{"description":"Its full listing on this network (GET /v1/businesses/{domain}).","format":"uri","type":"string"},"name":{"description":"As the business wrote it.","type":"string"},"open_now":{"description":"Open at the moment of the answer by the hours it published, in its own time zone; null when it published none.","type":["boolean","null"]},"place":{"description":"For entries that are not members; a member keeps city, country and address.","properties":{"country":{"description":"ISO 3166-1 alpha-2.","maxLength":2,"minLength":2,"type":"string"},"kind":{"items":{"enum":["storefront","service_area","online"],"type":"string"},"type":"array"},"locality":{"type":"string"},"region":{"type":"string"},"service_area":{"properties":{"countries":{"items":{"maxLength":2,"minLength":2,"type":"string"},"maxItems":50,"type":"array"},"radius_km":{"exclusiveMinimum":0,"maximum":300,"type":"number"}},"type":"object"},"ships_to":{"description":"ISO 3166-1 alpha-2 codes, or [\"*\"] for anywhere.","items":{"type":"string"},"type":"array"}},"required":["kind"],"type":"object"},"proof":{"enum":["domain","key","platform","code"],"type":"string"},"requestable":{"description":"The kinds a live door declared it answers; never from what the crawler saw alone.","items":{"enum":["ask","quote"],"type":"string"},"type":"array"},"services":{"description":"Names and how each is taken; prices, durations and free times are at its inbox.","items":{"properties":{"name":{"maxLength":80,"minLength":1,"type":"string"},"type":{"enum":["booking","order","quote_request"],"type":"string"}},"required":["name","type"],"type":"object"},"type":"array"},"source":{"description":"member: through its inbox; registered: by the business, with a proof; found: by the network's crawler.","enum":["member","registered","found"],"type":"string"},"standing":{"description":"From the last nightly count of the promises it kept; absent while the directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plain sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"],"type":"object"},"tags":{"description":"Other words the business gave for what it does.","items":{"type":"string"},"type":"array"},"takes":{"description":"What its inbox takes: booking, order, quote_request, message, refund.","items":{"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"},"why":{"description":"Why it is in this place of the list, in plain words.","type":"string"}},"required":["domain","name","categories","tags","languages","takes","services","open_now","hours_today","answering","listing_url"],"type":"object"},"type":"array"},"next_cursor":{"description":"Pass it as cursor for the next page; null on the last.","type":["string","null"]},"report":{"description":"Report how each use of a door went, done or not: see the guide.","properties":{"guide":{"description":"How to report, for an agent: <network>/report.md.","format":"uri","type":"string"},"reward":{"description":"What the agent gets for reporting, in one sentence.","type":"string"},"tool":{"description":"The MCP tool that takes door reports: report_door.","type":"string"},"url":{"description":"The same over REST: POST <network>/v1/door-reports.","format":"uri","type":"string"}},"required":["tool","url","guide","reward"],"type":"object"},"rules":{"description":"The rules that ordered these businesses (GET /v1/ranking?version=N).","properties":{"url":{"format":"uri","type":"string"},"version":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["version","url"],"type":"object"}},"required":["businesses","next_cursor","rules"],"title":"MCP search_businesses: structuredContent","type":"object"}⟨233 unchanged words⟩ "doors":{"items":{"properties":{"checked":{"description":"A member's inbox door, on its detail: what the network's own reads last found in the past 24 hours (§4.8). answered; failing; could_not_check, the door refused the read (403, 429, a challenge page), so the business's signed ping alone says it answers. Absent when the network made no read.","properties":{"at":{"format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"by":{"const":"network","type":"string"},"status":{"enum":["answered","failing","could_not_check"],"type":"string"}},"required":["status","at","by"],"type":"object"},"checked_at":{"format":"date-time","pattern": ⟨2343 unchanged words⟩
Report how a door went — After you use a business's door (its inbox, MCP, A2A or API), say how it went: it answered (ok), refused (slot_taken, out_of_stock…), the request was your own fault (invalid), it failed (could not connect, a server or tool error), or it needs a person (info). Report every use, done or not, up to 100 at a time. A report is private to the business and may make this network check a door that agents say is down (at most twice a day per door, for the doors it reads itself); it changes nothing public by itself, and carries no person and nothing that was said. Your reports make us re-check doors, so…
⟨1159 unchanged words⟩ inbox":{"description":"The business's own inbox:,gowherethereittotakesbookbookings,orderordersorandask.questions;Thisthisdirectoryserver takesnothing.no bookings or orders. Present whenever has_inbox is true or absent.", ⟨1520 unchanged words⟩
⟨613 unchanged words⟩ inbox":{"description":"The business's own inbox:,gowherethereittotakesbookbookings,orderordersorandask.questions;Thisthisdirectoryserver takesnothing.no bookings or orders. Present whenever has_inbox is true or absent.", ⟨1941 unchanged words⟩
⟨82 unchanged words⟩ to change; every filter only leaves businesses out.EachThisresultservernamestakesitsnodoors:bookingstalkortoorders;theeachbusinessresultthere,listsnotthehere.business's own doors. A business this network found on its own ⟨58 unchanged words⟩
⟨492 unchanged words⟩ the business does or where, like \"haircut alfama\florist\" or \"padaria\coffee singapore\". Every word must match its name, ⟨94 unchanged words⟩
⟨619 unchanged words⟩ inbox":{"description":"The business's own inbox:,gowherethereittotakesbookbookings,orderordersorandask.questions;Thisthisdirectoryserver takesnothing.no bookings or orders. Present whenever has_inbox is true or absent.", ⟨1505 unchanged words⟩
⟨613 unchanged words⟩ inbox":{"description":"The business's own inbox:,gowherethereittotakesbookbookings,orderordersorandask.questions;Thisthisdirectoryserver takesnothing.no bookings or orders. Present whenever has_inbox is true or absent.", ⟨1943 unchanged words⟩
⟨30 unchanged words⟩ , its services, its standing in words, a member's track record (promises kept, broken and still open, and when, once enough have closed; self_reported when it rests on the business's own word, with no score and no count of customers), and how many of its promises closed with ⟨35 unchanged words⟩
⟨1559 unchanged words⟩ directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plainsentence;sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"] ⟨30 unchanged words⟩ {"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"} ⟨35 unchanged words⟩
⟨945 unchanged words⟩ directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plainsentence;sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"] ⟨30 unchanged words⟩ {"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"} ⟨524 unchanged words⟩
⟨951 unchanged words⟩ directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plainsentence;sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"] ⟨30 unchanged words⟩ {"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"} ⟨88 unchanged words⟩
⟨945 unchanged words⟩ directory's order is neutral.","properties":{"broken":{"description":"From rules version 8: the broken outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"in_words":{"description":"The tier in one plainsentence;sentence, or a self-reported record's counts; never a mark against the business.","type":"string"},"kept":{"description":"From rules version 8: the kept outcomes the night scored.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"From rules version 8: its v2 promises still open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"ranked":{"description":"Its record puts it before the daily shuffle.","type":"boolean"},"self_reported":{"description":"From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.","type":"boolean"},"tier":{"enum":["new","building","trusted"],"type":"string"},"verified_kept_share":{"description":"From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).","maximum":1,"minimum":0,"type":"number"},"verified_share":{"description":"From rules version 8, when not self_reported: the share of its record that is verified evidence.","maximum":1,"minimum":0,"type":"number"}},"required":["tier","ranked","in_words"] ⟨30 unchanged words⟩ {"type":"string"},"type":"array"},"track_record":{"description":"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none.","properties":{"as_of":{"description":"The nightly count it is from (00:00 UTC).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"broken":{"description":"shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.","maximum":9007199254740991,"minimum":0,"type":"integer"},"closed":{"description":"gathering and shown: kept plus broken.","maximum":9007199254740991,"minimum":0,"type":"integer"},"confirmable":{"description":"shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).","type":"boolean"},"confirmed":{"description":"shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.","maximum":9007199254740991,"minimum":0,"type":"integer"},"customers":{"description":"gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.","maximum":9007199254740991,"minimum":0,"type":"integer"},"from":{"description":"shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"held_until":{"description":"held: the night its record is counted from.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"in_words":{"description":"The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.","type":"string"},"kept":{"description":"shown.","maximum":9007199254740991,"minimum":0,"type":"integer"},"open":{"description":"shown, from rules version 8: its v2 promises still open (reputation.open).","maximum":9007199254740991,"minimum":0,"type":"integer"},"refunds_late":{"description":"shown, of broken: refunds paid late (refund.late).","maximum":9007199254740991,"minimum":0,"type":"integer"},"rules_url":{"format":"uri","type":"string"},"self_reported":{"description":"gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.","type":"boolean"},"state":{"description":"held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.","enum":["held","none","pending","gathering","shown"],"type":"string"},"threshold":{"description":"What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.","properties":{"closed":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"customers":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["closed"],"type":"object"},"to":{"description":"shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","type":"string"},"unclosed":{"description":"shown, of broken: left open 9 days past due (promise.unclosed).","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["state","in_words"],"type":"object"},"website":{"type":"string"} ⟨526 unchanged words⟩
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"fresh":{"default":false,"description":"Read the site again rather than answer the stored result: for a business that just changed its site. Allowed a few minutes after the last read; before that, the stored result is answered with when to ask again.","type":"boolean"},"url":{"description":"The business's website, ⟨23 unchanged words⟩