SecuAAS Docs
ConformVault

API et Authentification

Reference complete de l'API ConformVault, authentification par cle API, et utilisation des SDKs Go, Python et TypeScript

API et Authentification

Ce document couvre l'API REST de ConformVault, l'authentification, et les SDKs officiels (Go, Python, TypeScript) pour l'integration par des developpeurs tiers.

Vue d'ensemble

ConformVault expose deux couches d'API :

  1. API interne (v1) : Utilisee par le frontend web et le client desktop. Authentification JWT. Base : /api/v1/.
  2. Developer API : Destinee aux developpeurs tiers et aux SDKs. Authentification par cle API. Base : /dev/v1/.

Les SDKs utilisent la Developer API.

Authentification

API interne (JWT)

L'API interne utilise des tokens JWT Bearer :

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

Obtenir un token :

curl -X POST https://api.conformvault.com/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "user@example.com", "password": "motdepasse"}'

Reponse :

{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "refresh_token": "eyJhbGciOiJIUzI1NiIs...",
  "expires_in": 900,
  "token_type": "Bearer",
  "user": {
    "id": "uuid",
    "email": "user@example.com",
    "role": "client_admin",
    "mfa_enabled": false
  }
}

Si le MFA est active, la reponse contient "mfa_required": true et il faut appeler /api/v1/auth/mfa/verify avec le code TOTP.

Rafraichir un token :

curl -X POST https://api.conformvault.com/api/v1/auth/refresh \
  -H "Content-Type: application/json" \
  -d '{"refresh_token": "eyJhbGciOiJIUzI1NiIs..."}'

Developer API (cle API)

Les SDKs et integrations tierces utilisent des cles API :

Authorization: Bearer cvk_live_votre_cle_api
  • Prefixe cvk_live_ : production
  • Prefixe cvk_test_ : sandbox

Les cles API sont gerees via les endpoints /dev/v1/api-keys ou depuis le portail web (section Developpeur).

URL de base : https://api.conformvault.com/dev/v1

Endpoints API interne (v1)

Authentification

MethodeEndpointDescription
POST/api/v1/auth/loginConnexion par courriel/mot de passe
POST/api/v1/auth/mfa/verifyVerification MFA TOTP
POST/api/v1/auth/ssoConnexion SSO (Zitadel OIDC)
POST/api/v1/auth/registerInscription avec creation d'organisation
POST/api/v1/auth/refreshRafraichissement du token
POST/api/v1/auth/forgot-passwordDemande de reinitialisation
POST/api/v1/auth/reset-passwordReinitialisation du mot de passe

Fichiers

Base : /api/v1/clients/:client_id/files

MethodeEndpointDescription
GET.../filesLister les fichiers (params: folder_id, page, per_page)
POST.../filesUpload (multipart/form-data, max 25 MB)
GET.../files/:idMetadonnees d'un fichier
GET.../files/:id/downloadTelecharger un fichier
DELETE.../files/:idSupprimer un fichier
POST.../files/:id/moveDeplacer un fichier

Exemple d'upload :

curl -X POST https://api.conformvault.com/api/v1/clients/{client_id}/files \
  -H "Authorization: Bearer {token}" \
  -F "file=@document.pdf" \
  -F "folder_id={folder_id}"

Dossiers

Base : /api/v1/clients/:client_id/folders

MethodeEndpointDescription
GET.../foldersLister (param: parent_id)
POST.../foldersCreer ({"name": "...", "parent_id": "..."})
GET.../folders/:idDetail d'un dossier
PATCH.../folders/:idRenommer ({"name": "..."})
DELETE.../folders/:idSupprimer (recursif)
POST.../folders/:id/moveDeplacer

Liens de partage

Routes publiques (sans authentification) :

MethodeEndpointDescription
GET/s/:tokenInformations du lien
GET/s/:token/consent-textTexte de consentement Loi 25
POST/s/:token/accept-consentAccepter le consentement
GET/s/:token/downloadTelecharger le fichier
POST/s/:token/uploadUploader un fichier (25 MB max)
GET/s/:token/filesLister les fichiers du lien

Routes protegees :

