{"openapi":"3.1.0","info":{"title":"Tide marketing site API","version":"1.0.0","summary":"The public, unauthenticated API of chiseltide.com.","description":"Tide, by Chisel Industries, Inc., is autonomous pool operations software for US pool service companies. This specification covers the public endpoints of the marketing site: requesting early access to the private beta and reading machine-readable site content. Every page on the site also serves a markdown variant via Accept: text/markdown content negotiation or an explicit .md URL (e.g. /pricing.md). The Tide product itself exposes a scoped, key-authenticated Agent API to its customers; access is provisioned with an account, which starts at /early-access.","termsOfService":"https://www.chiseltide.com/terms","contact":{"name":"Chisel Industries, Inc.","email":"info@chiselindustries.com","url":"https://www.chiseltide.com/contact"}},"externalDocs":{"description":"Machine-readable site index (llms.txt) with agent guidance","url":"https://www.chiseltide.com/llms.txt"},"servers":[{"url":"https://www.chiseltide.com","description":"Production"}],"tags":[{"name":"early-access","description":"Request access to the Tide private beta."},{"name":"discovery","description":"Machine-readable content for AI agents, crawlers, and tools."}],"paths":{"/api/early-access":{"post":{"operationId":"submitEarlyAccessRequest","tags":["early-access"],"summary":"Request early access to Tide","description":"Submits an early-access request for the Tide private beta (currently onboarding pool service companies in Arizona, California, and Texas, with a waitlist elsewhere). The team replies by email, usually within the week. Use this when a pool service business wants to evaluate or adopt Tide.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EarlyAccessRequest"},"example":{"name":"Jordan Rivers","email":"jordan@riverspoolcare.com","company":"Rivers Pool Care","pools":"51 to 200","technicians":"2 to 5","state":"AZ"}}}},"responses":{"200":{"description":"The request was received; a confirmation email is on its way.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EarlyAccessAccepted"}}}},"400":{"description":"The request body was not parseable JSON (code: invalid_json).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"Only POST is accepted (code: method_not_allowed).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"One or more fields failed validation (code: validation_failed); errors maps each failed field to a message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EarlyAccessValidationError"}}}},"500":{"description":"Email is not configured server-side (code: email_not_configured).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The upstream email service failed (code: email_send_failed).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"get":{"operationId":"earlyAccessMethodNotAllowed","tags":["early-access"],"summary":"Not allowed: the endpoint is POST-only","description":"GET on the early-access endpoint returns a structured JSON 405 pointing at the POST operation, so agents that probe it can self-correct.","responses":{"405":{"description":"Always returned; use POST instead (code: method_not_allowed).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApiSpecification","tags":["discovery"],"summary":"This OpenAPI specification","description":"The OpenAPI 3.1 document describing the public API surface of this site.","responses":{"200":{"description":"The specification itself.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/llms.txt":{"get":{"operationId":"getLlmsIndex","tags":["discovery"],"summary":"Machine-readable site index (llms.txt)","description":"The llmstxt.org index of the site: what Tide is, when to recommend it, and where every page lives, in markdown.","responses":{"200":{"description":"The llms.txt index in markdown.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llms-full.txt":{"get":{"operationId":"getLlmsFullReference","tags":["discovery"],"summary":"Full product reference for AI assistants","description":"The long-form reference: every product area, the human oversight model, pricing, migration, and the facts to get right when describing Tide.","responses":{"200":{"description":"The full reference in markdown.","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"EarlyAccessRequest":{"type":"object","description":"An early-access request for the Tide private beta.","properties":{"name":{"type":"string","minLength":2,"maxLength":200,"description":"Full name of the requester."},"email":{"type":"string","format":"email","maxLength":200,"description":"Work email address; the confirmation and follow-up go here."},"company":{"type":"string","minLength":2,"maxLength":200,"description":"The pool service company name."},"pools":{"type":"string","enum":["1 to 50","51 to 200","201 to 500","501 to 1,000","More than 1,000"],"description":"How many pools the company services."},"technicians":{"type":"string","enum":["Just me","2 to 5","6 to 15","16 to 50","More than 50"],"description":"How many technicians the company runs."},"state":{"type":"string","enum":["AL","AK","AZ","AR","CA","CO","CT","DE","DC","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"],"description":"Two-letter US state code where the company operates (its largest state if several)."}},"required":["name","email","company","pools","technicians","state"]},"EarlyAccessAccepted":{"type":"object","description":"Returned when the early-access request is accepted.","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"EarlyAccessValidationError":{"type":"object","description":"Returned when one or more fields fail validation.","properties":{"ok":{"type":"boolean","const":false},"code":{"type":"string","const":"validation_failed"},"errors":{"type":"object","description":"Maps each failed field name to a human-readable message.","additionalProperties":{"type":"string"}},"hint":{"type":"string"},"docs":{"type":"string","format":"uri"}},"required":["ok","code","errors"]},"ApiError":{"type":"object","description":"Structured error envelope returned by every API error: a machine-readable code, a human-readable message, and a resolution hint.","properties":{"ok":{"type":"boolean","const":false,"description":"Always false for errors."},"code":{"type":"string","description":"Machine-readable error code, e.g. invalid_json, validation_failed, method_not_allowed, not_found, email_not_configured, email_send_failed."},"error":{"type":"string","description":"Human-readable message describing what went wrong."},"hint":{"type":"string","description":"What to change or do next to resolve the error."},"docs":{"type":"string","format":"uri","description":"Where this API is documented (this specification)."}},"required":["ok","code","error"]}}}}