LIVE · AUDIT-KEDJA · EU-VÄRD
SYSTEM · 99,99 % DRIFTSTID
v 1.0 ↗ TILLVERKAT I EU

Snabbstart

Från "inget konto" till "session skapad + första webhook mottagen" på ungefär fem minuter. Vi använder Node-SDK:n; Python är nästan identisk.

1. Skaffa API-uppgifter

  1. Registrera dig på app.nexbasira.com — bootstrap-flödet skapar din organisation + admin-användare i ett steg.
  2. Gå till Admin → API-uppgifter och klicka på Utfärda uppgift.
  3. Kopiera nb_pub_* + nb_sec_* -paret. Hemligheten visas exakt en gång — spara den i din secrets manager direkt.

2. Installera SDK:n

npm install @nexbasira/node

Eller för Python: pip install nexbasira.

3. Skapa 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ägla en fältanvändarinbjudan

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

Skicka URL:en till din fältanvändare — hen öppnar den på en telefon (mobil Safari eller Chrome), ger kamera- + GPS-behörigheter, och operatören ser hen på SPA-dashboarden på under 30 sekunder.

5. Koppla upp webhooken

Webhooks utlöses vid session.created, session.completed, evidence.added, recording.ready, audit.anchored, signature.completed, och några till. Registrera en leverans-URL från Admin → Webhooks och verifiera signaturen på varje 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. (Valfritt) Bädda in fältsidans widget

Om du hellre vill hosta fältanvändarupplevelsen i din egen kundvända app i stället för att använda vår hostade URL, använd embed-widgeten:

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? Använd @nexbasira/reacts <NexBasiraSession> -komponenten i stället — samma yta, idiomatisk React.

Vad du har nu

  • Sessioner skapade via API
  • Fältanvändare som ansluter via signerade inbjudnings-URL:er (ingen appinstallation)
  • Webhooks verifierade + hanterade i din backend
  • (Valfritt) inbäddad fältsidesupplevelse i din produkt

Vad som kommer härnäst