{"openapi":"3.1.0","info":{"title":"Bell Strategic","version":"1.0.0","description":"Public company, services and case studies; secured Diagnostic submission. No private records can be read."},"servers":[{"url":"https://bellstrategic.com"}],"paths":{"/api/v1/company":{"get":{"operationId":"getCompany","responses":{"200":{"description":"Public information.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"description":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"email":{"type":"string","format":"email"},"founder":{"type":"string"},"instagram":{"type":"string","format":"uri"},"linkedin":{"type":"string","format":"uri"}},"required":["name","description","city","state","email","founder","instagram","linkedin"]}}}},"405":{"description":"Generic error; no internal details or submitted data.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/api/v1/services":{"get":{"operationId":"listServices","responses":{"200":{"description":"Public information.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name","description"]}}}}},"405":{"description":"Generic error; no internal details or submitted data.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/api/v1/case-studies":{"get":{"operationId":"listCaseStudies","responses":{"200":{"description":"Public information.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"slug":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string"},"category":{"type":"string"},"client":{"type":"string"},"year":{"type":"string"},"concept":{"type":"boolean"},"intro":{"type":"string"},"problem":{"type":"string"},"idea":{"type":"string"},"how":{"type":"array","items":{"type":"string"}},"url":{"type":"string","format":"uri"},"image":{"type":"string","format":"uri"},"link":{"type":"string","format":"uri"}},"required":["slug","title","subtitle","category","client","year","concept","intro","problem","idea","how","url"]}}}}},"405":{"description":"Generic error; no internal details or submitted data.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/api/v1/case-studies/{slug}":{"get":{"operationId":"getCaseStudy","responses":{"200":{"description":"Public information.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"slug":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string"},"category":{"type":"string"},"client":{"type":"string"},"year":{"type":"string"},"concept":{"type":"boolean"},"intro":{"type":"string"},"problem":{"type":"string"},"idea":{"type":"string"},"how":{"type":"array","items":{"type":"string"}},"url":{"type":"string","format":"uri"},"image":{"type":"string","format":"uri"},"link":{"type":"string","format":"uri"}},"required":["slug","title","subtitle","category","client","year","concept","intro","problem","idea","how","url"]}}}},"404":{"description":"Generic error; no internal details or submitted data.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"405":{"description":"Generic error; no internal details or submitted data.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"}}]}},"/api/v1/diagnostic-requests":{"post":{"operationId":"requestDiagnostic","description":"JSON only; maximum 16384 bytes. Unknown fields rejected. Existing honeypot and shared rolling five submissions per IP per ten minutes apply. Honeypots return success without saving. A saved request remains successful if the alert fails. No submitted fields or record IDs are returned.","x-max-body-bytes":16384,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"email":{"type":"string","maxLength":320,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"business_name":{"type":"string","minLength":1,"maxLength":150},"website":{"type":"string","maxLength":2048},"instagram":{"type":"string","maxLength":255},"city":{"type":"string","minLength":1,"maxLength":150},"industry":{"type":"string","enum":["Restaurant / Bar / Nightlife","Hospitality Group","Music / Artist","Sports / Entertainment","Retail / Consumer Brand","Other"]},"monthly_marketing_spend":{"type":"string","enum":["Under $2,500","$2,500–$5,000","$5,000–$10,000","$10,000+","Not sure"]},"improvement_goal":{"type":"string","minLength":1,"maxLength":1000},"utm_source":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}]},"utm_medium":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}]},"utm_campaign":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}]},"utm_content":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}]},"utm_term":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}]},"page_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}]},"referrer":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}]},"company_site":{"default":"","type":"string","maxLength":2048}},"required":["name","email","business_name","website","instagram","city","industry","monthly_marketing_spend","improvement_goal"],"additionalProperties":false}}}},"responses":{"200":{"description":"Request received; no record details.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"success":{"const":true,"type":"boolean"}},"required":["success"]}}}},"400":{"description":"Generic error; no internal details or submitted data.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"405":{"description":"Generic error; no internal details or submitted data.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"413":{"description":"Generic error; no internal details or submitted data.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"415":{"description":"Generic error; no internal details or submitted data.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Generic error; no internal details or submitted data.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Generic error; no internal details or submitted data.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}}}