AUTHENTIFICATION

Authentification OAuth 2.0

L'API utilise OAuth 2.0 / OpenID Connect pour toutes les requêtes authentifiées.

Authorization Code

Flux d'autorisation standard pour les applications serveur. client_id + client_secret, redirect URI obligatoire, scopes granulaires, refresh tokens avec rotation.

OpenID Connect

Extension d'identité sur OAuth 2.0 pour les applications mobiles et SPA. ID Token (JWT), UserInfo endpoint, PKCE pour les clients publics, sessions avec expiration configurable.

ENDPOINTS

Endpoints principaux

Les endpoints clés de l'API — documentation simplifiée, en cours de finalisation.

Liste des datasets accessibles. Auth : Bearer token. Pagination, filtrage par catégorie et secteur.

Détail d'un dataset — métadonnées, schéma, échantillon. Auth : Bearer token.

Demande d'accès à un dataset. Auth : Bearer token. Finalité, périmètre, conformité.

Datasets auxquels l'utilisateur a accès. Auth : Bearer + RLS.

Liste des rapports générés. Auth : Bearer + RLS.

Générer un rapport à partir d'un dataset. Auth : Bearer token.

WEBHOOKS

Webhooks & rate limiting

Recevez des notifications en temps réel et gérez vos quotas d'appels.

Événements supportés

dataset.access_approved, dataset.access_revoked, dataset.updated, powens.connection_created, powens.sync_completed, report.generated

Sécurité des webhooks

Signature HMAC-SHA256 dans le header. Secret partagé configurable. Retry automatique (3 tentatives, backoff exponentiel). HTTPS obligatoire.

Rate limiting par plan

Starter : 60 req/min, 10K/jour. Growth : 300 req/min, 100K/jour. Scale : 1000 req/min, 1M/jour. Enterprise : sur mesure.

Gestion des erreurs

400 Bad Request, 401 Unauthorized, 403 Forbidden (scope RLS), 404 Not Found, 429 Too Many Requests, 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable.

SDK

SDK & intégrations

Bibliothèques et connecteurs pour accélérer votre intégration.

Node.js SDK

import { MYDATABAKExchange } from '@mydatabak/sdk'; const client = new MYDATABAKExchange({ apiKey: process.env.MDB_API_KEY });

Python SDK

from mydatabak import Client; client = Client(api_key=os.environ['MDB_API_KEY']); datasets = client.datasets.list()

Powens — Agrégation bancaire. Webhooks — Notifications temps réel. Snowflake — Data warehouse (à venir). BigQuery — Analytics (à venir).

Les exemples utilisent des variables fictives (YOUR_CLIENT_ID, YOUR_CLIENT_SECRET). Les endpoints sont en cours de finalisation.

EXEMPLES

Exemples de réponses API

Payloads fictifs de démonstration — structures réelles, données simulées.

GET /datasets/ds_finance_cashflow_001
{
  "dataset_id": "ds_finance_cashflow_001",
  "name": "Flux bancaires anonymisés",
  "vertical": "finance",
  "records_available": 482000,
  "freshness": "24h",
  "consent_coverage": "98.7%",
  "access_modes": ["api", "report", "sample"],
  "sensitivity": "medium",
  "schema_version": "2.1.0",
  "status": "available_demo",
  "fields": ["profile_id_hash", "inflow_monthly", "outflow_monthly", 
             "savings_capacity", "expense_categories", "stability_score"]
}
POST /access-requests
// Request
{
  "dataset_id": "ds_finance_cashflow_001",
  "purpose": "credit_appetite_scoring",
  "legal_basis": "consent",
  "duration": "90_days",
  "access_mode": "api",
  "environment": "sandbox",
  "finality_description": "Scoring appétence crédit auto"
}

// Response 201 Created
{
  "request_id": "req_demo_2026_001",
  "status": "pending_approval",
  "submitted_at": "2026-05-13T10:00:00Z",
  "estimated_review": "48h",
  "compliance_check": "automated"
}
Webhook payload — dataset.access_granted
{
  "event": "dataset.access_granted",
  "request_id": "req_demo_2026_001",
  "dataset_id": "ds_finance_cashflow_001",
  "organization_id": "org_demo",
  "granted_by": "dpo_review",
  "status": "granted",
  "valid_until": "2026-08-11T10:00:00Z",
  "timestamp": "2026-05-13T10:00:00Z",
  "signature": "sha256=..."
}

* Exemples fictifs — structures réelles, données simulées, IDs de démonstration

ERREURS

Codes erreur

Gestion des erreurs et retry strategy.

Code Erreur Description
400 invalid_request Paramètres manquants ou invalides
401 unauthorized Token invalide ou expiré
403 consent_scope_required Accès hors périmètre consentement
404 dataset_not_found Dataset inexistant ou indisponible
409 access_request_pending Demande d'accès déjà en cours
429 rate_limit_exceeded Quota dépassé — retry après Retry-After
500 internal_error Erreur serveur — contacter support
QUALITÉ & LINEAGE

Métadonnées de qualité

Chaque dataset expose ses métriques de qualité et son lineage de transformation.

GET /datasets/{id}/quality
{
  "dataset_id": "ds_finance_cashflow_001",
  "quality_score": 0.94,
  "freshness": "24h",
  "freshness_score": 0.98,
  "completeness": 0.96,
  "consent_coverage": 0.987,
  "consistency": 0.94,
  "duplicates": 0.012,
  "source_reliability": "verified_connection",
  "transformation_layer": "agg_insight",
  "last_quality_check": "2026-05-13T08:00:00Z",
  "next_refresh": "2026-05-14T08:00:00Z"
}
GET /datasets/{id}/lineage
{
  "dataset_id": "ds_finance_cashflow_001",
  "name": "Flux bancaires anonymisés",
  "layers": [
    {
      "layer": "raw_proof",
      "description": "Données source conservées comme preuve, non vendues",
      "retention": "90_jours",
      "access": "restricted_dpo_only"
    },
    {
      "layer": "structured_events",
      "description": "Données parsées, normalisées, typées",
      "transformations": ["parsing", "validation", "categorization"]
    },
    {
      "layer": "aggregated_signals",
      "description": "Signaux agrégés, anonymisés par segment",
      "anonymization": "k-anonymity_k=5",
      "granularity": "segment_level"
    },
    {
      "layer": "api_insight",
      "description": "Scores et signaux activables via API",
      "access_modes": ["api", "report", "webhook"]
    }
  ],
  "raw_export_allowed": false,
  "audit_required": true,
  "transformation_documentation": "/docs/transformations/cashflow_v2.1.pdf"
}

Modèle de transformation RAW → STRUCT → AGG → INSIGHT/API

RAW
Preuve source
STRUCT
Normalisée
AGG
Agrégée
INSIGHT/API
Activable

La valeur ne vient pas de la collecte brute. Elle vient de la transformation : preuve conservée, données structurées, signaux agrégés, insights activables — avec traçabilité complète à chaque étape.

* Exemples fictifs — structures réelles, données simulées