Base : /api/v1/clients/:client_id/share-links

MethodeEndpointDescription
GET.../share-linksLister les liens
POST.../share-linksCreer un lien
GET.../share-links/:idDetail
DELETE.../share-links/:idSupprimer
POST.../share-links/:id/toggleActiver/desactiver
GET.../share-links/:id/statsStatistiques

Administration

MethodeEndpointDescription
GET/api/v1/admin/storage/statsStatistiques S3 (superadmin)
GET/api/v1/admin/audit-logsLogs d'audit
GET/api/v1/admin/configConfiguration systeme
PUT/api/v1/admin/configModifier la configuration

Monitoring

MethodeEndpointDescription
GET/healthSonde de vivacite
GET/readySonde de disponibilite (DB + Redis)
GET/metricsMetriques Prometheus

Developer API (SDKs)

La Developer API expose un ensemble complet de services pour les integrations tierces. Les trois SDKs (Go, Python, TypeScript) sont alignes sur cette API.

Services disponibles (36)

ServiceMethodes principalesDescription
Fileslist, get, upload, download, delete, getThumbnail, getScanReportGestion des fichiers
Folderslist, get, create, deleteGestion des dossiers
ShareLinkslist, create, deleteLiens de partage
Signaturescreate, getStatus, downloadSigned, revoke, analyzePDF, delegateSignatures electroniques
Webhookslist, register, delete, test, listDeliveries, replayDeliveryWebhooks
Auditlist, search, export, getStats, getAnomaliesJournaux d'audit
Keyslist, create, get, revoke, rotate, instantRevokeCles API
Bulkdelete, move, downloadOperations par lots
Versionslist, get, restore, deleteVersionnage de fichiers
SearchsearchRecherche unifiee
Trashlist, restore, delete, emptyCorbeille
ScanReportsgetReport, list, getSummaryRapports de scan antivirus
AttestationgenerateLoi25Attestation de conformite Loi 25 (PDF)
Transactionscreate, list, get, delete, addItem, updateItem, deleteItemDossiers transactionnels
Templatescreate, list, generate, listDocumentsModeles de documents
Batchescreate, list, get, commit, cancel, uploadFileOperations par lots
MetadataaddTags, getTags, listByTag, removeTags, setMetadata, getMetadataEtiquettes et metadonnees
Retentioncreate, list, update, delete, createException, listPendingApprovalsPolitiques de retention
LegalHoldscreate, list, release, addFiles, removeFileGels juridiques
Permissionsset, get, revoke, setWithExpiryPermissions par dossier
Commentscreate, list, update, delete, getRepliesCommentaires sur fichiers
QuotagetQuota de stockage
RateLimitgetStatut du rate limiting
UploadSessionscreate, uploadChunk, complete, cancelUploads chunked
Jobscreate, list, get, cancelTaches en arriere-plan
ActivitySubscriptionssubscribe, list, unsubscribeAbonnements d'activite
PoliciesgetIPPolicy, setIPPolicy, getMFAPolicy, setMFAPolicy, getEncryptionSalt, setEncryptionSaltPolitiques de securite
BandwidthgetSummary, getDailyStatistiques de bande passante
DataExportexportExport de donnees RGPD/Loi 25
SecretVaultcreate, list, get, deleteCoffre-fort de secrets
ExpectedFilescreate, list, update, delete, getProgressFichiers attendus
SpaceMessagingsendMessage, listMessages, getReplies, markRead, deleteMessageMessagerie d'espace
MSPDashboardgetDashboard, listClients, getClientUsageDashboard MSP
ImportscreateConnection, listConnections, startImport, listJobs, cancelJobImport depuis sources externes
TextSearchsearch, getIndex, requeueSkippedOcrRecherche plein texte avec OCR

SDK Go

Installation :

go get github.com/secuaas/conformvault-sdk-go

Prerequis : Go 1.21+

Initialisation :

import cv "github.com/secuaas/conformvault-sdk-go"

client := cv.NewClient("cvk_live_votre_cle_api")

// Options
client := cv.NewClient("cvk_live_xxx",
    cv.WithBaseURL("https://api.conformvault.com/dev/v1"),
    cv.WithHTTPClient(&http.Client{Timeout: 60 * time.Second}),
)

