{"openapi":"3.0.3","info":{"title":"Liater Public API","version":"1.0.0","description":"Public API for Empire OEM partners + Maison custom integrations. See PARTNER-KIT.md in the SDK package for onboarding.","contact":{"name":"Liater Partners","email":"partners@liater.io","url":"https://liater.io"},"license":{"name":"Proprietary"}},"servers":[{"url":"https://liater.io","description":"Production"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"lk_live_xxx or lk_test_xxx"}},"schemas":{"Error":{"type":"object","properties":{"ok":{"type":"boolean","example":false},"error":{"type":"string","example":"Invalid payload"},"code":{"type":"string","example":"idempotency_in_progress"}},"required":["ok","error"]},"ConnectorAction":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["tag_client","task","next_appointment","wishlist_add","send_email","send_whatsapp","sfmc_journey","cegid_alert","add_to_list","set_reminder","webhook"]},"clientId":{"type":"string","minLength":1,"maxLength":120},"generatedAt":{"type":"string","format":"date-time"},"advisorId":{"type":"string","minLength":1,"maxLength":80},"payload":{"type":"object","additionalProperties":true}},"required":["id","type","clientId"]},"ActionResult":{"type":"object","properties":{"instanceName":{"type":"string"},"ok":{"type":"boolean"},"remoteId":{"type":"string"},"durationMs":{"type":"integer","minimum":0},"error":{"type":"string"},"retryable":{"type":"boolean"}},"required":["instanceName","ok"]},"ActionPushResponse":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"actionId":{"type":"string","format":"uuid"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ActionResult"}}},"required":["ok","actionId","results"]},"ApiVersion":{"type":"object","properties":{"name":{"type":"string","example":"v1"},"status":{"type":"string","enum":["stable","deprecated","sunset"]},"gaSince":{"type":"string","format":"date"},"deprecatedSince":{"type":"string","format":"date"},"sunsetAt":{"type":"string","format":"date"},"successor":{"type":"string"}}}}},"security":[{"bearerAuth":[]}],"paths":{"/v1/health":{"get":{"summary":"Liveness probe","description":"No auth required · use for SDK ping and uptime checks","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"version":{"type":"string"},"service":{"type":"string"},"release":{"type":"string"},"region":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}}}}}}}}},"/v1/versions":{"get":{"summary":"List API versions and deprecation status","description":"No auth required · used by SDKs to surface deprecations","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"versions":{"type":"array","items":{"$ref":"#/components/schemas/ApiVersion"}}}}}}}}}},"/v1/actions":{"post":{"summary":"Push a clienteling action through the connector chain","description":"Routed to all connectors configured for the Maison this API key belongs to.","parameters":[{"in":"header","name":"Idempotency-Key","required":false,"description":"Optional · safe-retry across the same key. UUID recommended.","schema":{"type":"string","maxLength":200}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorAction"}}}},"responses":{"200":{"description":"Action accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionPushResponse"}}}},"400":{"description":"Invalid payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key"},"409":{"description":"Idempotency key reuse with a different body, or the original request is still processing","headers":{"Retry-After":{"description":"Present while the original request is processing","schema":{"type":"integer","minimum":1}}}},"422":{"description":"No active connector binding for this API key owner","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}}}}