Guias de integração
Adicionar membros pelo percurso Revendedor real
Use sessão e relação de equipa existentes sem inventar uma API de registo de criadores.
Antes de começar
- Sessão de operador Revendedor aprovado com gestão de membros permitida.
- Contrato separado do portal; não se aplicam chaves Organização nem acesso público.
- Autorização explícita para um membro de teste controlado, sem registos ou mensagens reais automáticos.
Ler o contexto da conta
No servidor use GET /api/white-label/portal/reseller com a sessão Bearer existente. Server resolve conta e permissões; um token do visitante não escolhe um papel administrativo.
Mantenha sessões privadas e no-store. Ler um perfil não autoriza qualquer membro nem outra conta.
export async function readResellerProfile(sessionToken: string) {
const response = await fetch('https://api.sparkglim.net/api/white-label/portal/reseller', {
headers: { Authorization: 'Bearer ' + sessionToken, Accept: 'application/json' },
cache: 'no-store', signal: AbortSignal.timeout(15000)
});
const payload = await response.json();
if (!response.ok || payload.success !== true) throw new Error(payload.error || 'Reseller access denied');
return payload.data;
}Preparar add-member suportado
POST /api/white-label/portal/reseller/members aceita displayName, contacto, memberType e relações permitidas. O exemplo evita owner e elevação de permissões e só atua com teste explicitamente autorizado.
Server usa a equipa Criador e conserva a relação Revendedor separada. A antiga /invitations devolve 410. Não invente criação direta de criadores nem ative contas não aprovadas.
type MemberInput = { displayName: string; email?: string; phone?: string; memberType: 'sub_creator' | 'operator' | 'finance' | 'support' };
export async function addApprovedTestMember(sessionToken: string, input: MemberInput, approvedTest: boolean) {
if (!approvedTest) throw new Error('Approved test member required');
const response = await fetch('https://api.sparkglim.net/api/white-label/portal/reseller/members', {
method: 'POST', headers: { Authorization: 'Bearer ' + sessionToken, 'Content-Type': 'application/json' },
body: JSON.stringify(input), cache: 'no-store', signal: AbortSignal.timeout(15000)
});
const payload = await response.json();
if (response.status !== 201 || payload.success !== true) throw new Error(payload.error || 'Member not created');
return payload.data;
}Continuar no acesso de equipa
Use o resultado real e o percurso normal de perfil, verificação e entrada de organizador/equipa. Estado, OTP, campanhas e permissões ficam no servidor.
Trate 401, recusas e validação honestamente. Um registo devolvido não garante um membro ativo; consulte o estado e as rotas existentes.
Verifique a sua integração
- Verificar leitura autorizada e recusa de chamadas não autorizadas.
- Preservar limites e permissões sem chaves Organização ou convites obsoletos.