Exemples d'utilisation :

ctx := context.Background()

// Lister les fichiers
files, err := client.Files.List(ctx, &cv.FileListOptions{
    FolderID: cv.String("folder-id"),
    Page: 1, Limit: 20,
})

// Uploader un fichier
f, _ := os.Open("document.pdf")
defer f.Close()
result, err := client.Files.Upload(ctx, f, "document.pdf", cv.String("folder-id"))

// Telecharger un fichier
reader, err := client.Files.Download(ctx, "file-id")
defer reader.Close()

// Creer un lien de partage
link, err := client.ShareLinks.Create(ctx, cv.CreateShareLinkRequest{
    FileID: cv.String("file-id"), Type: "download", ExpiresIn: 86400,
})

// Creer une enveloppe de signature
envelope, err := client.Signatures.Create(ctx, cv.CreateSignatureRequest{
    FileID: "file-id", Subject: "NDA",
    Signers: []cv.CreateSignatureSigner{
        {Email: "signataire@example.com", Name: "Jean Dupont", Role: "signer"},
    },
    ExpiryDays: 30,
})

// Generer une attestation Loi 25
pdfReader, err := client.Attestation.GenerateLoi25(ctx)

// Verifier un webhook
isValid := cv.VerifyWebhookSignature(payload, signatureHeader, "whsec_secret")

Gestion des erreurs :

if cv.IsNotFound(err) { /* 404 */ }
if cv.IsRateLimited(err) {
    rlErr := err.(*cv.RateLimitError)
    // rlErr.RetryAfter
}
if apiErr, ok := err.(*cv.APIError); ok {
    // apiErr.StatusCode, apiErr.Message
}

Thread-safety : Le client et tous les services sont safe pour un usage concurrent.

Version actuelle : 0.6.1 (35 services, 85 tests)

SDK Python

Installation :

pip install conformvault-sdk

Prerequis : Python 3.9+, depend de httpx

Initialisation :

from conformvault import ConformVault

client = ConformVault("cvk_live_votre_cle_api")

# Options
client = ConformVault("cvk_live_xxx",
    base_url="https://api.conformvault.com/dev/v1",
    timeout=60.0,
)

Support asynchrone :

from conformvault import AsyncConformVault

async with AsyncConformVault("cvk_live_xxx") as client:
    files = await client.files.list()

Exemples d'utilisation :

# Lister les fichiers
files = client.files.list(folder_id="folder-id", page=1, limit=20)

# Uploader un fichier
with open("document.pdf", "rb") as fp:
    result = client.files.upload(fp, "document.pdf", folder_id="folder-id")

# Telecharger
content = client.files.download("file-id")

# Lien de partage
from conformvault import CreateShareLinkRequest
link = client.share_links.create(CreateShareLinkRequest(
    file_id="file-id", type="download", expires_in=86400,
))

# Signature electronique
from conformvault import CreateSignatureRequest, CreateSignatureSigner
envelope = client.signatures.create(CreateSignatureRequest(
    file_id="file-id", subject="NDA",
    signers=[CreateSignatureSigner(email="signataire@example.com", name="Jean Dupont")],
    expiry_days=30,
))

# Attestation Loi 25
pdf_bytes = client.attestation.generate_loi25()

# Verification de webhook
from conformvault import verify_webhook_signature
is_valid = verify_webhook_signature(payload, signature_header, "whsec_secret")

Gestion des erreurs :

from conformvault import APIError, AuthenticationError, RateLimitError, is_not_found

try:
    file = client.files.get("id-inexistant")
except AuthenticationError:
    pass  # Cle API invalide (401)
except RateLimitError as e:
    print(f"Reessayer apres {e.retry_after}s")  # 429
except APIError as e:
    if is_not_found(e):
        pass  # 404
    print(f"Erreur {e.status_code}: {e.message}")

Version actuelle : 0.7.0 (35 services sync + async, 161 tests)

SDK TypeScript

Installation :

# Beta (depuis git)
npm install git+https://forge.secuaas.ovh/secuaas/conformvault-sdk-ts.git#v0.1.0

