LIVE · LANȚ DE AUDIT · UE
SISTEM · 99,99% UPTIME
v 1.0 ↗ FĂCUT ÎN UE

Démarrage rapide

De « pas de compte » à « session créée + premier webhook reçu » en environ cinq minutes. Nous utiliserons le SDK Node ; celui de 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 + utilisateur admin en une seule étape.
  2. Allez dans Admin → Identifiants API et cliquez sur Émettre un identifiant.
  3. Copiez la paire nb_pub_* + nb_sec_* . Le secret n'est affiché qu'une seule 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. Générer une invitation 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 mobile ou Chrome), accorde les permissions caméra + GPS, et l'opérateur le voit sur le tableau de bord 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. (Facultatif) Intégrer le widget côté terrain

Si vous préférez héberger l'expérience utilisateur terrain dans votre propre application destinée aux clients plutôt que d'utiliser notre URL hébergée, utilisez le widget d'intégration :

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 plutôt le composant @nexbasira/react's <NexBasiraSession> — même surface, React idiomatique.

Ce dont vous disposez maintenant

  • Sessions créées via l'API
  • Utilisateurs terrain rejoignant via des URL d'invitation signées (sans installation d'application)
  • Webhooks vérifiés + dispatchés dans votre backend
  • (Facultatif) expérience côté terrain intégrée dans votre produit

Et ensuite