{"version":12,"rules":"0.2.5","status":"in_force","published_at":"2026-11-09T07:57:46Z","effective_at":"2026-11-09T07:57:46Z","summary":"Every filter narrows the list and never reorders it. Among the businesses left, a search's words put ahead those they match best, each business by its weakest word: a whole word of its name, then the category all the words name together, then a whole word of its own categories, services or tags, then a word's beginning there, then a category part of the words name or a broader one, then a whole word of the rest of its text, then a word's beginning in its name or the word inside a name with no space (a domain's), then a word's beginning in the rest of its text; a category's synonyms say which category the words name, and match no business's text. When all the words name one kind of business, a word of a business's name counts first only for a business of that kind, and any other's name counts as its own categories, services and tags do; when that kind is a place to stay and the search names a place, a business of another kind is left out when every word is only in the rest of its text. Within each of those bands comes reach: members whose inbox has answered for 30 days without a break, as their signed pings and this network's own reads of their door show, ours or any compatible inbox; then businesses with other live agent doors, by what an AI can do through them, payable before bookable or orderable before askable; then the rest. Within each, businesses whose record of kept promises reaches 0.40, confirmed by at least 3 different customers, come by that record, and everyone else takes turns in a shuffle that changes once a day and that anyone can reproduce. A record counts what the business cannot make up in its favour, and nothing else: promises its customers confirmed, reports that stand, and promises broken, left open or closed late; what it says it kept on its own word is shown as its own counts. Every 5th place of the full list goes to an answering newcomer, at most one an hour for businesses that may be related. A business has one place in a list. Distance is a filter; an assistant may ask for the nearest instead. Nothing about the order can be bought, and a free self-hosted inbox ranks the same as ours. In product search, a business's variants of one product, one product group in its catalogue, take one place, at the lowest price and with how many they are (order.variants). A free time read from a business's own inbox only decides whether it is in a search's results, never its place (order.free_times). An order refused at handover because the buyer could not show ID or is under age counts against nobody (order.id_refused). A business whose website this network matched to its one place in Overture Maps' data may take its position, kind and name from that place when its own site gives none, each labelled maps; no score reads it. A search reads a town inside a sentence, a door's words wherever they are, and more words that say nothing; when nothing matches every word it runs again with the words that name its kind, and an empty answer to a search for more than its place names the nearest that match (order.filters).","customer_scoring":"paused: this network scores no customer and tells no business anything about a customer that comes from their outcomes. Keys and passes are issued and presented as before, and a presentation answers as for a person with no record: tier new, score and every count 0, and scored false. In a business's score every customer weighs as one with no record (c = 1). Nobody is established, so no report is taken and no acknowledgement verifies by the delegated route. Businesses are scored by these rules otherwise unchanged. Scoring customers again is a rules change, announced like any other.","order":{"member":"status in (verified, unreachable) and verified_at is set: a member may call this network and is scored every night, listed or not","listed":"a member that has not left the directory and is not set aside; only listed businesses are in the directory, its hourly order and its counts","leaving":"a business leaves the directory, or comes back, by its inbox's signed POST /v1/instances/{domain}/listing (at most listing_changes_per_day changes), or by its manifest's directory.listed, which acts when what it says changes and never undoes a signed call; it is out of the directory at once and back by the next :00, with its record, its hold (R31) and its calls to this network as they were","set_aside":"a listed member that has neither a ping that counts nor a good manifest fetch for dormant_days is set aside: out of the directory like one that left, still scored, nothing taken from its record; when its profile has a contact_email it is warned there, set aside no sooner than dormant_notice_days after that warning was sent, and told why when it happens, and one address is written to at most once a day, the others waiting; a business that left the directory is neither warned nor set aside while it is out; it is listed again from the next :00 after a ping that counts or a good manifest fetch, and a manifest is fetched at least weekly for as long as it is a member","answering":"a ping within answering_hours and no failed manifest sweep since; once a business has sent a signed ping, its unsigned pings no longer count; and, for a member's inbox, its door not down by this network's own reads (doors.answering): its door failing by them (doors.states) means it is not answering, whatever its pings say, until a read finds it answering; and so does a door that blocks every one of them (doors.blocked), at least doors.blocked_reads over doors.blocked_hours or more. One failed read, one or two blocked reads, or none made, leave its signed pings to decide, and when its last read was blocked its listing says this network could not check. Nothing an agent reports changes it","answering_hours":24,"not_answering_since":"the later of the last ping that counts and the last good manifest fetch","snapshot":"frozen every hour at :00 UTC for members and listed entries alike (dir_entries); entries the crawler found are kept 7 days, members' for ever","rank_score_int":"floor(score × 10^4 + 0.5)","ranked_from":0.4,"ranked_from_int":4000,"rank_shuffle":"the first 16 hex digits of SHA-256(\"\u003cYYYY-MM-DD\u003e:\u003cbusiness uuid, lowercase\u003e\") for the snapshot's UTC date, a string","rank_pos":"ROW_NUMBER() OVER (ORDER BY rank_answering DESC, rank_ranked DESC, CASE WHEN rank_ranked THEN rank_score_int ELSE 0 END DESC, rank_shuffle ASC, id ASC)","near":{"parameter":"near=lat,lng","radius_km":10,"radius_km_max":1000,"order":"rank_pos among the businesses within radius_km","distance":"distance_km, great-circle, on each listing"},"cursor":"base64url JSON {m: \"v7\"|\"v7near\"|\"nearest\", o}: the place reached, continued in the current hour's order, so across :00 an entry may repeat or be skipped; at most 1000 places deep","filters":"Only agent-ready businesses are listed: askable or above, each with a door an agent can ask through: a member whose inbox takes messages, quote requests, bookings or orders, while it is listed (one whose inbox is unreachable too, until it is set aside: reach 3); a listing askable or above by its own site's doors when this network last built it (accepts, requestable, door_type and a search's action also ask for a member's inbox that answers now). A business that is not agent-ready yet is never listed, whatever q or the filters ask. category, attributes, near and radius_km, country, open_now, language, price_band, accepts, requestable, door_type, level, has_inbox, source and item_type only leave businesses out; the rest keep the order. q leaves out every business one of its words matches at none of the places bands.words names, and sets the band of each one it keeps (bands; a search answered in the plain order reads q as bands.computed says). Words of one letter, the few that say nothing about a business (an, and, are, as, at, by, for, from, in, is, me, my, near, of, on, or, the, to, with, that, which, who, where, there, this, these, those, any, some, you, your, we, our, they, them, their, someone, somebody, something, want, need, find, looking, please, help, recommend, suggest, show, tell, know, like, have, has, get, best, good, great, local, today, tonight, tomorrow, week, weekend, monday, tuesday, wednesday, thursday, friday, saturday, sunday, ao, aos, com, da, das, de, do, dos, em, mim, na, nas, no, nos, os, ou, para, perto, um, uma, que, onde, quero, preciso, procuro, hoje, amanhã, eu, você, vocês, nós, algum, alguma, aqui, melhor), the articles and prepositions of other languages, and in them the words a person asks with, the people they ask about and the days they ask for (nearby, al, au, aux, avec, del, della, dei, dem, den, der, des, di, die, du, een, el, en, et, für, het, il, la, las, le, les, los, mit, pour, und, una, unos, unas, une, un, uno, quiero, necesito, busco, donde, hoy, mañana, yo, algún, alguna, mejor, lunes, martes, miércoles, jueves, viernes, sábado, qui, veux, besoin, cherche, trouver, faire, demain, ce, soir, je, nous, vous, tu, moi, est, quel, quelle, meilleur, lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche, dass, möchte, brauche, suche, finden, bitte, heute, morgen, ich, mir, mich, wir, uns, ein, eine, einen, einem, einer, eines, gibt, lassen, beste, montag, dienstag, mittwoch, donnerstag, freitag, samstag, sonntag, che, voglio, vorrei, cerco, trovare, oggi, domani, stasera, io, mi, migliore, lunedì, martedì, mercoledì, giovedì, venerdì, sabato, domenica, dat, wil, zoek, vinden, graag, vandaag, vanavond, ik, mij, wij, में, के, की, का, से, को, और, میں, کے, کی, کا, سے, کو, اور, এবং) unless they are all q has, can, could, will, would, should, may, might and shall right after or right before I, you, we, they, he, she, someone, somebody, u or me, the words that ask for what a door does, a place q names, and any word of two letters after two other words of two letters (a word in Chinese, Japanese, Korean, Thai, Lao, Khmer or Burmese script, whose letters are syllables or words, aside) are not words of it. A search that asks for what an agent does through a door lists only businesses whose live doors take it, as accepts does: one of these words, read before the place q names, a verb when it opens q and more words follow (a verb of German, Dutch or Turkish, which put it last, also anywhere after q's opening word: \"Hotel buchen\", \"Termin buchen Friseur\"; and any of them right after can, could, para, per, please, pour, quero, quiero, to, voglio, wanna, want or would, wherever it is: \"a hotel in Kyoto I can book\"), a noun anywhere (\"flower delivery\"), but neither when it is one of the words that name a category together (\"book store\", \"water delivery\", \"delivery services\"), asks for a booking door (book), an order door (order) or one that takes quote requests (quote), and is then no word of q, nor is a \"get\" just before it (\"get a quote\"); \"book a hotel in Lisbon\" lists hotels near Lisbon with a booking door, \"booking\" alone every business with one, and the answer's action says so. book: verbs book, reserve, reservar, marcar, agendar, réserver, buchen, reservieren, prenotare, prenota, reserveren, boka, booke, reservere, zarezerwuj, zarezerwować, rezerwuj, rezervasyon yap (of them last too: buchen, reservieren, reserveren, rezervasyon yap); nouns booking, bookings, reservation, reservations, appointment, appointments, marcação, agendamento, reservación, cita, réservation, réservations, rendez-vous, buchung, reservierung, termin, prenotazione, prenotazioni, appuntamento, reservering, afspraak, boeking, bokning, reservasjon, rezerwacja, rezervasyon, 予約, 预订, 预约, 預訂, 預約, 订房, 訂房 · order: verbs order, buy, purchase, send, encomendar, comprar, pedir, enviar, encargar, commander, acheter, envoyer, bestellen, kaufen, ordinare, ordina, comprare, acquistare, kopen, beställa, köpa, bestille, købe, kjøpe, zamów, zamówić, kup, kupić, sipariş ver, satın al, satın (of them last too: bestellen, kaufen, kopen, sipariş ver, satın al, satın); nouns delivery, deliver, delivers, delivered, encomenda, entrega, entregar, entregam, entregan, pedido, commande, livraison, livrer, livré, livrée, livrés, livrées, bestellung, lieferung, liefern, liefert, geliefert, consegnare, bezorgen, leveren, consegna, bestelling, bezorging, beställning, leverans, bestilling, levering, zamówienie, dostawa, sipariş, teslimat, 注文, 購入, 配達, 出前, 订购, 購買, 购买, 外卖, 外賣, 配送, 下单 · quote: nouns quote, quotes, quotation, estimate, estimates, orçamento, orçamentos, cotação, presupuesto, presupuestos, cotización, devis, kostenvoranschlag, preventivo, preventivi, offertes, offert, offerter, prisoverslag, pristilbud, wycena, fiyat teklifi, teklif, 見積もり, 見積, 报价, 報價. Unless near is given, a town q names after in, near or the like (in many languages and scripts) at its end, or just before में, के पास, میں, کے پاس, তে (Hindi, Urdu and Bengali put them after the town: \"दिल्ली में होटल\"), or after in, near or the like with more words after it (the last such in q; the clear town of a name, of 50,000 people or more, or one named with its state, province or country after it; never a country, nor a name more often meant as a word: \"vegan bakery in Lisbon that delivers\" is near Lisbon, \"made in Italy shoes\" names no place; a town followed by a state, province or country it is not in names a place this network does not know), or alone at its end, or before the words above that say nothing after it (\"dentist Toronto tomorrow\") (by its name in GeoNames, of 50,000 people or more, or by any other of its names, in any script, of 300,000 or more, the clear one of that name; a name in a script other than Latin only for a town of a country that writes that script (Arabic AE AF BH DJ DZ EG IQ IR JO KM KW LB LY MA MR OM PK PS QA SA SD SO SY TN YE; Armenian AM; Bengali BD IN; Cyrillic BA BG BY KG KZ MD ME MK MN RS RU TJ UA UZ; Devanagari IN NP; Ethiopic ER ET; Georgian GE; Greek CY GR; Gujarati IN; Gurmukhi IN; Han CN HK JP MO MY SG TW; Hangul KP KR; Hebrew IL; Hiragana JP; Kannada IN; Katakana JP; Khmer KH; Lao LA; Malayalam IN; Mongolian CN MN; Myanmar MM; Oriya IN; Sinhala LK; Tamil IN LK SG; Telugu IN; Thaana MV; Thai TH; Tibetan BT CN); never a name of one letter, nor of fewer than three letters unless it is in one of those syllabic scripts, nor one of the words of the two lists above (the few that say nothing about a business, and other languages'), with or without its country, or a two-letter region code, after it (\"咖啡 北 JP\" and \"cafe bo SL\" name no town); and never, without that country or code, a word that names a category or one of the few towns' names more often meant as words, which with it name their towns: \"Paris France\", \"Portland OR\", \"hotel Nice France\"; a state or province of the United States, Australia or Canada by its name, or by its code in capitals, names its town of that name: \"Paris Texas\", \"London ON\"; NYC is New York City, CDMX Mexico City and Bali Denpasar), or such a town of 500,000 or more alone at its start, becomes near, with a radius for its size (10 to 40 km); read without in or near, when q has other words, it also keeps a business whose name holds every one of them and the town's, as whole words, wherever it is. A country q names after in or the like becomes country (a town of that name comes before it: \"hotel in Mexico\" is Mexico City), unless country is given: then the same country's name is no word of q, and another's stays one. near is lat,lng or a town's name. A town is looked up in GeoNames' towns (town names and centres © GeoNames, https://www.geonames.org, CC BY 4.0, https://creativecommons.org/licenses/by/4.0/, trimmed to towns of 15,000 people or more and a few smaller places, mostly capitals), by any of its names, ignoring capitals and accents; a town that holds the name comes before another town's other name, unless that town has 1,000,000 people or more and the largest that holds it fewer than 50,000 (never when a listing is placed). A town holds its own name (its name in GeoNames, with or without its accents) and, when it has more than ten times the people of every town whose own name it is, the start of its own name, in whole words, before a qualifier, when that start is one of its names in GeoNames too (León de los Aldama holds León, Stoke-on-Trent Stoke, Quezon City Quezon). Of towns of one name the most populous, the clear one when no other of that name has more than half its people. category is a group slug of GET /v1/categories or an Overture place category id (with every category below it), found by its id, slug, label or synonym, ignoring capitals and accents; an unknown one is 400 category_unresolved with up to 5 candidates. attributes are keys of GET /v1/attributes, all of which must hold. country keeps a business located in that country, serving it, or shipping there. accepts keeps a business whose live doors take every kind named (ask, quote, book, order, pay) and that accepts every payment named. requestable keeps a business with a live door that declared that kind. door_type keeps a business with a live door of any type named. level keeps a business at that level or above; below askable nothing is listed yet. has_inbox keeps a business with an inbox door, or without one. source keeps members, registered or found businesses. language keeps a business that speaks that language or a variant of it, page language included. open_now keeps the businesses open at that moment by the hours they published in their own time zone; a business without hours is left out. Distance is a filter: near keeps businesses within radius_km. A listing whose own site names its town but publishes no position is placed at that town's centre (an entry nobody claimed, coarsened as its own position would be): of the towns of its country of that name, a town that holds it before another town's other name, the clear one; with a region, the most populous of them there. In the United States, Australia and Canada a state or province its site names (by its code, its name, or an ISO code such as US-FL) places it only in that state or province, or nowhere; with no country, a state or province of one of the three and of no other names that country, and so places it there or nowhere, but a two-letter code (also other countries' regions' codes) places it either there or at the most populous town of that name whose own region code (GeoNames' admin1) it is, or nowhere. A region naming Puerto Rico or another territory GeoNames counts as a country (by its name, or by its code when the country is the United States or the territory), with the country the United States, the territory or none, is looked up as that territory. Elsewhere a region equal to a town's region code (GeoNames' admin1) picks the most populous such town of the name. With no country and no such state or province, only a town of 300,000 people or more is used. A name with hyphens is looked up whole without them too (Kita-Kyushu is Kitakyushu), and a district after a hyphen (Berlin-Mitte) is placed at its head only when the head is any of the names of a town of 300,000 people or more and no other town of the country has it; rarely, that head is another town than the district's own (Vĩnh-Bảo, too small for these towns, is placed at Vinh). near measures it from there, its distance_km is in whole kilometres, it shows location_precision town, and that centre is never shown as its geo. A listing of a business whose site this network's crawler matched to its one place in Overture Maps' data (© Overture Maps Foundation: the place's name on the site's own pages, with its town, postcode or phone), when that place is within 50 km of the point or town the site's own data names, or in the country it names, or the site names none, reads three things from it, each shown with src maps. When its own site publishes no position, it is placed at that place before the centre of a town its site names, coarsened to an area about 5 km across whoever claimed it: near measures it from there, its distance_km is in whole kilometres, it shows location_precision maps, that place is never shown as its geo, and it is no storefront by it. When its category is only online_shop (its products name no retail kind, its own words no service), it takes the kind of that place's group, as the category of the group its own name or line, its domain's words or the place's name names, else the group's own (for florists, trades, transport, repairers and venues, a kind a name or line names, or none), with online_shop beside it, filtered on as seen; never a group of online shops or software companies, nor a kind the directory does not list. When it is named by nothing but its domain, or only by a model's reading of its name, it takes the place's name, when that name is plainly its domain's business (its letters are the domain's own label or hold it, the label holds them, a word of five letters or more of it, one that names no kind of business, is in the label, or its initials begin it). A chain's site (more than one place) reads none of it, and neither does a score. A search near a place, in a country or for what a door does, whose words no business matches every one of, and among which a run of words names a kind on its own beside other words (the one that ends last, the longest of those; never a town's name), is run again with only that run (its place, its door's action and its filters kept: \"vegan bakery in Lisbon\" as \"bakery\" near Lisbon), unless it names no place and a word left out is a town's name; the answer's note says which words were left out, and its next pages are that search's too. An answer to a search that asks for more than its place and lists nobody near it says in note how many businesses of the kind q's words name the directory lists, when they name one, and the nearest businesses within 1000 km (the most radius_km may be) that match everything else, with the radius_km that would list the nearest and all of them, or that nothing matches that near; those are named in the note, never listed.","rule":"Filters narrow, never reorder. Bands 1-8 = how well q's words match, each word at the best place it matches: 1 a whole word of the name (when every word of q names one kind, only for a business of it), 2 in the category every word of q names together, 3 a whole word of its other names, categories' labels, services or tags, or of the name of a business of another kind than the one every word of q names, 4 a word's beginning there (when no word of the name begins so), 5 in a category part of q's words name or a broader one they name, 6 a whole word of the rest of its text, 7 a word's beginning in the name or the word inside a name with no space (a domain's), 8 a word's beginning in the rest of its text; a business's band is its weakest word's place, and one a word matches nowhere is left out, as is, when every word of q names places to stay and the search names a place (a town or country q or near_name names, or near), one of another kind for which every word of q is only in the rest of its text (bands.kind). Reach 1 = a member's inbox that answers and has answered for 30 days without a break (ours or compatible; signed ping within 24 h, its door not found failing by this network's own reads nor blocking every one of them for 2 days, checked within the last 7 days). Reach 2 = other live doors by level (Payable \u003e Bookable/Orderable \u003e Askable), and a member's inbox before its 30 days. Reach 3 = Readable/Listed (index only until Phase B). Then kept promises (receipts score ≥ 0.40 from evidence the business cannot make up, confirmed by ≥ 3 distinct customers). Then a daily shuffle. Every 5th place goes to an answering newcomer, one per relations group an hour. One place per business. No score steps and no embedding \"meaning\" fallback in v1. Distance is a filter; `order=nearest` is optional. Owners see only level, proof and record.","bands":{"1":"q's weakest word in it is at place 1, a whole word of its name, when every word of q names one kind only for a business of it (kind); every other word at that place or a better one; with no q, every business is in band 1","2":"q's weakest word in it is at place 2, in the category every word of q names together (by its slug, a label or a synonym, or a place category's label); every other word at that place or a better one","3":"q's weakest word in it is at place 3, a whole word of its other names (those its site publishes), its categories' labels, its services' names or its tags; and, when every word of q names one kind, a whole word of the name of a business of another kind (kind); every other word at that place or a better one","4":"q's weakest word in it is at place 4, the beginning of a word of those, when no word of its name begins so (a name its other names repeat is read as its name); every other word at that place or a better one","5":"q's weakest word in it is at place 5, in a category part of q's words name, or in a broader one the words name: a group by its name, when they name a place category too, or by one of its synonyms (never the shops' group, which no synonym names); every other word at that place or a better one","6":"q's weakest word in it is at place 6, a whole word of the rest of its text: its description, its town, the other names only its registration declared, and what it probably is (a probable category's label, a language model's reading of its name, services or town); every other word at that place or a better one","7":"q's weakest word in it is at place 7, the beginning of a word of its name, or a word of four letters or more, as q writes it, anywhere inside a name with no space in it (a domain's: \"coffee\" in \"loyalcoffee.co\"), after every whole word, its description's too; every other word at that place or a better one","8":"q's weakest word in it is at place 8, the beginning of a word of the rest of its text; every other word at that place or a better one","words":"each word of q takes the best of the eight places it matches a business at (1 the best), and a business takes the band of its weakest word; a business some word matches at no place is left out. A word matches a whole word as itself, or its singular or its plural by its English ending: a word in -s of four letters or more, but not in -ss, nor one of news, goods, jeans, glasses, sunglasses, clothes, series, species, scissors, trousers, pants, shorts, tights, leggings, pyjamas, pajamas, lens, electronics, cosmetics, athletics, gymnastics, physics, mathematics, economics, politics, ethics, headquarters, louis, is also itself without the -s (\"taxis\" is \"taxi\"), and one in -us or -is also itself with -es (\"campus\" is \"campuses\"); of five or more, one in -ches, -shes, -sses, -xes or -zes is instead without -es, one in -ies with -y or with -ie (\"berries\" is \"berry\", \"cookies\" \"cookie\"), one in -oes with -oe, and with -o when four letters or more are left (\"shoes\" is \"shoe\", \"tomatoes\" \"tomato\"), one in -ives with -ive or -ife (\"knives\" is \"knife\"), and one in -lves with -lve or -lf (\"shelves\" is \"shelf\"); a word in -y after a consonant is also its -ies, one in -s, -x, -ch or -sh its -es, and any other its -s. A word of four letters or more, as q writes it, also matches the beginning of a word at most six letters longer (\"bake\" begins \"bakery\", never \"abaker\"): in the business's name only at place 7, after every whole word, its description's too, and every beginning of its other names (\"deli\" begins \"Flower Delivery\" behind every deli), and anywhere inside a name with no space in it there too, as most domains are (\"coffee\" is in \"loyalcoffee.co\", \"bakery\" in \"RawBakery\"), and in its other names only where no word of its name begins so; a form made from it never does (\"fries\" never begins \"friend\"), and a word never matches by its stem (\"plumber\" is no \"plumbing\" in a name, though the plumbers' category it names is). A word in a script written without spaces (Chinese, Japanese, Thai, Lao, Khmer, Burmese) matches anywhere inside a text, at places 1, 3 and 6. A group's terms (its slug, labels and synonyms) are in no business's text for a word one of whose whole forms (itself, its singular or its plural, as above) is in one of them, inside a word too: they only say which category a run of q's words names (the longest run of up to four, the leftmost of equal runs but the rightmost single word, a last word's singular too). A run names a place category by its id or label, a group by its slug or label, and either by a term of vocab/search_terms.json, in more languages; a group's synonym names the place categories (at most 12) whose labels hold every word of it, or else the group, at place 5 (never the shops' group); a run that names none of these names, when it has several words, the place categories (at most 12) whose labels hold every one of them, and when it is one word of five letters or more, the ones (at most 3) whose labels hold it, a label's words and the run's compared by their English stems (-ies as -y, without the -es of -ches, -shes, -sses, -xes or -zes, or else without -s, then without -ing, -ery or -er), there only. A run that is part of q names its category at place 5 at best","computed":"at query time, over the hour's order; within a band the hour's order stands; a search whose words cannot be ordered so within 2.6 seconds is answered in the plain order instead, and its answer's order says plain: every word of q as written anywhere in a business's text, the categories' synonyms too, those with every word in their name, categories or services ahead, then the hour's order; no place, action or category is read from q, near and every other filter stay as given, and its next_cursor continues that order","kind":"q names one kind when every word of q names one category together (bands.words' run is all of q, and names a category at place 2) and every category it names there is of one group of GET /v1/categories (a group it names, or each place category's group; a place category of no group is a kind of its own); words that name categories of several groups (a product's makers and sellers: \"gin\" names distilleries and liquor shops) name no kind. Then a whole word of a business's name is place 1 only for a business of that kind (one of its groups is it: the groups of its place categories, primary and alternates, none only probably so, and a member's those its manifest names; for a category of no group, one of its place categories is it or below it), and any other business's name is read at place 3, with its other names. When the kind is places to stay (the group stay) and the search names a place (a town or country q or near_name names, or near), a business of another kind is left out when every word of q is only in the rest of its text: its band is 6 or 8, it is in none of the categories q's words name, and no word of q is in its name, other names, categories' labels, services or tags, as a whole word or a word's beginning, nor inside a name with no space; since a place to stay's word in a business's own text says more often where its customers are than what it is. An answer that then lists nobody says so in its note, with q's words as written. Without a place nobody is left out by it: those businesses come after every business of the kind. A search with other words is read as without this rule"},"reach":{"1":"a member whose inbox answers (answering: a signed ping within answering_hours (24), and its door not down by this network's own reads), whose manifest this network fetched successfully within the last 7 days, and that has kept answering for reach_1_after_days (30) without a break: the current spell began at least that long before the hour's order, and a day without a signed ping, a failed manifest sweep, or its door down by this network's reads (failing, or blocking every read), begins a new one; after its door was down, the spell begins again when a read finds it answering","2":"a business with a live agent door at askable or higher, by its best live door: payable, then bookable or orderable, then askable; a member whose inbox does not sign its pings, was not checked in the last 7 days, or has answered for less than reach_1_after_days, is here at its inbox's level","3":"readable or listed: kept in the index and not served until Phase B; a listed member whose inbox is unreachable is served here until it is set aside (rules version 5)"},"within_reach":"those ranked by their record (score ≥ 0.40, compared as rank_score_int, from evidence the business cannot make up (score.counted), with at least witnesses_min (3) distinct customers who confirmed kept promises of it), then the daily shuffle over everyone else and over ties, then id","newcomers":{"every":5,"who":"a member that became one less than 90 days before the hour's order, ranked or not, at any reach, whose inbox answers (answering) and whose manifest this network fetched successfully within the last 7 days","how":"places 5, 10, 15… of the hour's order go, once, when the order is frozen, to the next newcomer not yet placed whose turn it is; a newcomer may also come earlier in its own place; never twice. A search narrows that order, so a newcomer keeps its place among the businesses a filter leaves","days":90,"group":"at most one newcomer of each group has its turn in an hour's order: the one whose turn key is lowest. A group is a connected component of the night's relations (verified.related); every member whose relations are unknown (verified.unknown), every member of a component that holds one, and every member that has no night's score yet, is in one group, unknown","per_group_per_hour":1,"turn":"the first 16 hex digits of SHA-256(\"\u003cYYYY-MM-DDTHH\u003e:\u003cbusiness uuid, lowercase\u003e\") for the hour's order, a string, lowest first, then the uuid"},"one_place":"two entries on the same registrable domain (the public-suffix list with private suffixes) take one place, the better one; a member always takes the place of an entry the crawler found on its domain","nearest":"order=nearest with near sorts the filtered businesses by distance, then rank_pos; no newcomer places","found_tier":"Businesses this network finds on their own websites are listed only when they are askable or above, with each fact's source and date and the words: found on its own website · not a member · checked \u003cdate\u003e. Until version 7 takes effect, they and businesses registered without an inbox appear only in a separate tier after every member, in their own order (reach, then the daily shuffle), so no member's position changes. Amended on 19 October 2026 (listing rule B; GET /v1/score-rules, listing): a local business found on its own website (any kind but an online shop or a software, API or AI company) is listed when it is a real business: a member, registered or claimed, or a site this network's crawler matched to its entry on public maps or in a business register; no business whose site the crawler found parked, empty or taken over is listed, unless it is a member; online shops and software, API and AI companies are listed on their doors, in their own groups. The order is unchanged, and no member's position changes.","sources":"a value counts in a filter only when the business declared it (its manifest, its registration, its own structured data) or it is seen on its own pages or at its own door; a value marked probably never counts in a filter, except page language, shown with ~; a listing's town centre, worked out from the town its own site declared, counts for near; so does a listing's place in Overture Maps' data that this network's crawler matched to its own site (src maps), and that place's kind counts for category (filters)","variants":"In search_products (GET /v1/products), the offers one business lists as one product group in its catalogue (variants: sizes, colours, flavours) are one product, keyed group:\u003cbusiness\u003e:\u003cgroup\u003e, whatever their barcodes: the business takes one place with them, its offer the cheapest the search found, with variants saying how many the search found. A business never takes more than one place with one group. Every filter applies to each offer first, so a filter only leaves variants out. A search by barcode (gtin, and get_offers) reads one barcode in one multipack, where a business has one place, at its lowest price, as before. Catalogue version 1 names no product group: until a business's catalogue names one, its offers are keyed as before, by barcode and multipack, else each as its business's own product","free_times":"A free time is a filter, never a reason to order: when a search asks for businesses with a free time, read live from each one's own inbox, having one only decides whether a business is in the results. Having more of them, an earlier one, or an inbox that answers sooner never moves a business: the results come in the order they would without the free time. No free time this network reads is kept, and none enters a score, a record, reach or the hour's order. No search asks for one yet: request_booking reads one business's free times for the person who asked, and keeps none of them","reach_1_after_days":30},"score":{"method":"the Wilson score interval's lower bound","formula":"score = 0 if n = 0, else (p + z²/(2n) − z·√(p(1−p)/n + z²/(4n²))) / (1 + z²/n)","z":1.2816,"z2":1.64249856,"share":"p = K / (K + B), K and B the sums of x over the kept and broken evidence counted (score.counted)","confidence_business":"n = K + B over the evidence counted (score.counted); while releasing (R31), n ≤ release_units_per_month × full months since verification","confidence_person":"n = K + B","word_cap_units":50,"stored_decimals":6,"compared_as":"floor(score × 10^4 + 0.5)","computed":"nightly at 00:00 UTC from all evidence at that scoring_time; listings, presentations and signed pings read that snapshot","perfect_record":"n / (n + z²): 0.40 needs 1.10 units, 0.75 needs 4.93","counterparty_snapshot":"s is the counterparty's score in the previous night's snapshot, 0 on the first night and without record or identity","shown":"a business's score is shown, with its tier, verified_share and verified_kept_share, when at least witnesses_min (3) distinct customers confirmed kept promises of it through an acknowledgement this network verified (tiers.witness). Any other record shows no score: self_reported true, tier new, and its counts: kept and broken (the pieces of its record the night read, its own word included) and open (its v2 promises still open: issued, not yet closed by an outcome and not unclosed), in the directory, its listings, the API and the assistants' tools, with no count of customers","counted":"a business's score counts the evidence it cannot make up in its favour, and nothing else: kept outcomes a verified acknowledgement backs (as verified evidence, never presumed), customers' reports that stand (weights.report_weighs), the network's own rows (promise.unclosed, promise.closed_late), and the broken outcomes the business records against itself. n = K + B: none of it is the business's word in its favour, so the word cap (word_cap_units) applies to nothing; while releasing (R31), n ≤ release_units_per_month × full months since verification. R7 counts a pair's pieces among those counted","counts":"the kept outcomes a business records on its own word, auto-completed or not, enter no score: they are shown as its counts (kept, broken, open), with verified_share and verified_kept_share, the shares of its whole record by weight that verified evidence and verified kept outcomes are"},"weights":{"piece":"x = o × t × q × r × d","outcomes":[{"code":"booking.completed","business":"kept","customer":"kept","o":1,"by":"the inbox"},{"code":"order.fulfilled","business":"kept","customer":"kept, when paid or free","o":1,"by":"the inbox"},{"code":"booking.cancelled_by_business","business":"broken","o":1,"o_with_notice":0.5,"by":"the inbox"},{"code":"order.not_fulfilled","business":"broken","o":1,"by":"the inbox"},{"code":"booking.no_show_business","business":"broken","o":1,"by":"a verified report that stands (§3.4)"},{"code":"order.not_received","business":"broken","o":1,"by":"a verified report that stands (§3.4)"},{"code":"promise.unclosed","business":"broken","o":1,"by":"the network, 9 days after the promise was due without an outcome (R30); at a business silent when they run out, they start again once, from the next spell of answering, and a later silence never restarts them"},{"code":"booking.no_show_customer","customer":"broken","o":1,"by":"the inbox"},{"code":"booking.cancelled_late_by_customer","customer":"broken","o":0.5,"by":"the inbox"},{"code":"order.payment_failed","customer":"broken","o":0.5,"by":"the inbox"},{"code":"order.charged_back","customer":"broken","o":1,"by":"the inbox"},{"code":"booking.cancelled_by_customer","o":null,"by":"the inbox"},{"code":"order.cancelled_by_customer","o":null,"by":"the inbox"},{"code":"order.lapsed","o":null,"by":"the inbox"},{"code":"refund.honoured","business":"kept","o":1,"by":"the inbox"},{"code":"refund.late","business":"broken","o":1,"by":"the inbox"},{"code":"refund.cancelled_by_customer","o":null,"by":"the inbox"},{"code":"order.refund_refused","business":"broken","o":1,"by":"a verified report that stands (§3.4, A3.3)"},{"code":"promise.closed_late","business":"broken","o":0.5,"by":"the network, when a booking or an order is closed as the customer's cancellation or lapse less than 48 hours before it was due and no verified acknowledgement backs that closure (weights.which_outcome_stands)"},{"code":"order.id_refused","o":null,"by":"the inbox, when it refuses an age-restricted order at handover because the buyer could not show ID or is under age: no row on either side, and no closure labelled the customer's, so never late (A7.3). Reserved: the protocol does not define it yet, so this network refuses it until it does; then it takes it only on an order whose promise says it needs an ID check at handover, and only with nothing the receipt schema does not name"}],"presumed":0.5,"presumed_when":"nothing scored is presumed: a kept outcome counts when a verified acknowledgement token backs it, and not otherwise, and the token lifts presumption, so an auto-completed outcome (aut 1) or a promise published late halves nothing","time":[{"up_to_days":30,"t":1},{"up_to_days":182,"t":0.75},{"up_to_days":365,"t":0.5},{"up_to_days":null,"t":0.25}],"time_from":"age at scoring time from the evidence date: iat; a business's broken outcome max(iat, arrival − 24 h); promise.unclosed when recorded; a report its kept row's date","source":{"verified":2.5,"counterparty":"c = 1 + s × min(1, U / 5)","counterparty_full_at":5,"u":"for evidence about a business: its person's unrelated businesses (components with kept outcomes) outside this business's component; about a person: the business's other distinct customers, by customer key"},"repeat":{"formula":"for a business's score (score.counted): within each pair, side and ledger, the pieces in order of o × t × q × d, heaviest to lightest, the heaviest at r = 1 and each next at r = step, until the pair reaches cap pieces' worth, then r = 0; so a customer counts at most cap times over, and adding a piece never lowers what its pair weighs. For a person's score, min(cap, 1 + step·(m − 1)) / m, as before","cap":3,"step":0.25,"customer_broken_cap":1,"pair":"per business–customer pair, side and ledger (kept apart from broken); the customer is the person's customer key. At a business none of whose rows about it names a person, every row is one anonymous customer, kept and broken together: m counts all of them, so they weigh at most cap pieces in all, kept and broken in their own proportion. At a business that names a person on any row, a kept row that names nobody is not counted and a broken one counts as before, per receipt sub. Subs that name no person never count as customers; a person the business names still counts as one customer, even one it invented, until the business's word is weighed at the cap's scale. An inbox whose customers this network can tell apart counts for more than one whose customers it cannot: a deliberate push toward identified customers"},"dispute":0.5,"never_counts":["cancelling in time","declines, expiries, quotes, messages, a customer's returns and withdrawals, a refund nothing promised, sandbox items","promise receipts, and v1 receipts held from before version 8 (stored, never scored)","amounts","the business's own items or email domain"],"which_outcome_stands":"per item and side, the greatest iat, then nonce, never arrival order; a business's broken outcome is final (a later kept one is a conflict); only a report that stands turns kept into broken; the item's due and end, for notice, R30 and reports, are those of its latest amendment honoured (amendments.dates_from), else its earliest promise's, except that a customer's cancellation is late only against the later of that due and the date last verifiably agreed (the latest amendment an acknowledgement token backs, else the earliest promise's): a change on the business's word alone never makes a customer late; a booking or an order closed as the customer's (booking.cancelled_by_customer, order.cancelled_by_customer, order.lapsed), the earliest such outcome this network stored arriving less than closed_late_before_hours before due, with no verified acknowledgement of any such closure, and with no broken outcome of the business's or verified kept outcome standing, is promise.closed_late (o 0.5), dated due + closed_late_after_hours; a verified acknowledgement of the closure removes it","report_weighs":"a report that stands is broken evidence on its own weight: its outcome's o, verified (q 2.5), dated when the item was due; disputed, it counts d. It replaces the business's kept row, the business's own broken outcome of the item gives way to it whenever the business recorded that, and the item's promise.unclosed or promise.closed_late gives way to it, even when the business closed the item as the customer's; disputed, the business's own broken outcome still counts beside it. So a report that stands always counts; one that could not would be refused (409 report_cannot_count) instead of taken","contest_weighs":"a customer may contest a broken outcome about them, and while the contest is open the outcome counts for nothing; the business that recorded it may withdraw it at any time, and then it never counts; it may dispute the contest within contest_days of its filing (of this version taking effect, for a contest filed before), and then the outcome counts d; a contest it has not disputed by then is upheld, and the outcome never counts again","customer_broken":"a customer's broken outcome (booking.no_show_customer, booking.cancelled_late_by_customer, order.payment_failed, order.charged_back) counts against them only when their email was proven by the outcome's date: by a code this network emailed (sign-in or recovery), for every business; or at the business that recorded it, for its own outcomes: its inbox, issuing or linking them with that address, said how it proved it (email_proof otp: a code it emailed there; dkim: DKIM-authenticated mail from it), or they presented there the key issued for the address, which rides on the first email to them. Otherwise it is stored and never scored, even once the email is proven later. Kept outcomes always count; evidence about a business is unchanged","stand_ins":"A customer who stopped a business, or erased their record, counts at that business as an anonymous customer, and their outcomes there count for no person. That customer is never scored, weighs as a customer with no record (c = 1), and is its own customer in the repeat rule (R7). Two addresses of one mailbox (A1.4) are one such customer at a business. It counts among the business's distinct customers (§5.3) exactly when the person counted there at the moment they were cut and nobody still linked there counts as the same customer; a person there with the same mailbox counts instead of it. An address at a company's email domain stays, with every other address there, linked or stopped, that domain's one customer (§4). An address at the business's own domain never counts (§3.4). It relates the business to nobody (§4)."},"timing":{"hold_days":30,"release_units_per_month":30,"release_month_days":30,"release_until_day":90,"unclosed_after_days":9,"business_notice_hours":24,"late_customer_cancel_hours":48,"late_promise_hours":24,"broken_dated_arrival_hours":24,"auto_complete_hours":48,"order_lapse_days":14,"order_due_days":30,"report_opens_hours":1,"report_window_days":90,"dispute_days":14,"future_iat_seconds":300,"rules_notice_days":15,"nightly":"00:00 UTC","rank_snapshot":"hourly at :00 UTC","shuffle":"daily, by the snapshot's UTC date","dormant_days":90,"dormant_notice_days":30,"contest_days":14,"closed_late_before_hours":48,"closed_late_after_hours":72,"unclosed_restarts":1},"verified":{"routes":["vouched: the key is in the Web Bot Auth directory of a platform on recognised_platforms and made the item's own presentation","delegated: the key is delegated through the person's session to a pass of the item's person, who is established"],"recognised_platforms":[],"established":{"tier":"trusted","unrelated_businesses":3,"each_trusted_when_issued":true,"span_days":60,"email":"network-proven"},"related":["a registrable domain (the embedded public-suffix list, private suffixes included)","a receipt key, when each proved it holds it: a receipt or a signed request verified under it","an address in one IPv4 /24 or IPv6 /48 within 30 days, from pings signed by each, ignoring egress_ignored","at least half of the smaller one's customers, each counted by customer key or company domain only when this network proved their email with a code it sent, else as their own person","an operator record with a reason"],"mutually_unrelated":"in different connected components of the relation","psl_snapshot":"2026-09-23","private_suffixes":["surfingdog.ai","workers.dev","pages.dev","netlify.app","vercel.app","github.io","gitlab.io","herokuapp.com","fly.dev","onrender.com","web.app","firebaseapp.com","azurewebsites.net","azurestaticapps.net","appspot.com","cloudfunctions.net","run.app","deno.dev","up.railway.app","glitch.me","repl.co","ngrok.app","ngrok-free.app","trycloudflare.com","blogspot.com","myshopify.com","wixsite.com","square.site","carrd.co","framer.app"],"egress_ignored":["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","0.0.0.0/8","::1/128","fc00::/7","fe80::/10","173.245.48.0/20","103.21.244.0/22","103.22.200.0/22","103.31.4.0/22","141.101.64.0/18","108.162.192.0/18","190.93.240.0/20","188.114.96.0/20","197.234.240.0/22","198.41.128.0/17","162.158.0.0/15","104.16.0.0/13","104.24.0.0/14","172.64.0.0/13","131.0.72.0/22","2400:cb00::/32","2606:4700::/32","2803:f800::/32","2405:b500::/32","2405:8100::/32","2a06:98c0::/29","2c0f:f248::/32"],"customers_one_domain":"customers whose email shares a registrable domain that is not free mail count as one; evidence between a business and a customer of its own domain (its registrable domain or its contact_email's) never counts","not_observed":["hosted owner accounts: this network holds none, so a tenant under a private suffix is unknown (verified.unknown)"],"acknowledgement":"only an acknowledgement token verifies: the ADR-016 counter-signature JWS over the receipt's sha, signed by a key that passes a route (for an SDK agent, the key it delegated); a forwarded acknowledge_receipt signature (agent_key, purpose ack) is stored and verifies nothing, and only the token stops a report (409 you_acknowledged_it)","customer_key":"customers are counted by customer key: the address with everything from the first + to the @ dropped, and at gmail.com and googlemail.com the dots too, as gmail.com; used for distinct customers, U for evidence about a person, r's pair for evidence about a business, and the overlap relation for customers whose email this network proved; identity (issuance, recovery, codes) keeps the exact address","unknown":"a member whose relations this network cannot see is related to nobody and unrelated to nobody: a tenant under a private suffix (private_suffixes, ours included), and a member whose signed pings in the 30 days before came from no address outside egress_ignored, or that sent none. A customer presented there is not presented at an unrelated business, its kept outcomes give no person an unrelated business (U, a person's trusted tier, establishment), no business is unrelated to it, and its newcomers share one group with every member of its component (order.newcomers.group)"},"tiers":{"business":{"trusted":{"min_score":0.75,"distinct_customers":10,"verified_evidence":true,"witnesses_min":3},"building":{"min_score":0.4,"verified_evidence":true,"witnesses_min":3},"new":"everything else, including no record"},"person":{"trusted":{"min_score":0.75,"unrelated_businesses":3},"building":{"min_score":0.4},"new":"everything else, including no record"},"distinct_customer":"a customer key (one mailbox) with a network-proven email, or presented at another business, both of whose relations are known (verified.unknown) and that is in another component","ranked":"a business is ranked, sorting before the shuffle, from building (R32); building and trusted need witnesses_min distinct customers who confirmed kept promises of it, and any other record is new, whatever its score","witness":"a customer (one mailbox, or every address at one company's email domain) whose acknowledgement, verified by this network, backs a kept outcome of the business that counts; never one at the business's own domain (§3.4)"},"limits":{"issuance_per_business_per_day":50,"passes_per_key_per_day":10,"instance_calls_per_minute":600,"presentations_per_person_per_business_per_day":20,"pass_strings":8,"pass_string_chars":200,"per_entries":8,"promises_per_business_per_day":10000,"unusual_use_businesses_per_24h":10,"signature_seconds":300,"signature_skew_seconds":60,"code_digits":6,"code_minutes":10,"code_tries":5,"codes_per_hour_per_address":3,"session_hours":24,"issuance_replay_days":7,"networks_per_inbox":8,"listing_limit_max":100,"unusual_use_signing_keys":2,"listing_changes_per_day":10},"never_used":["advertising","payment, sponsorship or any other money","the amounts on receipts","anything a business's profile says about it, apart from the location a near search measures from","who is searching: every caller gets the same order for the same search","a business's free times, read live from its own inbox: a search may only leave out a business without one (order.free_times)","a business's place in the maps data in a score, a record, reach or the hour's order: only what its listing shows, labelled maps, and what near and category read of it (order.filters, order.sources)"],"changelog":[{"version":2,"published_at":"2026-09-22T00:00:00Z","effective_at":"2026-09-22T00:00:00Z","summary":"The neutral order during the redesign: verified businesses newest first, near a place nearest first.","url":"https://network.surfingdog.ai/v1/ranking?version=2"},{"version":3,"rules":"0.1","published_at":"2026-09-23T08:43:18Z","effective_at":"2026-09-23T11:16:18Z","summary":"Network rules 0.1 (ADR-017): kept promises scored with confidence, answering businesses first, ranked from 0.40, everyone else in a daily shuffle.","url":"https://network.surfingdog.ai/v1/ranking?version=3"},{"version":4,"rules":"0.1.1","published_at":"2026-09-23T12:33:53Z","effective_at":"2026-09-23T12:33:53Z","summary":"Only a real counter-signature verifies a promise. Once an inbox signs its pings, only signed pings count. Stop linking businesses by contact email. One mailbox is one customer (ana+1@gmail.com counts as ana@gmail.com); shared customers link businesses by mailbox only once this network proved the address. A broken promise counts against a customer only once their email is proven: \"Someone using your email can't hurt you.\" In force the day it was published: ours was the only listed business.","url":"https://network.surfingdog.ai/v1/ranking?version=4"},{"version":5,"rules":"0.1.2","published_at":"2026-09-26T22:17:37Z","effective_at":"2026-09-26T22:17:37Z","summary":"A customer who stops a business, or erases their record, counts there as an anonymous customer: never fewer customers for a business that respects a customer's wish, and never more (already so since this network built it). A business may leave the directory and come back whenever it likes, and keeps its record. A business whose inbox has not answered for 90 days is set aside, after a warning 30 days before, until it answers again; nothing is taken from its record. What a search may ask is published, and all of it only ever leaves businesses out. A customer's contest of an outcome about them: it counts for nothing while the business may answer; disputed within 14 days, it counts half; not answered in time, it never counts again. In force the day it was published: no more than one business was listed then, so no other was owed 15 days' notice.","url":"https://network.surfingdog.ai/v1/ranking?version=5"},{"version":6,"rules":"0.1.3","published_at":"2026-09-29T13:16:48Z","effective_at":"2026-09-29T13:16:48Z","summary":"A change to a booking or an order both sides agreed is recorded as an amendment, and the latest sets its dates for notice, unclosed promises and reports; without a verified acknowledgement at most 3 per item count, moving the date at most 90 days in all. A refund is a promise on an item of its own: paid by its date it is kept, paid late it is broken, promised and never paid it is unclosed. A customer's agent may report a lawful withdrawal or guarantee claim refused, until 730 days after the order was due. The agreed terms travel as a keyed fingerprint that is never scored. Nothing here counts for or against a customer. In force the day it was published: no more than one business was a member of this network then, so no other was owed 15 days' notice.","url":"https://network.surfingdog.ai/v1/ranking?version=6"},{"version":7,"rules":"0.2.0","published_at":"2026-10-07T00:45:39Z","effective_at":"2026-10-13T21:14:24Z","summary":"Rules 0.2.0: the directory lists agent-ready businesses with their doors. A search's words or category put businesses whose name, categories or services match before those matching only their description. Reach orders the rest: a member's inbox that answers, then other live agent doors by what an AI can do through them. Kept promises and the daily shuffle work as before, every 5th place of the full list goes to an answering newcomer, and a business has one place. Businesses found on their own websites are listed when askable or above, labelled as found, and until this version takes effect only after every member. Announced with 15 days' notice, it took effect sooner.","url":"https://network.surfingdog.ai/v1/ranking?version=7"},{"version":8,"rules":"0.2.1","published_at":"2026-10-13T09:50:17Z","effective_at":"2026-10-13T21:14:24Z","summary":"Rules 0.2.1: version 7 amended on 12 October 2026, before it took effect. A record of kept promises ranks only when at least a fifth of it is kept promises the business's customers confirmed through an acknowledgement this network can verify. Any other record rests on the business's own word: it is shown as its kept, broken and still-open promises, with no score, and takes its turn in the daily shuffle. This network cannot yet verify any acknowledgement, so no record is ranked until it can. At a business that names none of its customers, outcomes count together as one anonymous customer; at one that names some, a kept outcome that names nobody does not count and a broken one counts in full, which favours inboxes that know who their customers are. A member's inbox reaches the top of the order after answering for 30 days without a break. Tenants of a hosting suffix, ours included, and inboxes this network sees only through a serverless platform's published addresses, or not at all in the last 30 days, are related to nobody and unrelated to nobody. Every member is a newcomer for 90 days after joining, ranked or not, and newcomers that may be related share one newcomer's place an hour. A member's receipts are claims v2 only: a promise falls due within 400 days of the later of when it was made and when this network received it (an order or a refund within 60) and ends within 31 days of falling due; every receipt of an item names the same due and end; and a business's cancellation has notice only when this network took it 24 hours or more before due. Published while no more than one business was a member of this network, so no other was owed 15 days' notice: it takes effect with version 7, which it amends.","url":"https://network.surfingdog.ai/v1/ranking?version=8"},{"version":9,"rules":"0.2.2","published_at":"2026-10-13T21:11:30Z","effective_at":"2026-10-13T21:14:24Z","summary":"Rules 0.2.2: version 8 amended on 13 October 2026. A business's score now counts the evidence it cannot make up in its favour, and nothing else: kept promises its customers confirmed through an acknowledgement this network verifies, customers' reports that stand, the promises it records as broken itself, and promises this network found left open or closed late. The kept promises a business records on its own word are shown as its own counts and enter no score. A record is ranked, and shows its score, once at least 3 different customers confirmed promises it kept; the rule that a fifth of a record must be confirmed retires. A booking or an order the business closes as the customer's cancellation or lapse less than 48 hours before it was due, which the customer has not confirmed 72 hours after it was due, counts as half a broken promise. A customer still counts at most three times over, now with the heaviest of their pieces in full and each lighter one at a quarter, so that a broken promise added to a record never raises its score. A customer's report that stands always counts, even against a cancellation labelled the customer's, and over a lighter failure the business records itself, before the report or after it; a report that could not count is refused instead of taken. When a business is silent as a promise's 9 days run out, they start again once, and never twice. A member's inbox does not count as answering while this network's own reads find its door failing, whatever its pings say, until a read finds it answering, nor while it blocks every one of those reads for two days; one or two blocked reads, or none, leave its signed pings to decide. A door is marked failing by this network's own reads, never by anything else: after 3 failed reads at least 30 minutes apart within 7 days; one good read makes it live again, and 30 days failing make it gone. Agents may report how a door worked: their reports reach the business privately and may make this network read the door again, and never change a door, a score or the order. One gap is known and stated: a business that records its own no-show as the customer's is caught when the customer reports it, and not before. Published while no more than one business was a member of this network, so no other was owed 15 days' notice: it takes effect with version 8, which it amends.","url":"https://network.surfingdog.ai/v1/ranking?version=9"},{"version":10,"rules":"0.2.3","published_at":"2026-10-31T19:56:00Z","effective_at":"2026-10-31T19:56:00Z","summary":"Rules 0.2.3: version 9 amended on 31 October 2026. When every word of a search names one kind of business (\"hotel\", \"dentist\", \"bike repair\"), a word of a business's name puts it first only when it is of that kind: \"hotel\" finds hotels before hotel suppliers, whose name now counts as their services and tags do. When that kind is a place to stay and the search names a place (a town, a country or near), a business of another kind that has the words only in the rest of its text is left out, and an answer that then lists nobody says so: a search for hotels in a town with none listed no longer lists tea for hotels. A kind is one group of the directory's categories, or a category of no group: words that name categories of several groups (\"gin\" names distilleries and liquor shops), and searches with other words (\"tea for hotels\"), are read as before. Nothing else changes. In force the day it was published: no business but this network's own inboxes was a member of it then, so none was owed 15 days' notice.","url":"https://network.surfingdog.ai/v1/ranking?version=10"},{"version":11,"rules":"0.2.4","published_at":"2026-11-01T10:39:25Z","effective_at":"2026-11-01T10:39:25Z","summary":"Rules 0.2.4: version 10 amended on 1 November 2026. In product search, a business's variants of one product (its sizes, colours or flavours: one product group in its catalogue) take one place, at the lowest price the search found and with how many they are; a business never takes several places with one product's variants. Catalogue version 1 has no product groups, so no answer changes until a catalogue names one. A free time read from a business's own inbox may only decide whether the business is in a search's results, never its place: not for having more free times, an earlier one, or an inbox that answers sooner. An order refused at handover because the buyer could not show ID or is under age, the outcome order.id_refused, counts against neither the business nor the person: it closes the order with nothing on either side. The protocol does not define that outcome yet; this network takes it once it does, on an order whose promise says it needs an ID check at handover. Nothing else changes. In force the day it was published: no business but this network's own inboxes was a member of it then, so none was owed 15 days' notice.","url":"https://network.surfingdog.ai/v1/ranking?version=11"},{"version":12,"rules":"0.2.5","published_at":"2026-11-09T07:57:46Z","effective_at":"2026-11-09T07:57:46Z","summary":"Rules 0.2.5: version 11 amended on 8 November 2026, for what a search for businesses finds and how it reads its words. Where listings come from: a business whose website this network's crawler matched to its one place in Overture Maps' data (the place's name on the site's own pages, with its town, postcode or phone), when that place is within 50 km of where the site's own data says the business is, or in the country it names, or the site names none, takes from it what its own site does not give, each shown with src maps and © Overture Maps Foundation: its position (coarsened to an area about 5 km across, never shown as a point, and never making it a storefront), its kind when it is only an online shop, and its name when it has none but its domain, or only a model's reading of one, and the place's name is plainly its domain's business. A chain's site takes none of it, and no score, leaderboard or census reads what a listing takes from it. How words are read: a town inside a sentence (\"vegan bakery in Lisbon that delivers\") or before words that say nothing (\"dentist Toronto tomorrow\"), and a state or province after a town read there or at the end of a search (\"florist Paris Texas\", \"florist in London ON\"); the words that ask for a door before the place, wherever they are (\"florist Paris delivery\", \"a hotel in Kyoto I can book\"), with appointment, send and deliver and their words in other languages; and more words that say nothing about a business: the words a person asks with, the people they ask about and the days they ask for, in seven languages, and can, will and the like next to a person. A search near a place, in a country or for what a door does that nothing matches with every word runs again with only the words that name its kind, and its note says which words were left out. An answer to a search that asks for more than its place and lists nobody near it says how many of the kind the directory lists and the nearest within 1000 km that match, with the radius_km that lists them, or that none does, and then suggests no larger radius. With its publication, whatever version orders an answer, since neither is a rule of the order: search_businesses takes radius_km beside near, as GET /v1/businesses does, and names in its note an argument it does not take, which it still ignores. Nothing else changes: the hour's order, the bands, reach, records, the shuffle and the newcomers are version 11's. In force the day it was published: no business but this network's own inboxes was a member of it then, so none was owed 15 days' notice.","url":"https://network.surfingdog.ai/v1/ranking?version=12"}],"next":null,"amendments":{"unverified_max":3,"due_shift_days_max":90,"dates_from":"an amended receipt (knd amended, claims v2) is a change to a booking's or an order's promise both sides agreed: ref the nonce of the item's earliest promise, due and, for a booking, end the new times, trm the fingerprint of the agreed terms and acc who accepted it; the latest amendment honoured (greatest iat, then nonce) sets the item's due and end for notice, R30 and reports, else the earliest promise's do; an amendment a verified acknowledgement token of it backs is honoured, and without one at most unverified_max per item are (the first by iat, then nonce), each moving due, and the date R30 reads (end, else due), at most due_shift_days_max days either way from the earliest promise's; one beyond them is stored and changes nothing, and none is honoured on a v1 promise. trm, on a promise or an amendment, is evidence for a dispute and never scored; an amendment and a refund's receipts name no presentation (per is ignored on them)"},"refunds":{"promise":"a refund, return or withdrawal of a booking or an order is an item of its own (typ refund): its promise (knd accepted) is issued when the date it must be paid by is fixed, with due that date and amt the amount owed; refund.honoured (kept, business, honoured_o) when paid by due, refund.late (broken, business, late_o) when paid after it, dated as any broken outcome of the business's, and refund.cancelled_by_customer (no row) when the customer drops the return after its date was fixed; promised and never paid, it is promise.unclosed (R30). No refund outcome has a customer's row","honoured_o":1,"late_o":1,"report_window_days":730},"intake":{"claims":"claims v2 only (ver 2, with due): a v1 promise is refused, and so is an outcome or an amendment naming one held from before; those are kept and never scored. Due and end are the same on every receipt of an item: a second promise names those of the first this network stored, which stays the item's promise whatever the second's iat says, and an outcome names its item's (its promise's, or an amendment's this network holds)","due_days_max":{"booking":400,"order":60,"refund":60},"due_from":"the later of iat and the arrival, when this network first saw the receipt","end_after_due_days_max":31,"business_notice_from":"when this network stored the cancellation: a business's cancellation has notice (o_with_notice) only when this network took it at least business_notice_hours before due, whatever its iat says, and whenever it first saw it","refused":"422 v2_required, due_too_far, end_too_far or promise_conflict, and final: the same receipt always meets the same arrival and the same promise; an outcome or an amendment naming a promise refused for good is refused for good too (422 ref_refused), and one naming another due or end than its item's is 422 bad_payload"},"doors":{"reads":"this network reads agent doors itself, signed as its crawler, one request each, and does nothing else: once a day every door of a member and of a claimed listing, the daily set (the server card or tools/list, the manifest, and for a member's inbox the door its manifest names for agents: GET /business, else tools/list); a confirm read of a door an agent reports down, and of a door of the daily set its crawl did not find answering; recovery reads after a failed read of a door of the daily set, at recovery_minutes, then daily while it fails. The daily set is read first; reads of other doors take at most half the day's reads, and those agents' reports ask for at most a quarter","daily_for":"members' doors and claimed listings' doors; a business found by the crawler and not claimed is read at its normal crawl, and at most report_reads_per_door_per_day times a day more when an agent reports trouble, with no recovery reads","reads_never_act":"a read never books, orders, pays or sends anything: an inbox is read with GET /business and a made-up item id, never an MCP tools/call","failed":"no DNS answer, a connection refused, reset or timed out, a TLS failure, no answer within answer_seconds, a 5xx that is not a challenge page, or an answer that does not parse as the door's protocol","blocked":"a 403, a 429, a 503 challenge page or a robots disallow: shown privately to the business as our check was blocked, and on its listing as could not check; it never lowers a door","control":"in the same minute a read is made, this network reads a target it knows answers through the same route; when that read fails, the result is thrown away","states":"live after one good read; failing after failing_reads failed reads within failing_within_days, the first and the last at least failing_span_minutes apart, with no good read between; gone after gone_after_days failing. Reads this network schedules (doors.reads) are what mark a door of the daily set failing; any other door is marked failing by its site's crawl, by the same rule, and so is a door of the daily set while this network's scheduled reads are not being made","checks_only_add":"a check anyone asks for (Check again) reads a whole site and may add a door or raise one; it never lowers one","answering":"a member's inbox is not answering while its door is failing by this network's reads, whatever its signed pings say, until a read finds it answering, nor while it blocks every read of this network's, blocked_reads of them in a row over blocked_hours or more (order.answering)","reports":"an agent may report how a door worked (POST /v1/door-reports, or the tool report_door), signed or not: reports reach the business privately, and a report that a door is down may make this network read it again, at most report_reads_per_door_per_day times a day for reports no proof binds; a report never changes a door's state, a score or the order","history_by":"a door's history is kept by its domain and type, and follows a change of its URL for history_carried_days","failing_reads":3,"failing_within_days":7,"failing_span_minutes":30,"gone_after_days":30,"answer_seconds":10,"recovery_minutes":[15,60,240],"reads_per_door_per_day":12,"report_reads_per_door_per_day":2,"minutes_between_reads":10,"history_carried_days":90,"blocked_reads":3,"blocked_hours":48},"known_gaps":["A business that records its own failure as the customer's no-show or late cancellation (booking.no_show_customer, booking.cancelled_late_by_customer) writes no broken row against itself: it is caught when the customer reports it, and not before (weights.report_weighs).","A business that makes up customers at free-mail addresses it holds has each counted as a customer of its own once acknowledgements in their names verify (tiers.witness), as many witnesses as it makes up. No acknowledgement can verify on this network yet."]}