LIVE · AUDIT-KÆDE · EU-HOSTET
SYSTEM · 99,99 % OPPETID
v 1.0 ↗ FREMSTILLET I EU

Hurtig start

Fra »ingen konto« til »session oprettet + første webhook modtaget« på cirka fem minutter. Vi bruger Node-SDK'en; Python er næsten identisk.

1. Hent API-legitimation

  1. Tilmeld dig på app.nexbasira.com — bootstrap-flowet opretter din organisation + admin-bruger i ét trin.
  2. Gå til Admin → API-legitimation og klik på Udsted legitimation.
  3. Kopiér nb_pub_* + nb_sec_* -parret. Hemmeligheden vises præcis én gang — gem den i din secrets manager med det samme.

2. Installér SDK'en

npm install @nexbasira/node

Eller for Python: pip install nexbasira.

3. Opret en 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. Præg en feltbruger-invitation

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

Send URL'en til din feltbruger — de åbner den på en telefon (mobil Safari eller Chrome), giver adgang til kamera + GPS, og operatøren ser dem på SPA-dashboardet på under 30 sekunder.

5. Kobl webhooken op

Webhooks udløses ved session.created, session.completed, evidence.added, recording.ready, audit.anchored, signature.completed, og et par flere. Registrér en leverings-URL fra Admin → Webhooks og verificér signaturen på hver 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. (Valgfrit) Indlejr feltside-widgetten

Hvis du hellere vil hoste feltbruger-oplevelsen inde i din egen kundevendte app i stedet for at bruge vores hostede URL, så brug embed-widgetten:

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();

React-app? Brug @nexbasira/react's <NexBasiraSession> -komponenten i stedet — samme flade, idiomatisk React.

Hvad du har nu

  • Sessioner oprettet via API
  • Feltbrugere, der tilslutter via signerede invitations-URL'er (ingen app-installation)
  • Webhooks verificeret + afsendt i din backend
  • (Valgfrit) indlejret feltside-oplevelse inde i dit produkt

Hvad er det næste