{"info":{"contact":{"name":"The Office File","url":"https://theofficefile.com/contact/"},"description":"The only API on The Office File. Two form endpoints that send a message to the site team, and a health check. No authentication, no API key, no accounts. Requests are JSON. Both form endpoints accept a honeypot field named website, which must be left empty; a filled honeypot returns success without sending anything.","title":"The Office File API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/api/contact":{"post":{"description":"Sends a message to contact@theofficefile.com. The sender email is used as the reply-to address.","requestBody":{"content":{"application/json":{"schema":{"properties":{"email":{"description":"Sender email address, used as the reply-to address.","format":"email","maxLength":254,"type":"string"},"message":{"description":"The message.","maxLength":5000,"type":"string"},"name":{"description":"Sender name.","maxLength":100,"type":"string"},"topic":{"description":"What the message is about.","enum":["template-request","template-error","download-problem","privacy-or-legal","other"],"maxLength":50,"type":"string"},"website":{"description":"Honeypot. Leave empty. A filled value returns success without sending anything.","type":"string"}},"required":["name","email","topic","message"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"ok":{"example":true,"type":"boolean"}},"type":"object"}}},"description":"Message sent."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"example":"All fields are required.","type":"string"},"ok":{"example":false,"type":"boolean"}},"type":"object"}}},"description":"Validation failed. The response body names the problem."},"500":{"content":{"application/json":{"schema":{"properties":{"error":{"example":"Could not send the message. Please try again.","type":"string"},"ok":{"example":false,"type":"boolean"}},"type":"object"}}},"description":"The message could not be sent."}},"summary":"Send a contact message"}},"/api/health":{"get":{"description":"Returns 200 with {\"ok\": true} when the API is up.","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"ok":{"example":true,"type":"boolean"}},"type":"object"}}},"description":"The API is up."}},"summary":"Health check"}},"/api/request-template":{"post":{"description":"Sends a template request to templates@theofficefile.com. Only the task is required. The email is optional and is used as the reply-to address when given.","requestBody":{"content":{"application/json":{"schema":{"properties":{"details":{"description":"What the document should cover and who uses it. Optional.","maxLength":5000,"type":"string"},"email":{"description":"Requester email address, used as the reply-to address. Optional.","format":"email","maxLength":254,"type":"string"},"role":{"description":"The requester role, for example Office Manager. Optional.","maxLength":100,"type":"string"},"task":{"description":"The template or task needed. Required.","maxLength":200,"type":"string"},"website":{"description":"Honeypot. Leave empty. A filled value returns success without sending anything.","type":"string"}},"required":["task"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"ok":{"example":true,"type":"boolean"}},"type":"object"}}},"description":"Request sent."},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"example":"Please tell us which template or task you need.","type":"string"},"ok":{"example":false,"type":"boolean"}},"type":"object"}}},"description":"Validation failed. The response body names the problem."},"500":{"content":{"application/json":{"schema":{"properties":{"error":{"example":"Could not send the request. Please try again.","type":"string"},"ok":{"example":false,"type":"boolean"}},"type":"object"}}},"description":"The request could not be sent."}},"summary":"Request a template"}}},"servers":[{"url":"https://theofficefile.com"}]}