{"openapi":"3.1.0","info":{"title":"Marano Family Lawyers Sydney — public API","version":"1.0.0","summary":"Submit an enquiry, or ask a grounded question about this business.","description":"The public, unauthenticated API for Marano Family Lawyers Sydney.\n\nRead every fact this business publishes on its own website — opening hours, services and prices, service areas, FAQs, reviews and the page inventory — then submit an enquiry or ask the on-site assistant a question answered strictly from that same information.\n\nThere is no authentication. Every endpoint is public and rate-limited per IP, and every response carries RFC 9331 `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` headers so a client can pace itself instead of discovering the ceiling by hitting it; a 429 adds `Retry-After`.\n\nErrors are JSON with a stable `code` field (see the Error schema) — branch on `code`, never on the human-readable message.\n\nVersioning: URL path prefix, /api/v{major}. The major number changes only for a breaking change. Current version `v1`. A version is supported for at least 12 months after its successor ships. During that window every response carries a Deprecation header (RFC 8594) with the date it was deprecated, a Sunset header with the date it stops being served, and a Link header with rel=\"successor-version\" pointing at the replacement.\n\nHuman documentation: /developers. Model Context Protocol server: /api/mcp (manifest at /.well-known/mcp). Related machine-readable files: /llms.txt (citation guidance + canonical links), /agent.json (entity card), /sitemap.xml, /robots.txt.","contact":{"name":"Marano Family Lawyers Sydney","url":"https://maranofamilylawyers.com.au/locations/_sm/contact"}},"externalDocs":{"description":"Developer portal","url":"https://maranofamilylawyers.com.au/locations/_sm/developers"},"x-api-lifecycle":{"current":"v1","supported":["v1"],"deprecated":[],"scheme":"URL path prefix, /api/v{major}. The major number changes only for a breaking change.","breakingChange":"Removing a field, renaming a field, changing a field type, or changing the meaning of an existing value. Adding a new field or a new resource is NOT breaking — clients must ignore fields they do not recognise.","notice":"A version is supported for at least 12 months after its successor ships. During that window every response carries a Deprecation header (RFC 8594) with the date it was deprecated, a Sunset header with the date it stops being served, and a Link header with rel=\"successor-version\" pointing at the replacement.","versionHeader":"Every response carries `API-Version`. Send `Accept: application/json`; content negotiation is not used for versioning."},"x-mcp":{"endpoint":"https://maranofamilylawyers.com.au/locations/_sm/api/mcp","manifest":"https://maranofamilylawyers.com.au/locations/_sm/.well-known/mcp","transport":"streamable-http"},"servers":[{"url":"https://maranofamilylawyers.com.au/locations/_sm","description":"This business's site"}],"security":[],"tags":[{"name":"Business data","description":"Read what this business publishes about itself. No authentication."},{"name":"Leads","description":"Send an enquiry to the business."},{"name":"Assistant","description":"Grounded Q&A about this business."}],"paths":{"/api/v1":{"get":{"tags":["Business data"],"operationId":"getApiIndex","summary":"List every read resource, the rate limits and the versioning policy","description":"The live index of this API. Fetch this first: it enumerates the resources below at runtime, so a client that reads it never has to hard-code a path.","responses":{"200":{"description":"The API index.","headers":{"RateLimit-Limit":{"description":"Requests permitted in the current window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests still available in this window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}},"API-Version":{"description":"The API version that served this response.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["apiVersion","name","authentication","rateLimit","versioning","resources","writeOperations","links","generatedAt"],"properties":{"apiVersion":{"type":"string","const":"v1"},"name":{"type":"string"},"description":{"type":"string"},"authentication":{"type":"string","const":"none"},"rateLimit":{"type":"object","required":["requests","windowSeconds","scope"],"properties":{"requests":{"type":"integer"},"windowSeconds":{"type":"integer"},"scope":{"type":"string"},"headers":{"type":"string"}}},"versioning":{"type":"object","description":"The versioning and deprecation policy (same as x-api-lifecycle)."},"resources":{"type":"array","items":{"type":"object","required":["resource","summary","method","url"],"properties":{"resource":{"type":"string","enum":["business","hours","services","service-areas","faqs","reviews","pages"]},"summary":{"type":"string"},"method":{"type":"string","const":"GET"},"url":{"type":"string","format":"uri"}}}},"writeOperations":{"type":"array","items":{"type":"object","required":["operationId","method","url","summary"],"properties":{"operationId":{"type":"string"},"method":{"type":"string","const":"POST"},"url":{"type":"string","format":"uri"},"summary":{"type":"string"}}}},"errors":{"type":"object","properties":{"shape":{"type":"string"},"note":{"type":"string"}}},"links":{"type":"object","additionalProperties":{"type":"string"}},"generatedAt":{"type":"string","format":"date-time"}}}}}},"404":{"description":"BRAND_NOT_FOUND or NOT_PUBLISHED — no published business is served on this host.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED — see RateLimit-Reset for when the window rolls over.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/business":{"get":{"tags":["Business data"],"operationId":"getBusiness","summary":"Name, category, address, contact details, ABN and identifiers — the NAP record.","description":"Name, category, address, contact details, ABN and identifiers — the NAP record. Read-only, no authentication. Everything returned here is already visible on Marano Family Lawyers Sydney's public pages.","responses":{"200":{"description":"The business resource.","headers":{"RateLimit-Limit":{"description":"Requests permitted in the current window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests still available in this window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}},"API-Version":{"description":"The API version that served this response.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["apiVersion","resource","data","links"],"properties":{"apiVersion":{"type":"string","const":"v1"},"resource":{"type":"string","const":"business"},"data":{"type":"object","required":["id","locationId","name","legalName","tagline","description","category","url","telephone","telephoneDisplay","email","address","geo","plusCode","identifiers","foundedYear","paymentAccepted","currenciesAccepted","languages","bookingUrl","sameAs"],"properties":{"id":{"type":"string"},"locationId":{"type":"string"},"name":{"type":"string"},"legalName":{"type":"string"},"tagline":{"type":["string","null"]},"description":{"type":["string","null"]},"category":{"type":"object","required":["primary","secondary","schemaType"],"properties":{"primary":{"type":"string"},"secondary":{"type":"array","items":{"type":"string"}},"schemaType":{"type":"string"}}},"url":{"type":"string","format":"uri"},"telephone":{"type":"string"},"telephoneDisplay":{"type":"string"},"email":{"type":["string","null"]},"address":{"type":"object","required":["streetAddress","addressLocality","addressRegion","postalCode","addressCountry"],"properties":{"streetAddress":{"type":"string"},"addressLocality":{"type":"string"},"addressRegion":{"type":"string"},"postalCode":{"type":"string"},"addressCountry":{"type":"string"}}},"geo":{"type":"object","required":["latitude","longitude"],"properties":{"latitude":{"type":"number"},"longitude":{"type":"number"}}},"plusCode":{"type":["string","null"]},"identifiers":{"type":"object","required":["abn","licence","googlePlaceId"],"properties":{"abn":{"type":["string","null"],"description":"Australian Business Number."},"licence":{"type":["string","null"]},"googlePlaceId":{"type":["string","null"]}}},"foundedYear":{"type":["integer","null"]},"paymentAccepted":{"type":"array","items":{"type":"string"}},"currenciesAccepted":{"type":"string","description":"ISO 4217 code(s)."},"languages":{"type":"array","items":{"type":"string"},"description":"ISO 639-1 codes."},"bookingUrl":{"type":["string","null"]},"sameAs":{"type":"array","items":{"type":"string"},"description":"The business's own profiles elsewhere."}},"description":"Name, category, address, contact details, ABN and identifiers — the NAP record."},"links":{"type":"object","additionalProperties":{"type":"string"},"description":"Where to go next — self, index, openapi, documentation, mcp, entityCard, website."},"generatedAt":{"type":"string","format":"date-time"}}}}}},"404":{"description":"BRAND_NOT_FOUND or NOT_PUBLISHED — no published business is served on this host.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"METHOD_NOT_ALLOWED — this resource is read-only. The Allow header lists the methods it accepts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED — 120 requests per IP per minute. See RateLimit-Reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/hours":{"get":{"tags":["Business data"],"operationId":"getHours","summary":"Opening hours for each day of the week, plus the timezone they are expressed in.","description":"Opening hours for each day of the week, plus the timezone they are expressed in. Read-only, no authentication. Everything returned here is already visible on Marano Family Lawyers Sydney's public pages.","responses":{"200":{"description":"The hours resource.","headers":{"RateLimit-Limit":{"description":"Requests permitted in the current window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests still available in this window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}},"API-Version":{"description":"The API version that served this response.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["apiVersion","resource","data","links"],"properties":{"apiVersion":{"type":"string","const":"v1"},"resource":{"type":"string","const":"hours"},"data":{"type":"object","required":["timezone","note","days"],"properties":{"timezone":{"type":"string","description":"IANA timezone the times are expressed in."},"note":{"type":["string","null"]},"days":{"type":"array","items":{"type":"object","required":["day","opens","closes","closed","note"],"properties":{"day":{"type":"string","enum":["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]},"opens":{"type":["string","null"],"description":"24-hour \"HH:MM\"; null when closed."},"closes":{"type":["string","null"]},"closed":{"type":"boolean"},"note":{"type":["string","null"]}}}}},"description":"Opening hours for each day of the week, plus the timezone they are expressed in."},"links":{"type":"object","additionalProperties":{"type":"string"},"description":"Where to go next — self, index, openapi, documentation, mcp, entityCard, website."},"generatedAt":{"type":"string","format":"date-time"}}}}}},"404":{"description":"BRAND_NOT_FOUND or NOT_PUBLISHED — no published business is served on this host.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"METHOD_NOT_ALLOWED — this resource is read-only. The Allow header lists the methods it accepts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED — 120 requests per IP per minute. See RateLimit-Reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/services":{"get":{"tags":["Business data"],"operationId":"getServices","summary":"Services offered, with prices where published and the page for each.","description":"Services offered, with prices where published and the page for each. Read-only, no authentication. Everything returned here is already visible on Marano Family Lawyers Sydney's public pages.","responses":{"200":{"description":"The services resource.","headers":{"RateLimit-Limit":{"description":"Requests permitted in the current window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests still available in this window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}},"API-Version":{"description":"The API version that served this response.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["apiVersion","resource","data","links"],"properties":{"apiVersion":{"type":"string","const":"v1"},"resource":{"type":"string","const":"services"},"data":{"type":"object","required":["count","items"],"properties":{"count":{"type":"integer"},"items":{"type":"array","items":{"type":"object","required":["name","description","price","duration","tags"],"properties":{"name":{"type":"string"},"description":{"type":["string","null"]},"price":{"type":["object","null"],"required":["label","min","max","currency"],"properties":{"label":{"type":["string","null"]},"min":{"type":["number","null"]},"max":{"type":["number","null"]},"currency":{"type":"string"}},"description":"null when the business publishes no price."},"duration":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}}}}}},"description":"Services offered, with prices where published and the page for each."},"links":{"type":"object","additionalProperties":{"type":"string"},"description":"Where to go next — self, index, openapi, documentation, mcp, entityCard, website."},"generatedAt":{"type":"string","format":"date-time"}}}}}},"404":{"description":"BRAND_NOT_FOUND or NOT_PUBLISHED — no published business is served on this host.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"METHOD_NOT_ALLOWED — this resource is read-only. The Allow header lists the methods it accepts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED — 120 requests per IP per minute. See RateLimit-Reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/service-areas":{"get":{"tags":["Business data"],"operationId":"getServiceAreas","summary":"Suburbs and localities this business serves.","description":"Suburbs and localities this business serves. Read-only, no authentication. Everything returned here is already visible on Marano Family Lawyers Sydney's public pages.","responses":{"200":{"description":"The service-areas resource.","headers":{"RateLimit-Limit":{"description":"Requests permitted in the current window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests still available in this window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}},"API-Version":{"description":"The API version that served this response.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["apiVersion","resource","data","links"],"properties":{"apiVersion":{"type":"string","const":"v1"},"resource":{"type":"string","const":"service-areas"},"data":{"type":"object","required":["count","primary","items"],"properties":{"count":{"type":"integer"},"primary":{"type":"string"},"items":{"type":"array","items":{"type":"object","required":["name","primary"],"properties":{"name":{"type":"string"},"primary":{"type":"boolean"}}}}},"description":"Suburbs and localities this business serves."},"links":{"type":"object","additionalProperties":{"type":"string"},"description":"Where to go next — self, index, openapi, documentation, mcp, entityCard, website."},"generatedAt":{"type":"string","format":"date-time"}}}}}},"404":{"description":"BRAND_NOT_FOUND or NOT_PUBLISHED — no published business is served on this host.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"METHOD_NOT_ALLOWED — this resource is read-only. The Allow header lists the methods it accepts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED — 120 requests per IP per minute. See RateLimit-Reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/faqs":{"get":{"tags":["Business data"],"operationId":"getFaqs","summary":"Published questions and answers, verbatim and quotable.","description":"Published questions and answers, verbatim and quotable. Read-only, no authentication. Everything returned here is already visible on Marano Family Lawyers Sydney's public pages.","responses":{"200":{"description":"The faqs resource.","headers":{"RateLimit-Limit":{"description":"Requests permitted in the current window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests still available in this window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}},"API-Version":{"description":"The API version that served this response.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["apiVersion","resource","data","links"],"properties":{"apiVersion":{"type":"string","const":"v1"},"resource":{"type":"string","const":"faqs"},"data":{"type":"object","required":["count","items"],"properties":{"count":{"type":"integer"},"items":{"type":"array","items":{"type":"object","required":["question","answer","source","sourceUrl"],"properties":{"question":{"type":"string"},"answer":{"type":"string","description":"Verbatim; quotable."},"source":{"type":["string","null"]},"sourceUrl":{"type":["string","null"]}}}}},"description":"Published questions and answers, verbatim and quotable."},"links":{"type":"object","additionalProperties":{"type":"string"},"description":"Where to go next — self, index, openapi, documentation, mcp, entityCard, website."},"generatedAt":{"type":"string","format":"date-time"}}}}}},"404":{"description":"BRAND_NOT_FOUND or NOT_PUBLISHED — no published business is served on this host.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"METHOD_NOT_ALLOWED — this resource is read-only. The Allow header lists the methods it accepts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED — 120 requests per IP per minute. See RateLimit-Reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/reviews":{"get":{"tags":["Business data"],"operationId":"getReviews","summary":"Aggregate rating and the reviews shown publicly on the site.","description":"Aggregate rating and the reviews shown publicly on the site. Read-only, no authentication. Everything returned here is already visible on Marano Family Lawyers Sydney's public pages.","responses":{"200":{"description":"The reviews resource.","headers":{"RateLimit-Limit":{"description":"Requests permitted in the current window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests still available in this window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}},"API-Version":{"description":"The API version that served this response.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["apiVersion","resource","data","links"],"properties":{"apiVersion":{"type":"string","const":"v1"},"resource":{"type":"string","const":"reviews"},"data":{"type":"object","required":["aggregate","writeReviewUrl","allReviewsUrl","items"],"properties":{"aggregate":{"type":["object","null"],"required":["ratingValue","reviewCount","bestRating","worstRating"],"properties":{"ratingValue":{"type":"number"},"reviewCount":{"type":"integer"},"bestRating":{"type":"number"},"worstRating":{"type":"number"}}},"writeReviewUrl":{"type":["string","null"]},"allReviewsUrl":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","required":["author","rating","datePublished","body","source"],"properties":{"author":{"type":"string"},"rating":{"type":"number"},"datePublished":{"type":"string"},"body":{"type":"string"},"source":{"type":"string"}}}}},"description":"Aggregate rating and the reviews shown publicly on the site."},"links":{"type":"object","additionalProperties":{"type":"string"},"description":"Where to go next — self, index, openapi, documentation, mcp, entityCard, website."},"generatedAt":{"type":"string","format":"date-time"}}}}}},"404":{"description":"BRAND_NOT_FOUND or NOT_PUBLISHED — no published business is served on this host.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"METHOD_NOT_ALLOWED — this resource is read-only. The Allow header lists the methods it accepts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED — 120 requests per IP per minute. See RateLimit-Reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/pages":{"get":{"tags":["Business data"],"operationId":"getPages","summary":"Every published page on this site, with its title and canonical URL.","description":"Every published page on this site, with its title and canonical URL. Read-only, no authentication. Everything returned here is already visible on Marano Family Lawyers Sydney's public pages.","responses":{"200":{"description":"The pages resource.","headers":{"RateLimit-Limit":{"description":"Requests permitted in the current window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests still available in this window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}},"API-Version":{"description":"The API version that served this response.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["apiVersion","resource","data","links"],"properties":{"apiVersion":{"type":"string","const":"v1"},"resource":{"type":"string","const":"pages"},"data":{"type":"object","required":["count","sitemap","items"],"properties":{"count":{"type":"integer"},"sitemap":{"type":"string","format":"uri"},"items":{"type":"array","items":{"type":"object","required":["title","type","url","lastModified"],"properties":{"title":{"type":"string"},"type":{"type":"string","description":"Page kind, e.g. home, service, service-suburb, service-area."},"url":{"type":"string","format":"uri"},"lastModified":{"type":["string","null"]}}}}},"description":"Every published page on this site, with its title and canonical URL."},"links":{"type":"object","additionalProperties":{"type":"string"},"description":"Where to go next — self, index, openapi, documentation, mcp, entityCard, website."},"generatedAt":{"type":"string","format":"date-time"}}}}}},"404":{"description":"BRAND_NOT_FOUND or NOT_PUBLISHED — no published business is served on this host.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"METHOD_NOT_ALLOWED — this resource is read-only. The Allow header lists the methods it accepts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED — 120 requests per IP per minute. See RateLimit-Reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/leads":{"post":{"tags":["Leads"],"operationId":"submitLead","summary":"Submit an enquiry to this business","description":"Creates a lead. The business is notified by email and the lead appears in their inbox.\n\nRate limited to 10 submissions per IP per 10 minutes.\n\nAccepts `application/json` (answers JSON, documented here) or form-encoded (answers a branded HTML thank-you page, used by the site's own forms).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["brand_id"],"properties":{"brand_id":{"type":"string","description":"This business. Use the value shown in this document's example.","example":"dev-marano-family-lawyers-sydney-mv7zl85k"},"name":{"type":"string","maxLength":200,"description":"Enquirer's full name."},"phone":{"type":"string","maxLength":60,"description":"Australian mobile or landline, e.g. 0412 345 678."},"email":{"type":"string","format":"email","maxLength":200},"message":{"type":"string","maxLength":2000,"description":"What the enquiry is about."},"service":{"type":"string","maxLength":200,"description":"Which service the enquiry concerns. Supplying it makes name, phone and email required."},"consent":{"type":"string","description":"Consent to be contacted — \"on\", \"true\", \"1\" or \"yes\"."},"require_fields":{"type":"string","description":"Comma-separated list the server must enforce as mandatory, e.g. \"name,phone,email\"."}}},"examples":{"enquiry":{"summary":"A typical enquiry","value":{"brand_id":"dev-marano-family-lawyers-sydney-mv7zl85k","name":"Alex Taylor","phone":"0412 345 678","email":"alex@example.com","message":"My laptop will not start.","consent":"yes"}}}}}},"responses":{"201":{"description":"Lead created.","content":{"application/json":{"schema":{"type":"object","required":["leadId","success"],"properties":{"leadId":{"type":"string"},"success":{"type":"boolean"}}}}}},"400":{"description":"Missing or invalid fields — see `code`: MISSING_FIELDS, INVALID_PHONE, INVALID_EMAIL, UNREADABLE_BODY.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"BRAND_NOT_FOUND — brand_id does not resolve to a live business.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"METHOD_NOT_ALLOWED — this endpoint accepts POST. The Allow header lists the methods it accepts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED — too many submissions from this IP. 10 per 10 minutes; see Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error","code","hint"],"properties":{"error":{"type":"string","description":"Human-readable message. Do not machine-match on this text; it may change."},"code":{"type":"string","description":"Stable machine token. Branch on this.","enum":["RATE_LIMITED","UNREADABLE_BODY","MISSING_FIELDS","INVALID_PHONE","INVALID_EMAIL","BRAND_NOT_FOUND","NOT_FOUND","METHOD_NOT_ALLOWED","UNSUPPORTED_VERSION","NOT_PUBLISHED","ASSISTANT_DISABLED","SEND_FAILED","SERVER_ERROR"]},"hint":{"type":"string","description":"What the caller should do about it."}}}}}}