{"openapi":"3.1.0","info":{"title":"Project Blue marketing site","summary":"Unauthenticated helpers on www.tryprojectblue.com. Product REST lives on api.tryprojectblue.com.","description":"Marketing-site helpers for Project Blue (lead capture and demo booking).\n\nThe product API — send iMessage/SMS, Workflows, FaceTime Audio, MCP — is documented at https://api.tryprojectblue.com/openapi.json. Do not call those routes on this host.\n\n- Product API: https://api.tryprojectblue.com\n- Product docs: https://api.tryprojectblue.com\n- MCP: https://api.tryprojectblue.com/api/mcp\n- Developers: https://www.tryprojectblue.com/developers\n- OAuth issuer: https://app.tryprojectblue.com","version":"1.0.0","contact":{"name":"Project Blue","url":"https://www.tryprojectblue.com/contact","email":"sales@tryprojectblue.com"}},"jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","servers":[{"url":"https://www.tryprojectblue.com","description":"Project Blue marketing site"}],"tags":[{"name":"Site","description":"Unauthenticated marketing-site helpers."}],"paths":{"/api/status":{"get":{"operationId":"getMarketingSiteStatus","tags":["Site"],"summary":"Marketing site health","description":"Unauthenticated liveness check for the Project Blue marketing site. Confirms the origin is up; it is not a product-API status probe.","security":[],"responses":{"200":{"description":"The site is up.","content":{"application/json":{"schema":{"type":"object","required":["ok","service"],"properties":{"ok":{"type":"boolean"},"service":{"type":"string"},"docs":{"type":"string","format":"uri"}}}}}}}}},"/api/lead":{"post":{"operationId":"createMarketingLead","tags":["Site"],"summary":"Capture a marketing lead","description":"Unauthenticated. Creates or updates a CRM contact from a website form (homepage popup, pricing, or get-started quiz). Phone-only submits without a valid email are accepted but skipped so demo booking is not blocked.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"source":{"type":"string"},"website":{"type":"string"},"crm":{"type":"string"},"revenue":{"type":"string"},"role":{"type":"string"},"attribution":{"type":"object","additionalProperties":true}}}}}},"responses":{"200":{"description":"Lead stored, or skipped because no email was present.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"skipped":{"type":"boolean"}}}}}},"400":{"description":"The request was well-formed but failed validation.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}},"404":{"description":"The resource does not exist.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}},"405":{"description":"HTTP method not allowed.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}},"409":{"description":"Conflict — for example a calendar slot was already taken.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}},"502":{"description":"Upstream provider failed. Retry with backoff.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}}}}},"/api/quiz/slots":{"get":{"operationId":"listDemoSlots","tags":["Site"],"summary":"List demo booking slots","description":"Unauthenticated. Returns open calendar slots for a Project Blue demo. Pass a valid IANA timezone as the `timezone` query parameter.","security":[],"parameters":[{"name":"timezone","in":"query","required":true,"description":"IANA timezone, e.g. America/Los_Angeles.","schema":{"type":"string"}}],"responses":{"200":{"description":"Available days and slots.","content":{"application/json":{"schema":{"type":"object","properties":{"timezone":{"type":"string"},"days":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}},"400":{"description":"The request was well-formed but failed validation.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}},"404":{"description":"The resource does not exist.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}},"405":{"description":"HTTP method not allowed.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}},"409":{"description":"Conflict — for example a calendar slot was already taken.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}},"502":{"description":"Upstream provider failed. Retry with backoff.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}}}}},"/api/quiz/book":{"post":{"operationId":"bookDemoSlot","tags":["Site"],"summary":"Book a demo slot","description":"Unauthenticated. Creates a CRM contact and books the selected demo slot. Returns 409 when the slot was taken.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","email","phone","startTime","timezone"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"startTime":{"type":"string","format":"date-time"},"timezone":{"type":"string"},"website":{"type":"string"},"crm":{"type":"string"},"revenue":{"type":"string"},"role":{"type":"string"},"attribution":{"type":"object","additionalProperties":true}}}}}},"responses":{"200":{"description":"Appointment created.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"appointmentId":{"type":"string"}}}}}},"400":{"description":"The request was well-formed but failed validation.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}},"404":{"description":"The resource does not exist.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}},"405":{"description":"HTTP method not allowed.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}},"409":{"description":"Conflict — for example a calendar slot was already taken.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}},"502":{"description":"Upstream provider failed. Retry with backoff.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}}}}}}},"components":{"schemas":{"ApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","examples":["invalid_request"]},"message":{"type":"string"},"hint":{"type":"string"}}}}}}},"externalDocs":{"description":"Project Blue product OpenAPI (api.tryprojectblue.com)","url":"https://api.tryprojectblue.com/openapi.json"}}