Guías de integración
Añadir miembros mediante el flujo Revendedor real
Use sesión y relación de equipo existentes sin inventar una API de registro de creadores.
Antes de empezar
- Sesión de operador Revendedor aprobado con gestión de miembros permitida.
- Contrato separado del portal; no corresponde usar claves Organización ni acceso público.
- Autorización explícita para un miembro de prueba controlado, sin registros o mensajes reales automáticos.
Leer el contexto de la cuenta
Desde su servidor use GET /api/white-label/portal/reseller con la sesión Bearer existente. Server resuelve cuenta y permisos; un token de visitante no selecciona un rol administrador.
Mantenga sesiones privadas y no-store. Leer un perfil no autoriza todo tipo de miembro ni otra cuenta.
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 compatible
POST /api/white-label/portal/reseller/members admite displayName, contacto, memberType y relaciones permitidas. El ejemplo evita owner y escalada de permisos y solo actúa al llamarse con prueba autorizada.
Server usa el equipo Creador y conserva la relación Revendedor separada. La antigua /invitations devuelve 410. No invente creación directa de creadores ni active cuentas sin aprobar.
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 en el acceso de equipo
Use el resultado real y el flujo normal de perfil, verificación e inicio de sesión de organizador/equipo. Estado, OTP, campañas y permisos quedan en el servidor.
Gestione 401, rechazos y validación honestamente. Un registro devuelto no garantiza un miembro activo; revise el estado y las rutas existentes.
Compruebe su integración
- Comprobar lectura autorizada y rechazo de llamadas no autorizadas.
- Mantener límites y permisos sin claves Organización ni invitaciones obsoletas.