# Future (npm registry)
# npm install @conformvault/sdk

Prerequis : Node.js 18+ (fetch natif requis), TypeScript 5.x

Caracteristiques : Zero dependances runtime, ESM + CommonJS, retry automatique sur 429, types TypeScript complets.

Initialisation :

import { ConformVault } from '@conformvault/sdk';

const client = new ConformVault('cvk_live_votre_cle_api', {
  baseURL: 'https://api.conformvault.com/dev/v1', // defaut
  timeout: 30000, // 30s
  maxRetries: 3,  // retry automatique sur 429
});

Exemples d'utilisation :

// Lister les fichiers
const files = await client.files.list({ folderId: 'folder-123' });

// Uploader un fichier
const blob = new Blob(['contenu'], { type: 'text/plain' });
const uploaded = await client.files.upload(blob, 'fichier.txt');

// Telecharger
const data = await client.files.download('file-id');

// Lien de partage
const link = await client.shareLinks.create({
  file_id: 'file-id', type: 'download', expires_in: 86400,
});

// Signature electronique
const envelope = await client.signatures.create({
  file_id: 'file-abc',
  subject: 'NDA',
  signers: [{ email: 'signataire@example.com', name: 'Jean Dupont' }],
});

// Verification de webhook
import { verifyWebhookSignature } from '@conformvault/sdk';
const isValid = verifyWebhookSignature(rawBody, signatureHeader, 'whsec_secret');

Le format de signature du webhook est t=<timestamp>,s0=<hmac_hex>, ou le HMAC est calcule comme HMAC-SHA256(timestamp + "." + payload, secret).

Gestion des erreurs :

import { APIError, AuthenticationError, RateLimitError, isNotFound } from '@conformvault/sdk';

try {
  await client.files.get('id-inexistant');
} catch (error) {
  if (error instanceof AuthenticationError) { /* 401 */ }
  if (error instanceof RateLimitError) { console.log(error.retryAfter); }
  if (isNotFound(error)) { /* 404 */ }
  if (error instanceof APIError) { console.log(error.statusCode, error.message); }
}

Version actuelle : 2.4.1 (36 services, 108 tests)

Webhooks

ConformVault peut envoyer des notifications en temps reel via webhooks lorsque des evenements se produisent.

Evenements disponibles

  • file.uploaded, file.deleted, file.downloaded
  • folder.created, folder.deleted
  • share_link.created, share_link.accessed
  • signature.completed, signature.declined
  • user.created, user.deleted

Enregistrer un webhook

curl -X POST https://api.conformvault.com/dev/v1/webhooks \
  -H "Authorization: Bearer cvk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://votre-app.com/webhooks/conformvault",
    "events": ["file.uploaded", "signature.completed"]
  }'

Reponse :

{
  "id": "webhook-id",
  "url": "https://votre-app.com/webhooks/conformvault",
  "events": ["file.uploaded", "signature.completed"],
  "secret": "whsec_votre_secret"
}

Conservez le secret pour verifier les signatures des payloads entrants (HMAC-SHA256).

Verification de signature

Chaque requete webhook inclut un en-tete X-ConformVault-Signature (ou X-Webhook-Signature) contenant la signature HMAC-SHA256 du payload. Les trois SDKs fournissent une fonction VerifyWebhookSignature / verify_webhook_signature / verifyWebhookSignature pour valider cette signature.

Codes d'erreur HTTP

CodeSignification
200Succes
201Ressource creee
400Requete invalide (parametres manquants ou incorrects)
401Non authentifie (token invalide ou expire)
403Interdit (permissions insuffisantes)
404Ressource introuvable
409Conflit (ressource deja existante)
429Trop de requetes (rate limited)
500Erreur serveur interne

Rate limiting

  • Les endpoints d'authentification sont limites a 20 requetes/minute
  • Les mutations de facturation sont limitees a 10 requetes/minute par organisation
  • En cas de depassement, la reponse inclut un en-tete Retry-After
  • Les SDKs TypeScript gerent automatiquement les retries (3 tentatives par defaut)

On this page