State API

Verwalten Sie den SDK-State für Ihren Tenant

Übersicht

Die State API ermöglicht das Speichern und Abrufen des kompletten SDK-States. Der State enthält alle Compliance-Daten: Use Cases, Risiken, Controls, Checkpoints und mehr.

Versionierung

Der State wird mit optimistischem Locking gespeichert. Bei jedem Speichern wird die Version erhöht. Bei Konflikten erhalten Sie einen 409-Fehler.

GET /state/{tenantId}

Lädt den aktuellen SDK-State für einen Tenant.

Request

cURL
curl -X GET "https://api.breakpilot.io/sdk/v1/state/your-tenant-id" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response (200 OK)

Response
{
  "success": true,
  "data": {
    "version": "1.0.0",
    "lastModified": "2026-02-04T12:00:00Z",
    "tenantId": "your-tenant-id",
    "userId": "user-123",
    "subscription": "PROFESSIONAL",
    "currentPhase": 1,
    "currentStep": "use-case-workshop",
    "completedSteps": ["use-case-workshop", "screening"],
    "checkpoints": {
      "CP-UC": {
        "checkpointId": "CP-UC",
        "passed": true,
        "validatedAt": "2026-02-01T10:00:00Z",
        "validatedBy": "user-123",
        "errors": [],
        "warnings": []
      }
    },
    "useCases": [
      {
        "id": "uc-1",
        "name": "KI-Kundenanalyse",
        "description": "...",
        "category": "Marketing",
        "stepsCompleted": 5,
        "assessmentResult": {
          "riskLevel": "HIGH",
          "dsfaRequired": true,
          "aiActClassification": "LIMITED"
        }
      }
    ],
    "risks": [...],
    "controls": [...],
    "dsfa": {...},
    "toms": [...],
    "vvt": [...]
  },
  "meta": {
    "version": 5,
    "etag": "W/\"abc123\""
  }
}

Response (404 Not Found)

Response
{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "No state found for tenant your-tenant-id"
  }
}

POST /state

Speichert den SDK-State. Unterstützt Versionierung und optimistisches Locking.

Request Body

ParameterTypeRequiredDescription
tenantIdstringYesEindeutige Tenant-ID
userIdstringNoUser-ID für Audit-Trail
stateSDKStateYesDer komplette SDK-State
expectedVersionnumberNoErwartete Version für optimistisches Locking

Request

cURL
curl -X POST "https://api.breakpilot.io/sdk/v1/state" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "If-Match: W/\"abc123\"" \
  -d '{
    "tenantId": "your-tenant-id",
    "userId": "user-123",
    "state": {
      "currentPhase": 1,
      "currentStep": "risks",
      "useCases": [...],
      "risks": [...]
    }
  }'

Response (200 OK)

Response
{
  "success": true,
  "data": {
    "tenantId": "your-tenant-id",
    "version": 6,
    "updatedAt": "2026-02-04T12:05:00Z"
  },
  "meta": {
    "etag": "W/\"def456\""
  }
}

Response (409 Conflict)

Response
{
  "success": false,
  "error": {
    "code": "CONFLICT",
    "message": "Version conflict: expected 5, but current is 6",
    "details": {
      "expectedVersion": 5,
      "currentVersion": 6
    }
  }
}

Konfliktbehandlung

Bei einem 409-Fehler sollten Sie den State erneut laden, Ihre Änderungen mergen und erneut speichern.

DELETE /state/{tenantId}

Löscht den kompletten State für einen Tenant.

Request

cURL
curl -X DELETE "https://api.breakpilot.io/sdk/v1/state/your-tenant-id" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response (200 OK)

Response
{
  "success": true,
  "data": {
    "tenantId": "your-tenant-id",
    "deleted": true
  }
}

State-Struktur

Der SDKState enthält alle Compliance-Daten:

types.ts
interface SDKState {
  // Metadata
  version: string
  lastModified: Date

  // Tenant & User
  tenantId: string
  userId: string
  subscription: 'FREE' | 'STARTER' | 'PROFESSIONAL' | 'ENTERPRISE'

  // Progress
  currentPhase: 1 | 2
  currentStep: string
  completedSteps: string[]
  checkpoints: Record<string, CheckpointStatus>

  // Phase 1 Data
  useCases: UseCaseAssessment[]
  activeUseCase: string | null
  screening: ScreeningResult | null
  modules: ServiceModule[]
  requirements: Requirement[]
  controls: Control[]
  evidence: Evidence[]
  checklist: ChecklistItem[]
  risks: Risk[]

  // Phase 2 Data
  aiActClassification: AIActResult | null
  obligations: Obligation[]
  dsfa: DSFA | null
  toms: TOM[]
  retentionPolicies: RetentionPolicy[]
  vvt: ProcessingActivity[]
  documents: LegalDocument[]
  cookieBanner: CookieBannerConfig | null
  consents: ConsentRecord[]
  dsrConfig: DSRConfig | null
  escalationWorkflows: EscalationWorkflow[]

  // UI State
  preferences: UserPreferences
}

Beispiel: SDK Integration

sdk-client.ts
import { getSDKApiClient } from '@breakpilot/compliance-sdk'

const client = getSDKApiClient('your-tenant-id')

// State laden
const state = await client.getState()
console.log('Current step:', state.currentStep)
console.log('Use cases:', state.useCases.length)

// State speichern
await client.saveState({
  ...state,
  currentStep: 'risks',
  risks: [...state.risks, newRisk],
})