EN DIRECT · AUDIT CHAÎNÉ · ÉDR UE
SYSTÈME · 99,99% DISPONIBILITÉ
v 1.0 ↗ FAIT EN UE

Démarrage rapide

De « aucun compte » à « session créée + premier webhook reçu » en environ cinq minutes. Nous utiliserons le SDK Node ; Python est presque identique.

1. Obtenir des identifiants API

  1. Inscrivez-vous sur app.nexbasira.com — le flux d'amorçage crée votre organisation + votre utilisateur admin en une seule étape.
  2. Allez dans Admin → Identifiants API et cliquez sur Émettre un identifiant.
  3. Copiez la nb_pub_* + nb_sec_* paire. Le secret est affiché exactement une fois — stockez-le immédiatement dans votre gestionnaire de secrets.

2. Installer le SDK

npm install @nexbasira/node

Ou pour Python : pip install nexbasira.

3. Créer une session

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. Émettre une invitation pour un utilisateur terrain

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_..."

Envoyez l'URL à votre utilisateur terrain — il l'ouvre sur un téléphone (Safari ou Chrome mobile), autorise la caméra + le GPS, et l'opérateur le voit sur le tableau de bord de la SPA en moins de 30 secondes.

5. Câbler le webhook

Les webhooks se déclenchent sur session.created, session.completed, evidence.added, recording.ready, audit.anchored, signature.completed, et quelques autres. Enregistrez une URL de livraison depuis Admin → Webhooks et vérifiez la signature sur chaque 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. (Optionnel) Intégrer le widget côté terrain

Si vous préférez héberger l'expérience de l'utilisateur terrain dans votre propre application client plutôt que d'utiliser notre URL hébergée, utilisez le widget 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();

Application React ? Utilisez @nexbasira/react de <NexBasiraSession> à la place — même surface, React idiomatique.

Ce que vous avez maintenant

  • Des sessions créées via l'API
  • Des utilisateurs terrain rejoignant via des URL d'invitation signées (sans installation d'application)
  • Des webhooks vérifiés + distribués dans votre backend
  • (Optionnel) une expérience côté terrain intégrée dans votre produit

Et ensuite