ŽIVĚ · AUDIT CHAIN · EU
SYSTÉM · 99,99 % DOSTUPNOST
v 1.0 ↗ VYROBENO V EU
BASE URL
https://api.nexbasira.com/v1
🇪🇺 EU-hosted SemVer · v1 stable 12 months min. backward compat.

Your first session in 5 minutes.

# 1. Créer une session d'inspection
curl -X POST https://api.nexbasira.com/v1/sessions \
-H "Authorization: Bearer nbx_live_sk_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"type": "field_inspection",
"reference": "INS-42871",
"participant": {
"name": "Marie L.",
"channel": "sms",
"phone": "+33612345678"
},
"callbacks": {
"session.completed": "https://your-app.com/webhooks/nbx"
}
}'
# Réponse 201 — la session est créée, le lien SMS est en route
{
"id": "sess_42871",
"status": "pending",
"join_url": "https://join.nexbasira.com/s/abc123def...",
"expires_at": "2026-05-26T14:00:00Z"
}
import Nexbasira from '@nexbasira/node';
const nbx = new Nexbasira({ apiKey: process.env.NBX_KEY });
const session = await nbx.sessions.create({
type: 'field_inspection',
reference: 'INS-42871',
participant: {
name: 'Marie L.',
channel: 'sms',
phone: '+33612345678',
},
callbacks: {
'session.completed': 'https://your-app.com/webhooks/nbx',
},
});
console.log(session.join_url);
// → https://join.nexbasira.com/s/abc123def...
// Itérer sur les sessions récentes (async iterator)
for await (const s of nbx.sessions.list({ status: 'completed' })) {
console.log(s.id, s.completed_at);
}
from nexbasira import Nexbasira
nbx = Nexbasira(api_key=os.environ["NBX_KEY"])
session = nbx.sessions.create(
type="field_inspection",
reference="INS-42871",
participant={
"name": "Marie L.",
"channel": "sms",
"phone": "+33612345678",
},
callbacks={
"session.completed": "https://your-app.com/webhooks/nbx",
},
)
print(session.join_url)
# → https://join.nexbasira.com/s/abc123def...
# Récupérer le dossier de preuve une fois signé
evidence = nbx.evidence.retrieve(session_id=session.id)
print(evidence.pdf_url, evidence.audit_chain_hash)
import { NexbasiraEmbed } from '@nexbasira/react';
export function InspectionView({ sessionId }) {
return (
<NexbasiraEmbed
sessionId={sessionId}
onCapture={(evt) => trackPhoto(evt)}
onSigned={(evt) => redirect(evt.evidence_url)}
theme="dark"
brand={{ logo: "/logo.svg", accent: "#00E5A0" }}
/>
);
}
// L'embed gère WebRTC, capture GPS, signature eIDAS.
// Vous gérez l'UI autour. White-label par défaut.

Everything you can drive from the API.

POST GET DELETE

/sessions

Create, list, retrieve and end an inspection session. SMS / email invites.

GET

/evidence

List session evidence, download signed PDF, retrieve blockchain hash.

GET

/whiteboards

Retrieve annotations as SVG / PNG per session. Timestamped export.

POST GET

/webhooks

Register endpoint, rotate secret, test-fire. HMAC-SHA256 signature.

GET PATCH

/branding

Customize logo, colors, domain for white-label mode.

GET

/org

Read organization metadata, quotas, members, RBAC roles.

HMAC-SHA256 signed webhooks.

Stripe-style format with 5-min clock skew tolerance. Secret encrypted at rest. Exponential retries with backoff up to 24h.

Available events
session.createdSession created, link sent
session.joinedParticipant joined
session.evidence.capturedNew photo / annotation
session.signedeIDAS signature applied
session.anchoredHash recorded on chain
session.completedPDF ready to download
Signature example
# En-tête envoyé par Nexbasira
Nbx-Signature: t=1714060800,v1=5257a869e7ec...
# Vérification (Node.js)
import { verifyWebhook } from '@nexbasira/node';
app.post('/webhooks/nbx', (req, res) => {
const event = verifyWebhook(
req.rawBody,
req.headers['nbx-signature'],
process.env.NBX_WEBHOOK_SECRET
);
if (event.type === 'session.completed') {
downloadEvidence(event.data.id);
}
res.json({ ok: true });
});

4 typed, maintained SDKs.

@nexbasira/node
v2.6.0 · Node 18+
npm install @nexbasira/node
  • Types from OpenAPI
  • Async iterator pagination
  • Built-in webhook verify
nexbasira (Python)
v2.6.0 · Python 3.10+
pip install nexbasira
  • Pydantic v2 models
  • Async + sync mode
  • Typed errors by code
@nexbasira/react
v2.6.0 · React 18+
npm install @nexbasira/react
  • Plug & play <Embed/>
  • Hooks useSession, useEvidence
  • Tailwind-compat theming
@nexbasira/embed
v2.6.0 · Vanilla JS
<script src="cdn.nbx.com/embed.js"></script>
  • No framework, <30 KB
  • Europe-distributed CDN
  • All-framework compat.

Connect Nexbasira to your stack.

🔑

OIDC + SAML 2.0 SSO

Just-in-time provisioning with domain allowlist and default role.

👥

SCIM 2.0

Auto-provisioning of users and groups. Per-org bearer token.

📨

Webhooks & verify

HMAC verify helpers in all SDKs. Exponential retries.

🏠

Self-hosting

Docker + Caddy stack documented. Available on Enterprise plan.

🔄

Idempotency

Idempotency-Key header on all POSTs. No duplicates, ever.

📊

Rate limits

X-RateLimit-* headers on every response. Per-key + per-org quotas.

OpenAPI 3.1

Generated, public, versioned schema.

Download the filtered OpenAPI 3.1 schema (public operations only) and generate your types automatically.

https://api.nexbasira.com/v1/openapi.json
# Types TypeScript
npx openapi-typescript \
https://api.nexbasira.com/v1/openapi.json \
-o src/nbx-types.ts
# Modèles Pydantic
datamodel-codegen \
--url https://api.nexbasira.com/v1/openapi.json \
--output-model-type pydantic_v2.BaseModel \
--output nbx_models.py

SemVer-URL guaranteed stability

Breaking changes live under a new prefix (/v2/) with at least 12 months of overlap before the previous version retires. Additive changes (new optional fields, new endpoints, new event types) ship in place. Our SDKs treat unknown fields as forward-compatible.

Ready to integrate Nexbasira?

Get your sandbox API key in 30 seconds, no credit card.