{"openapi":"3.1.0","info":{"title":"Chatbeep Public API","version":"v1","description":"Contrato publico do ecossistema Chatbeep para widget, mobile, health e webhooks."},"servers":[{"url":"https:\/\/chatbeep.app","description":"Aplicacao principal do Chatbeep"}],"externalDocs":{"description":"Portal de developers","url":"https:\/\/docs.chatbeep.app"},"tags":[{"name":"Health"},{"name":"Widget"},{"name":"Verification"},{"name":"Mobile"}],"paths":{"\/health":{"get":{"tags":["Health"],"summary":"Obter health report da plataforma","responses":{"200":{"description":"Infraestrutura operacional","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/HealthReport"}}}}}}},"\/api\/widget\/config\/{token}":{"get":{"tags":["Widget"],"summary":"Carregar configuracao do widget","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Configuracao entregue","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetConfigResponse"}}}}}}},"\/api\/widget\/installations\/{token}\/health":{"get":{"tags":["Widget"],"summary":"Obter saude e validade da instalacao","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}},{"name":"current_url","in":"query","required":false,"schema":{"type":"string","format":"uri"}}],"responses":{"200":{"description":"Saude da instalacao","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/InstallationHealthResponse"}}}}}}},"\/api\/widget\/ping":{"post":{"tags":["Widget"],"summary":"Registar heartbeat da instalacao","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetPingRequest"}}}},"responses":{"200":{"description":"Heartbeat aceite","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetPingResponse"}}}}}}},"\/api\/widget\/visitors":{"post":{"tags":["Widget"],"summary":"Criar ou atualizar visitante","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetVisitorRequest"}}}},"responses":{"200":{"description":"Visitante sincronizado","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetVisitorResponse"}}}},"201":{"description":"Visitante criado","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetVisitorResponse"}}}}}}},"\/api\/widget\/conversations":{"post":{"tags":["Widget"],"summary":"Abrir conversa publica","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetConversationRequest"}}}},"responses":{"201":{"description":"Conversa criada","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetConversationResponse"}}}}}}},"\/api\/widget\/conversations\/{public_id}\/messages":{"get":{"tags":["Widget"],"summary":"Listar mensagens do widget","parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","required":true,"schema":{"type":"string"}},{"name":"after_id","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Timeline da conversa","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetMessagesResponse"}}}}}},"post":{"tags":["Widget"],"summary":"Enviar mensagem publica do visitante","parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetMessageCreateRequest"}}}},"responses":{"201":{"description":"Mensagem criada","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetMessageCreateResponse"}}}}}}},"\/api\/widget\/conversations\/{public_id}\/verification\/start":{"post":{"tags":["Verification"],"summary":"Iniciar verificacao segura do cliente","parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"method":{"type":"string","enum":["email_otp","sms_otp","magic_link"]},"target":{"type":"string"}},"required":["token","method"]}}}},"responses":{"202":{"description":"Desafio iniciado"}}}},"\/api\/widget\/conversations\/{public_id}\/verification\/confirm":{"post":{"tags":["Verification"],"summary":"Confirmar desafio de verificacao","parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"challenge_id":{"type":"integer"},"code":{"type":"string"}},"required":["token","challenge_id","code"]}}}},"responses":{"200":{"description":"Verificacao concluida"}}}},"\/api\/mobile\/login":{"post":{"tags":["Mobile"],"summary":"Autenticar operador mobile","requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/MobileLoginRequest"}}}},"responses":{"200":{"description":"Token emitido","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/MobileLoginResponse"}}}}}}},"\/api\/mobile\/me":{"get":{"tags":["Mobile"],"summary":"Obter contexto do operador","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Contexto do operador","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/MobileMeResponse"}}}}}}},"\/api\/mobile\/conversations":{"get":{"tags":["Mobile"],"summary":"Listar conversas visiveis para o operador","security":[{"bearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Conversas paginadas","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/MobileConversationListResponse"}}}}}}},"\/api\/mobile\/conversations\/{id}\/messages":{"post":{"tags":["Mobile"],"summary":"Enviar mensagem do operador","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"body":{"type":"string"}},"required":["body"]}}}},"responses":{"200":{"description":"Mensagem registada"}}}},"\/api\/mobile\/conversations\/{id}\/assign":{"post":{"tags":["Mobile"],"summary":"Assumir ou atribuir conversa","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Conversa atribuida"}}}},"\/api\/mobile\/conversations\/{id}\/transfer":{"post":{"tags":["Mobile"],"summary":"Transferir conversa","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Conversa transferida"}}}},"\/api\/mobile\/conversations\/{id}\/close":{"post":{"tags":["Mobile"],"summary":"Encerrar conversa","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Conversa encerrada"}}}}},"webhooks":{"conversation.created":{"post":{"summary":"Evento entregue quando uma conversa e criada.","parameters":[{"name":"X-ChatBeep-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-ChatBeep-Signature","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-ChatBeep-Timestamp","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WebhookConversationEvent"}}}},"responses":{"200":{"description":"Evento aceite pelo endpoint do parceiro"}}}},"message.created":{"post":{"summary":"Evento entregue quando uma mensagem nova e emitida.","parameters":[{"name":"X-ChatBeep-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-ChatBeep-Signature","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-ChatBeep-Timestamp","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WebhookMessageEvent"}}}},"responses":{"200":{"description":"Evento aceite pelo endpoint do parceiro"}}}},"installation.health.changed":{"post":{"summary":"Evento entregue quando a saude de uma instalacao muda.","parameters":[{"name":"X-ChatBeep-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-ChatBeep-Signature","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-ChatBeep-Timestamp","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WebhookInstallationEvent"}}}},"responses":{"200":{"description":"Evento aceite pelo endpoint do parceiro"}}}},"verification.completed":{"post":{"summary":"Evento entregue quando a verificacao segura e concluida.","parameters":[{"name":"X-ChatBeep-Event","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-ChatBeep-Signature","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-ChatBeep-Timestamp","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WebhookVerificationEvent"}}}},"responses":{"200":{"description":"Evento aceite pelo endpoint do parceiro"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"Sanctum token"}},"schemas":{"HealthReport":{"type":"object","properties":{"status":{"type":"string"},"checked_at":{"type":"string","format":"date-time"},"app":{"type":"object","properties":{"name":{"type":"string"}}},"checks":{"type":"object"}}},"WidgetConfigResponse":{"type":"object","properties":{"tenant":{"type":"object"},"site":{"type":"object"},"installation":{"type":"object"}}},"InstallationHealthResponse":{"type":"object","properties":{"tenant":{"type":"object"},"site":{"type":"object"},"installation":{"type":"object"},"widget":{"type":"object"},"warnings":{"type":"array","items":{"type":"string"}}}},"WidgetPingRequest":{"type":"object","properties":{"token":{"type":"string"},"current_url":{"type":"string","format":"uri"},"installation_type":{"type":"string"},"version":{"type":"string"}},"required":["token"]},"WidgetPingResponse":{"type":"object","properties":{"installation":{"type":"object"},"site":{"type":"object"}}},"WidgetVisitorRequest":{"type":"object","properties":{"token":{"type":"string"},"uuid":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"current_url":{"type":"string","format":"uri"}},"required":["token","uuid"]},"WidgetVisitorResponse":{"type":"object","properties":{"visitor":{"type":"object"}}},"WidgetConversationRequest":{"type":"object","properties":{"token":{"type":"string"},"visitor_uuid":{"type":"string"},"subject":{"type":"string"},"message":{"type":"string"},"privacy_accepted":{"type":"boolean"},"current_url":{"type":"string","format":"uri"}},"required":["token","visitor_uuid","message","privacy_accepted"]},"WidgetConversationResponse":{"type":"object","properties":{"conversation":{"type":"object"},"messages":{"type":"array","items":{"type":"object"}}}},"WidgetMessagesResponse":{"type":"object","properties":{"conversation":{"type":"object"},"messages":{"type":"array","items":{"type":"object"}}}},"WidgetMessageCreateRequest":{"type":"object","properties":{"token":{"type":"string"},"body":{"type":"string"},"current_url":{"type":"string","format":"uri"}},"required":["token","body"]},"WidgetMessageCreateResponse":{"type":"object","properties":{"message":{"type":"object"},"conversation":{"type":"object"}}},"MobileLoginRequest":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"},"device_name":{"type":"string"}},"required":["email","password"]},"MobileLoginResponse":{"type":"object","properties":{"token":{"type":"string"},"token_type":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"user":{"type":"object"},"tenant":{"type":"object"}}},"MobileMeResponse":{"type":"object","properties":{"user":{"type":"object"},"tenant":{"type":"object"}}},"MobileConversationListResponse":{"type":"object","properties":{"conversations":{"type":"array","items":{"type":"object"}},"meta":{"type":"object"}}},"WebhookEnvelope":{"type":"object","properties":{"event_id":{"type":"string"},"event":{"type":"string"},"version":{"type":"string"},"occurred_at":{"type":"string","format":"date-time"},"tenant_slug":{"type":"string"},"data":{"type":"object"}}},"WebhookConversationEvent":{"allOf":[{"$ref":"#\/components\/schemas\/WebhookEnvelope"}]},"WebhookMessageEvent":{"allOf":[{"$ref":"#\/components\/schemas\/WebhookEnvelope"}]},"WebhookInstallationEvent":{"allOf":[{"$ref":"#\/components\/schemas\/WebhookEnvelope"}]},"WebhookVerificationEvent":{"allOf":[{"$ref":"#\/components\/schemas\/WebhookEnvelope"}]}}}}