Skip to content

Fale com a equipe sobre um espaço ou uma seção com cadeado

POST/api/chat/contact-team

Auth
Requires a token
Who can call it:
owner
admin
moderator
API key:
No API key accepted
X-CommunityId
X-CommunityId Send the X-CommunityId of the community the operation happens in.
Endpoint descriptions come straight from the API specification and are in Portuguese for now. The interface around them is translated.

Abre (ou reusa) uma conversa direta com alguém da equipe para pedir acesso. Não envia mensagem: o rascunho "Quero acesso a {espaço}" é só do app.

**Quem pode:** o membro (não visitante, não cadastro pendente) a quem aquele espaço ou seção é **mostrado com cadeado** e cujo 403 traz `askTeam` (fechado por grupo, ou nada à venda), o mesmo predicado do `canContactTeam` do 403 do espaço e do `denial` da seção. Fora disso, 403 `contactTeamNotAllowed` (inclusive para id de outra comunidade ou inexistente). Chat desligado: 403 `disabled`.

**Quem atende:** o primeiro admin online, depois o primeiro moderador online (por nome dentro do papel; presença do chat, últimos 90 s); com ninguém online, o owner. A pessoa precisa estar "Disponível para conversar" e sem bloqueio nos dois sentidos; o financeiro nunca atende. Ninguém elegível: 403 `teamUnavailable`.

**Regras:** passa por cima do `whoCanStart`; quem pede não precisa estar disponível; se já existe conversa direta com alguém elegível agora, devolve essa (200, `created: false`, não conta no limite); conversa nova conta no limite de 10 por hora e 30 por dia (429, ver `ChatRateLimited`).

Headers

NameTypeDescription
X-CommunityIdoptionalstring (uuid)ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade.

Request body application/json

NameTypeDescription
spaceIdoptionalstring (uuid)O espaço com cadeado.
sectionIdoptionalstring (uuid)A seção com cadeado (página da seção).

Responses

StatusDescription
200A conversa que já existia com alguém elegível da equipe.
201Conversa criada com quem atende.
400Requisição inválida — falha de validação.
401Token ausente, inválido ou expirado; token de outra comunidade (o `X-CommunityId` ou o `communityId` do corpo não é o do token); token antigo ou de uma sessão encerrada (troca de senha, convite aceito). Nesses casos a mensagem pede para entrar de novo (`auth.signInAgain`).
403Autenticado, mas sem permissão para esta operação.
429Limite anti-spam do chat (por pessoa, por comunidade, valendo para o app e o MCP). `errors[0].code` diz qual: `limitConnectionsDaily` (20 pedidos de conexão/dia), `limitConnectionsWeekly` (100/semana), `limitPendingRequests` (200 pedidos esperando resposta ao mesmo tempo; libera cancelando, sem `retryAt`), `limitNewConversationsHourly` (10 conversas novas/hora), `limitNewConversationsDaily` (30/dia), `limitMessagesPerMinute` (30 mensagens/minuto) e `limitDuplicateMessage` (o mesmo texto para no máximo 5 pessoas diferentes por hora). Quem entrou na comunidade há menos de 24 h tem metade dos limites de pedidos de conexão e de conversas novas; a equipe (owner, admin, moderador, financeiro) tem o dobro de todos. Conversa que já existe nunca conta como nova. As janelas são móveis: `errors[0].retryAt` (e o header `Retry-After`, em segundos) dizem quando a próxima vaga abre, e a mensagem diz a hora no fuso da comunidade. `errors[0].limit` é o limite que vale para quem pediu.
500Erro interno do servidor.

curl example

curl -X POST "https://api.memberfy.net/api/chat/contact-team" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-CommunityId: $COMMUNITY_ID" \
  -H "Content-Type: application/json" \
  -d '{}'