{"openapi":"3.1.0","info":{"title":"SUED API","version":"1.0.0-beta.1","description":"Independent multi-tenant WhatsApp automation API. Bearer authorization, isolated sessions, queued messages, signed webhooks and auditable operations. Beta: requires validation using an actual paired WhatsApp account before commercial release.","contact":{"url":"https://suedapi.com.br"}},"servers":[{"url":"https://suedapi.com.br","description":"Production HTTPS gateway"}],"tags":[{"name":"Health"},{"name":"Identity"},{"name":"Workspaces"},{"name":"Instances"},{"name":"Messages"},{"name":"Contacts"},{"name":"Groups"},{"name":"Presence"},{"name":"Profile"},{"name":"WhatsApp Actions"},{"name":"Webhooks"},{"name":"API Keys"}],"security":[{"bearerAuth":[]}],"paths":{"/api/health/live":{"get":{"tags":["Health"],"summary":"Live process status","operationId":"healthLive","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}},"security":[]}},"/api/health/ready":{"get":{"tags":["Health"],"summary":"Ready and data store accessible","operationId":"healthReady","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}},"security":[]}},"/api/me":{"get":{"tags":["Identity"],"summary":"Authenticated caller","operationId":"getMe","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/workspaces":{"get":{"tags":["Workspaces"],"summary":"Workspaces the caller can access","operationId":"listWorkspaces","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}},"post":{"tags":["Workspaces"],"summary":"Create tenant workspace","operationId":"createWorkspace","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInput"}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/workspaces/{workspaceId}":{"get":{"tags":["Workspaces"],"summary":"Get workspace","operationId":"getWorkspace","parameters":[{"name":"workspaceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/workspaces/{workspaceId}/metrics":{"get":{"tags":["Workspaces"],"summary":"Tenant-scoped aggregate operational metrics, without customer or message content","operationId":"getWorkspaceMetrics","parameters":[{"name":"workspaceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/workspaces/{workspaceId}/activity":{"get":{"tags":["Workspaces"],"summary":"Tenant-scoped sanitized operational activity, without customer or message content","operationId":"getWorkspaceActivity","parameters":[{"name":"workspaceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"before","in":"query","required":false,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances":{"get":{"tags":["Instances"],"summary":"List authorized instances","operationId":"listInstances","parameters":[{"name":"workspaceId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}},"post":{"tags":["Instances"],"summary":"Provision a tenant-scoped instance; API keys require an Idempotency-Key and instances:write scope","operationId":"createInstance","parameters":[{"name":"idempotency-key","in":"header","required":false,"description":"Required for API key provision; repeating the same key and body returns HTTP 200 without duplication.","schema":{"type":"string","minLength":12,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceInput"}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}":{"get":{"tags":["Instances"],"summary":"Get instance","operationId":"getInstance","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}},"patch":{"tags":["Instances"],"summary":"Rename instance","operationId":"renameInstance","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenameInput"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}},"delete":{"tags":["Instances"],"summary":"Archive instance safely","operationId":"deleteInstance","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/connect":{"post":{"tags":["Instances"],"summary":"Queue WhatsApp connection","operationId":"connectInstance","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/pairing-code":{"post":{"tags":["Instances"],"summary":"Request device pairing code; poll returned operation id within 2 minutes","operationId":"requestPairingCode","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PairingInput"}}}},"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/disconnect":{"post":{"tags":["Instances"],"summary":"Disconnect the isolated WhatsApp socket","operationId":"disconnectInstance","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/restart":{"post":{"tags":["Instances"],"summary":"Restart dedicated socket","operationId":"restartInstance","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/status":{"get":{"tags":["Instances"],"summary":"Connection state","operationId":"getInstanceStatus","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/qr":{"get":{"tags":["Instances"],"summary":"Get short-lived WhatsApp QR","operationId":"getInstanceQr","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/webhook":{"get":{"tags":["Webhooks"],"summary":"Read target without revealing secret","operationId":"getWebhook","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}},"put":{"tags":["Webhooks"],"summary":"Configure signed HTTPS delivery","operationId":"putWebhook","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookInput"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}},"delete":{"tags":["Webhooks"],"summary":"Disable target and cancel pending deliveries","operationId":"deleteWebhook","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/webhook/test":{"post":{"tags":["Webhooks"],"summary":"Queue a signed test event","operationId":"testWebhook","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/webhook-deliveries":{"get":{"tags":["Webhooks"],"summary":"List delivery attempts and HTTP status","operationId":"listWebhookDeliveries","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/webhook-deliveries/{deliveryId}/replay":{"post":{"tags":["Webhooks"],"summary":"Replay dead delivery with new event ID","operationId":"replayWebhook","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"deliveryId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/messages":{"get":{"tags":["Messages"],"summary":"List outbound message queue","operationId":"listMessages","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}},"post":{"tags":["Messages"],"summary":"Queue idempotent outbound text","operationId":"queueMessage","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"idempotency-key","in":"header","required":true,"schema":{"type":"string","minLength":12,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageInput"}}}},"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/messages/{messageId}":{"get":{"tags":["Messages"],"summary":"Get outbound message status","operationId":"getMessage","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"messageId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/inbox":{"get":{"tags":["Messages"],"summary":"Read scoped inbound messages","operationId":"listInbox","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/actions":{"post":{"tags":["WhatsApp Actions"],"summary":"Queue a scoped contact, group, presence or profile action","operationId":"queueAction","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionInput"}}}},"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/operations/{operationId}":{"get":{"tags":["WhatsApp Actions"],"summary":"Poll an asynchronous WhatsApp action","operationId":"getOperation","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"operationId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/contacts/{phone}/registered":{"get":{"tags":["Contacts"],"summary":"Asynchronous number registration check","operationId":"checkNumber","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"phone","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/contacts/{phone}/profile":{"get":{"tags":["Contacts"],"summary":"Asynchronous contact profile lookup","operationId":"getContactProfile","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"phone","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/groups":{"get":{"tags":["Groups"],"summary":"Asynchronously list joined groups","operationId":"listGroups","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}},"post":{"tags":["Groups"],"summary":"Create a group","operationId":"createGroup","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupInput"}}}},"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/groups/{groupId}":{"get":{"tags":["Groups"],"summary":"Asynchronously read group summary","operationId":"getGroup","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"groupId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/groups/{groupId}/participants":{"patch":{"tags":["Groups"],"summary":"Change group participants","operationId":"patchGroupParticipants","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"groupId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupParticipantsInput"}}}},"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/presence":{"post":{"tags":["Presence"],"summary":"Send presence update","operationId":"sendPresence","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresenceInput"}}}},"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/instances/{instanceId}/profile":{"patch":{"tags":["Profile"],"summary":"Update own WhatsApp name or status","operationId":"updateProfile","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/workspaces/{workspaceId}/api-keys":{"get":{"tags":["API Keys"],"summary":"List keys without secrets","operationId":"listApiKeys","parameters":[{"name":"workspaceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}},"post":{"tags":["API Keys"],"summary":"Create a 90-day scoped API key; secret shown once","operationId":"createApiKey","parameters":[{"name":"workspaceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyInput"}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}},"/api/workspaces/{workspaceId}/api-keys/{keyId}":{"patch":{"tags":["API Keys"],"summary":"Rename API key","operationId":"renameApiKey","parameters":[{"name":"workspaceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"keyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenameInput"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}},"delete":{"tags":["API Keys"],"summary":"Revoke key immediately","operationId":"revokeApiKey","parameters":[{"name":"workspaceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"keyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid bearer token"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"409":{"description":"Conflict"},"429":{"description":"Rate limit"},"503":{"description":"Dependency unavailable"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT or sued_live key","description":"Use SUED project JWT or a scoped sued_live_* API key in Authorization: Bearer. Do not put secrets in URLs."}},"schemas":{"Envelope":{"type":"object","required":["data"],"properties":{"data":{"description":"Endpoint-specific response payload"},"pagination":{"type":"object"}}},"InstanceInput":{"type":"object","required":["name"],"additionalProperties":false,"description":"JWT users must supply workspaceId; an API key derives it from the key and rejects a different workspaceId. Provisioning via API key is limited to the configured beta instance quota.","properties":{"workspaceId":{"type":"string","description":"SUED workspace UUID","format":"uuid"},"name":{"type":"string","description":"Instance friendly name","minLength":1,"maxLength":80},"provider":{"type":"string","enum":["baileys"]}}},"WorkspaceInput":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","description":"Workspace display name","minLength":2,"maxLength":120}}},"RenameInput":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":80}}},"MessageInput":{"type":"object","required":["to","type"],"additionalProperties":true,"description":"Text, media, contact, location and reaction are supported. Image/video/audio/document require public HTTPS media URLs; only approved MIME types and sizes are accepted.","properties":{"to":{"type":"string","pattern":"^[1-9][0-9]{7,14}$"},"type":{"type":"string","enum":["text","image","video","audio","document","location","contact","reaction"]},"text":{"type":"string","maxLength":4096},"url":{"type":"string","format":"uri","pattern":"^https://"},"caption":{"type":"string","maxLength":1024},"fileName":{"type":"string","maxLength":100},"latitude":{"type":"number"},"longitude":{"type":"number"},"vcard":{"type":"string"},"displayName":{"type":"string"},"messageId":{"type":"string"},"reaction":{"type":"string"}}},"TextMessageInput":{"type":"object","required":["to","type","text"],"additionalProperties":false,"properties":{"to":{"type":"string","description":"E.164 phone digits only","pattern":"^[1-9][0-9]{7,14}$"},"type":{"const":"text"},"text":{"type":"string","minLength":1,"maxLength":4096}}},"WebhookInput":{"type":"object","required":["url","enabled","events"],"additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","pattern":"^https://","maxLength":2048},"secret":{"type":"string","minLength":16,"maxLength":200,"description":"Write-only HMAC secret"},"enabled":{"type":"boolean"},"events":{"type":"array","items":{"type":"string"},"maxItems":14}}},"ActionInput":{"type":"object","required":["action","data"],"properties":{"action":{"type":"string","enum":["contact.check","contact.profile","groups.list","groups.info","groups.create","groups.participants","presence.set","profile.set_name","profile.set_status","pairing.request"]},"data":{"type":"object"}}},"PairingInput":{"type":"object","required":["phoneNumber"],"additionalProperties":false,"properties":{"phoneNumber":{"type":"string","pattern":"^[1-9][0-9]{7,14}$"}}},"GroupInput":{"type":"object","required":["subject","participants"],"properties":{"subject":{"type":"string","maxLength":100},"participants":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":15}}},"GroupParticipantsInput":{"type":"object","required":["action","participants"],"properties":{"action":{"type":"string","enum":["add","remove","promote","demote"]},"participants":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":20}}},"PresenceInput":{"type":"object","required":["phone","presence"],"properties":{"phone":{"type":"string"},"presence":{"type":"string","enum":["available","unavailable","composing","recording","paused"]}}},"ApiKeyInput":{"type":"object","required":["name","scopes"],"additionalProperties":false,"properties":{"name":{"type":"string","minLength":2,"maxLength":90},"scopes":{"type":"array","items":{"type":"string","enum":["workspace:read","metrics:read","activity:read","instances:read","instances:write","messages:read","messages:send","webhooks:read","webhooks:write","contacts:read","groups:read","groups:write","presence:write","profile:write"]}}}}}}}