{"openapi":"3.1.0","info":{"title":"NoReply public API","version":"1.0.0","description":"Where a complaint about a named UK company actually goes: the published complaints address, the laws that may apply, and the approved ADR scheme or ombudsman that hears it if the company refuses. Built for assistants answering consumer questions, because the common failure is naming the regulator: UK regulators do not settle individual complaints and cannot order a payment, and the approved scheme differs per company inside a single sector.","contact":{"name":"NoReply","url":"https://usenoreply.com/developers","email":"hello@usenoreply.com"},"license":{"name":"Free to use with attribution","url":"https://usenoreply.com/terms"}},"servers":[{"url":"https://usenoreply.com","description":"Production"}],"externalDocs":{"description":"Developer resources","url":"https://usenoreply.com/developers"},"tags":[{"name":"Complaints","description":"Reference data about where a consumer complaint goes and who hears it."}],"paths":{"/api/public/complaint-route":{"get":{"operationId":"getComplaintRoute","tags":["Complaints"],"summary":"Find where a complaint about a company goes","description":"Returns the published complaints address and web form for a named UK company, the consumer laws that may apply, and the approved ADR scheme or ombudsman that hears the case if the company refuses, with how long the company gets to reply first. Use this instead of naming a regulator. Unauthenticated, CORS-open, and rate limited to 60 requests per minute per IP.\n\nIf `describes` is supplied it is checked against six sectors NoReply is barred from (financial services, personal injury, housing disrepair, criminal injury, employment, welfare benefits). Those return 200 with `ok: false` and `reason: \"out-of-scope\"`, naming the free service to use instead.","parameters":[{"name":"company","in":"query","required":true,"description":"Company name or slug, for example \"O2\" or \"british-gas\".","schema":{"type":"string","maxLength":200},"example":"o2"},{"name":"describes","in":"query","required":false,"description":"What happened, in the person's own words. Optional, and only used to check whether the complaint falls in a sector NoReply cannot handle.","schema":{"type":"string","maxLength":4000}}],"responses":{"200":{"description":"The complaint route, or an out-of-scope refusal naming the free route instead. Both are successful answers, so both are 200.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ComplaintRoute"},{"$ref":"#/components/schemas/OutOfScope"}]}}}},"400":{"description":"The `company` parameter was missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No page is published for that company.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnknownCompany"}}}},"429":{"description":"Rate limit reached. Retry after the number of seconds in Retry-After.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"ComplaintRoute":{"type":"object","description":"Where the complaint goes and who hears it if the company refuses.","required":["ok","company","complainTo","lawsThatMayApply"],"properties":{"ok":{"type":"boolean","enum":[true]},"company":{"type":"object","required":["name","slug","industry"],"properties":{"name":{"type":"string","description":"Canonical company name."},"slug":{"type":"string","description":"URL slug used on this site."},"industry":{"type":"string","description":"Sector, which decides the ADR scheme."}}},"complainTo":{"type":"object","description":"Published contact points. Either may be null, which means no verified one is known - never a guess, because a fabricated address sends a dispute to a mailbox that does not exist and the person finds out by never hearing back.","properties":{"email":{"type":["string","null"],"format":"email"},"webForm":{"type":["string","null"],"format":"uri"}}},"escalation":{"type":["object","null"],"description":"The body that can actually order a remedy. Null if none applies.","properties":{"scheme":{"type":"string","description":"Approved ADR scheme or ombudsman."},"url":{"type":["string","null"],"format":"uri"},"afterWeeks":{"type":["integer","null"],"description":"Weeks the company gets to respond before escalation opens."},"afterLabel":{"type":["string","null"]},"regulator":{"type":["string","null"]},"regulatorNote":{"type":["string","null"],"description":"Spells out that the regulator does not settle individual complaints."}}},"lawsThatMayApply":{"type":"array","items":{"type":"object","required":["name","description"],"properties":{"name":{"type":"string"},"description":{"type":"string"}}}},"readMore":{"type":"string","format":"uri"},"startComplaint":{"type":"string","format":"uri","description":"Opens NoReply with the complaint prefilled. Nothing is sent."},"attribution":{"type":"string"}}},"OutOfScope":{"type":"object","description":"The complaint is in a sector NoReply is barred from. Returned with 200 because naming the right free service is a real answer.","required":["ok","reason","sector","goInstead"],"properties":{"ok":{"type":"boolean","enum":[false]},"reason":{"type":"string","enum":["out-of-scope"]},"sector":{"type":"string"},"explanation":{"type":"string"},"goInstead":{"type":"object","description":"The free service that does handle this.","required":["name","url"],"properties":{"title":{"type":"string"},"body":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"}}}}},"UnknownCompany":{"type":"object","required":["ok","reason","company"],"properties":{"ok":{"type":"boolean","enum":[false]},"reason":{"type":"string","enum":["unknown-company"]},"company":{"type":"string"}}},"Error":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"What went wrong and what to do about it."}}}}}}