{"openapi":"3.1.0","info":{"title":"OmniManager Public API","version":"1","description":"Programmatic access to a tenant's OmniManager account: shops, WhatsApp connection and sending, statuses, groups, and consent management, with the platform's anti-ban policy enforced on every send. See /docs/messaging-policy for the full policy reference — it cannot be expressed as a schema."},"servers":[{"url":"https://console.omni-manager.com/api/v1"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","description":"omk_live_… — also accepted as the `x-api-key` header."}}},"x-permissions":[{"permission":"shops.read","label":"Lire les boutiques"},{"permission":"shops.write","label":"Créer des boutiques"},{"permission":"whatsapp.read","label":"Voir l'état WhatsApp"},{"permission":"whatsapp.connect","label":"Connecter / déconnecter WhatsApp"},{"permission":"messages.send","label":"Envoyer des messages"},{"permission":"messages.read","label":"Lire l'état des messages"},{"permission":"statuses.post","label":"Publier des statuts WhatsApp"},{"permission":"contacts.read","label":"Lire les contacts déclarés"},{"permission":"contacts.write","label":"Déclarer / retirer des contacts"},{"permission":"groups.read","label":"Lire les groupes WhatsApp"}],"paths":{"/me":{"get":{"summary":"Identify the calling key, tenant and remaining quota.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]}},"/shops":{"get":{"summary":"List the tenant's shops.","x-required-permission":"shops.read","description":"Requires permission `shops.read` (Lire les boutiques).","parameters":[{"name":"page","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]},"post":{"summary":"Create a shop.","x-required-permission":"shops.write","description":"Requires permission `shops.write` (Créer des boutiques).","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"phone":{"type":"string","maxLength":32}},"required":["name"],"additionalProperties":false}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]}},"/shops/{idOrName}":{"get":{"summary":"Get one shop by id or exact name.","x-required-permission":"shops.read","description":"Requires permission `shops.read` (Lire les boutiques).","parameters":[{"name":"idOrName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]}},"/shops/{idOrName}/channels/whatsapp":{"get":{"summary":"Get the shop's WhatsApp channel state.","x-required-permission":"whatsapp.read","description":"Requires permission `whatsapp.read` (Voir l'état WhatsApp).","parameters":[{"name":"idOrName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]}},"/shops/{idOrName}/channels/whatsapp/connect":{"post":{"summary":"Start (or resume) the WhatsApp connection.","x-required-permission":"whatsapp.connect","description":"Requires permission `whatsapp.connect` (Connecter / déconnecter WhatsApp).","parameters":[{"name":"idOrName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]},"get":{"summary":"Poll the WhatsApp connection until connected.","x-required-permission":"whatsapp.connect","description":"Requires permission `whatsapp.connect` (Connecter / déconnecter WhatsApp).","parameters":[{"name":"idOrName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]}},"/shops/{idOrName}/channels/whatsapp/disconnect":{"post":{"summary":"Stop the shop's WhatsApp session.","x-required-permission":"whatsapp.connect","description":"Requires permission `whatsapp.connect` (Connecter / déconnecter WhatsApp).","parameters":[{"name":"idOrName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]}},"/shops/{idOrName}/messages":{"post":{"summary":"Send a WhatsApp message (subject to the anti-ban policy).","x-required-permission":"messages.send","description":"Requires permission `messages.send` (Envoyer des messages).","parameters":[{"name":"idOrName","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"channel":{"type":"string","const":"whatsapp"},"to":{"type":"string"},"text":{"type":"string","maxLength":4096},"mediaUrl":{"type":"string","maxLength":2048,"format":"uri"},"mediaType":{"default":"image","type":"string","enum":["image","video","document"]},"idempotencyKey":{"type":"string","minLength":1,"maxLength":128}},"required":["channel","to","mediaType"],"additionalProperties":false}}}},"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]},"get":{"summary":"List the shop's messages.","x-required-permission":"messages.read","description":"Requires permission `messages.read` (Lire l'état des messages).","parameters":[{"name":"idOrName","in":"path","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["queued","sending","sent","failed","rejected"]}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]}},"/messages/{id}":{"get":{"summary":"Get one message's delivery state.","x-required-permission":"messages.read","description":"Requires permission `messages.read` (Lire l'état des messages).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]}},"/shops/{idOrName}/statuses":{"post":{"summary":"Post a WhatsApp status.","x-required-permission":"statuses.post","description":"Requires permission `statuses.post` (Publier des statuts WhatsApp).","parameters":[{"name":"idOrName","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"caption":{"type":"string","maxLength":700},"mediaUrl":{"type":"string","maxLength":2048,"format":"uri"},"mediaType":{"default":"image","type":"string","enum":["image","video"]}},"required":["mediaType"],"additionalProperties":false}}}},"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]}},"/shops/{idOrName}/groups":{"get":{"summary":"List the shop's WhatsApp groups.","x-required-permission":"groups.read","description":"Requires permission `groups.read` (Lire les groupes WhatsApp).","parameters":[{"name":"idOrName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]}},"/shops/{idOrName}/contacts/consented":{"get":{"summary":"List declared (consented) contacts.","x-required-permission":"contacts.read","description":"Requires permission `contacts.read` (Lire les contacts déclarés).","parameters":[{"name":"idOrName","in":"path","required":true,"schema":{"type":"string"}},{"name":"activeOnly","in":"query","required":false,"schema":{"default":"true","type":"string","enum":["true","false"]}},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]},"post":{"summary":"Declare one or more consented contacts.","x-required-permission":"contacts.write","description":"Requires permission `contacts.write` (Déclarer / retirer des contacts).","parameters":[{"name":"idOrName","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"contacts":{"minItems":1,"type":"array","items":{"type":"object","properties":{"phone":{"type":"string"},"note":{"type":"string","maxLength":500},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["phone"],"additionalProperties":false}}},"required":["contacts"],"additionalProperties":false}}}},"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]},"delete":{"summary":"Revoke one consented contact.","x-required-permission":"contacts.write","description":"Requires permission `contacts.write` (Déclarer / retirer des contacts).","parameters":[{"name":"idOrName","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"phone":{"type":"string"}},"required":["phone"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"}},"required":["success","data"]}}}},"default":{"description":"Error — see the envelope's `error.code`","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"number"}},"required":["code","message"]}},"required":["success","error"]}}}}},"security":[{"ApiKeyAuth":[]}]}}}}