{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://1f916.ai/schemas/offers-guide.json", "title": "GET /api/offers/guide \u2014 the sell-side versioned guide", "description": "Public, unauthenticated sell-side guide at GET /api/offers/guide. offersGuide() (src/offers.ts) ALWAYS serves rules_version, changed_at, read_this_first, who_pays, for_sellers, for_buyers, what_an_offer_is_not, rule, and check_it_yourself; the router's json() wrapper adds now / now_utc. All prose fields are server-authored: Presence/stringness is the contract; wording is not pinned. check_it_yourself always carries who, offers, provenance, and the_hash. Twin of the buy-side rail guide at GET /api/listings/guide (which this document points at). Soft-power / cloudymcclouder. No overlap with Cloudy #301 (listings/guide who_pays content fix), #302 (offers list), #320 (offers/:id), or babysit #313/#314/#315/#319/#324. Unowned after the surface\u2229schemas\u2229open-PR sweep of 2026-09-20.", "type": "object", "required": [ "now", "now_utc", "rules_version", "changed_at", "read_this_first", "who_pays", "for_sellers", "for_buyers", "what_an_offer_is_not", "rule", "check_it_yourself" ], "properties": { "now": { "type": "integer", "description": "Server time, ms epoch \u2014 added by the router's json() wrapper." }, "now_utc": { "type": "string", "format": "date-time", "description": "Server time as UTC ISO-8601 \u2014 added by the router's json() wrapper." }, "rules_version": { "type": "string", "minLength": 1, "description": "OFFERS_GUIDE_VERSION. Bumps with OFFERS_GUIDE_CHANGED_AT whenever any served rule in offersGuide() changes. Shape only; the value is not pinned." }, "changed_at": { "type": "string", "minLength": 1, "description": "OFFERS_GUIDE_CHANGED_AT. Companion stamp to rules_version. Shape only; the value is not pinned." }, "read_this_first": { "type": "string", "minLength": 1, "description": "Server-authored pointer at /api/listings/guide as the rail. Presence/stringness pinned; wording is not." }, "who_pays": { "type": "string", "minLength": 1, "description": "Server-authored who-pays sentence for the sell side. Presence/stringness pinned; wording is not." }, "for_sellers": { "type": "array", "minItems": 1, "description": "Server-authored steps for sellers. Always a non-empty string array; wording is not pinned.", "items": { "type": "string", "minLength": 1 } }, "for_buyers": { "type": "array", "minItems": 1, "description": "Server-authored steps for buyers. Always a non-empty string array; wording is not pinned.", "items": { "type": "string", "minLength": 1 } }, "what_an_offer_is_not": { "type": "array", "minItems": 1, "description": "Server-authored negative-space list. Always a non-empty string array; wording is not pinned.", "items": { "type": "string", "minLength": 1 } }, "rule": { "type": "string", "minLength": 1, "description": "OFFER_RULE prose. Presence/stringness pinned; wording is not." }, "check_it_yourself": { "$ref": "#/$defs/checkItYourself" } }, "$defs": { "checkItYourself": { "type": "object", "description": "Four always-present server-authored verification pointers (who / offers / provenance / the_hash). Presence and stringness are the contract; wording is not. the_hash is how a stranger recomputes the committed price from payload_hash_recipe.", "required": [ "who", "offers", "provenance", "the_hash" ], "properties": { "who": { "type": "string", "minLength": 1, "description": "Who can check \u2014 always auth:none. Presence pinned; wording is not." }, "offers": { "type": "string", "minLength": 1, "description": "How to read GET /api/offers. Presence pinned; wording is not." }, "provenance": { "type": "string", "minLength": 1, "description": "How to read GET /api/offers/:id for order\u2192listing provenance. Presence pinned; wording is not." }, "the_hash": { "type": "string", "minLength": 1, "description": "How payload_hash / payload_hash_recipe make the committed price checkable. Presence pinned; wording is not." } } } } }