Início rápido
De «sem conta» a «sessão criada + primeiro webhook recebido» em cerca de cinco minutos. Vamos usar o SDK de Node; o de Python é quase idêntico.
1. Obter credenciais de API
- Registe-se em app.nexbasira.com — o fluxo de arranque cria a sua organização + utilizador administrador num só passo.
- Vá a Admin → Credenciais de API e clique em Emitir credencial.
- Copie o
nb_pub_*+nb_sec_*par. O segredo é mostrado exatamente uma vez — guarde-o imediatamente no seu gestor de segredos.
2. Instalar o SDK
npm install @nexbasira/node Ou para Python: pip install nexbasira.
3. Criar uma sessão
import { NexBasira } from "@nexbasira/node";
const nb = new NexBasira({
apiKey: process.env.NB_PUBLIC_KEY!,
apiSecret: process.env.NB_SECRET_KEY!,
});
const session = await nb.sessions.create({
notes: "Vehicle damage — claim CL-2026-0042",
scheduled_for: "2026-05-23T10:00:00Z",
});
console.log("Session id:", session.id);
// → "0c8f4d2e-..." 4. Emitir um convite de utilizador de campo
const invite = await nb.sessions.invite(session.id, {
recipient_email: "alex@policyholder.com",
send_email: true,
});
console.log("Field URL (shown ONCE):", invite.url);
// → "https://app.nexbasira.com/join/0c8f.../?t=tok_..." Envie o URL ao seu utilizador de campo — ele abre-o num telemóvel (Safari ou Chrome móvel), dá permissões de câmara + GPS e o operador vê-o no painel da SPA em menos de 30 segundos.
5. Ligar o webhook
Os webhooks disparam em session.created, session.completed,
evidence.added, recording.ready, audit.anchored,
signature.completed, e alguns mais. Registe um URL de entrega em Admin → Webhooks e verifique a assinatura em cada POST:
// Express handler
app.post("/nb-webhook", express.raw({ type: "application/json" }), (req, res) => {
const sig = req.header("NB-Signature")!;
const secret = process.env.NB_WEBHOOK_SECRET!;
try {
const event = nb.webhooks.constructEvent(req.body, sig, secret);
// event is now type-narrowed by event.type
switch (event.type) {
case "session.completed":
await onSessionCompleted(event.data);
break;
case "audit.anchored":
await onAuditAnchored(event.data);
break;
}
res.status(204).end();
} catch (err) {
if (err instanceof InvalidSignatureError) {
return res.status(401).send("bad signature");
}
throw err;
}
}); 6. (Opcional) Integrar o widget do lado do terreno
Se preferir alojar a experiência do utilizador de campo dentro da sua própria app ao cliente em vez de usar o nosso URL alojado, use o widget de embed:
import { embed } from "@nexbasira/embed";
const widget = embed({
container: "#nb-host",
sessionUrl: invite.url,
onSessionComplete: (id) => router.push(`/inspections/${id}`),
});
// Imperative methods on the returned handle:
widget.requestSnapshot();
widget.openWhiteboard();
widget.endSession(); Aplicação React? Use @nexbasira/react do <NexBasiraSession> em vez disso — a mesma superfície, React idiomático.
O que tem agora
- Sessões criadas via API
- Utilizadores de campo a entrar via URLs de convite assinados (sem instalar app)
- Webhooks verificados + despachados no seu backend
- (Opcional) experiência do lado do terreno integrada dentro do seu produto
O que se segue
- Conceitos — o que são realmente uma Sessão, uma linha de Evidence e uma Cadeia de auditoria
- Referência completa da API — cada endpoint com exemplos
- Análise aprofundada dos webhooks — tipos de evento, comportamento de repetição, idempotência
- Configuração de SSO — OIDC + SAML para a sua equipa de TI