# REST API Reference

Complete HTTP API documentation for the Provisioning platform covering 83+ endpoints across 9 platform services.

## Base URL

```text
 [https://api.provisioning.local/api/v1](https://api.provisioning.local/api/v1)
```

All endpoints are prefixed with `/api/v1` for version compatibility.

## Authentication

All API requests require authentication using JWT Bearer tokens:

```http
Authorization: Bearer <your-jwt-token>
```

Obtain tokens via the Authentication API endpoints.

## Common Response Format

All responses follow a consistent structure:

**Success Response**:

```json
{
  "status": "success",
  "data": { ... },
  "message": "Operation completed successfully",
  "timestamp": "2026-01-16T10:30:00Z"
}
```

**Error Response**:

```json
{
  "status": "error",
  "error": {
    "code": "ERR_CODE",
    "message": "Human-readable error message",
    "details": { ... }
  },
  "timestamp": "2026-01-16T10:30:00Z"
}
```

## HTTP Status Codes

| Code | Meaning | Usage |
| ---- | ------- | ----- |
| 200 | OK | Successful GET, PUT, PATCH requests |
| 201 | Created | Successful POST request creating resource |
| 202 | Accepted | Async operation accepted, check status |
| 204 | No Content | Successful DELETE request |
| 400 | Bad Request | Invalid request parameters |
| 401 | Unauthorized | Missing or invalid authentication |
| 403 | Forbidden | Valid auth but insufficient permissions |
| 404 | Not Found | Resource does not exist |
| 409 | Conflict | Resource conflict (duplicate name, etc.) |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Server error |
| 503 | Service Unavailable | Service temporarily unavailable |

## API Services

The platform exposes 9 distinct services with REST APIs:

1. **[Orchestrator](#orchestrator-api)** - Workflow execution and task management
2. **[Control Center](#control-center-api)** - Platform management and monitoring
3. **[Extension Registry](#extension-registry-api)** - Extension distribution
4. **[Auth Service](#auth-service-api)** - Authentication and identity
5. **[Vault Service](#vault-service-api)** - Secrets management
6. **[KMS Service](#kms-service-api)** - Key management and encryption
7. **[Audit Service](#audit-service-api)** - Audit logging and compliance
8. **[Policy Service](#policy-service-api)** - Authorization policies
9. **[Gateway Service](#gateway-service-api)** - API gateway and routing

## Orchestrator API

Workflow execution, task scheduling, and state management.

**Base Path**: `/api/v1/orchestrator`

### Submit Workflow

Submit a new workflow for execution.

**Endpoint**: `POST /workflows`

**Request**:

```json
{
  "name": "deploy-cluster",
  "type": "cluster",
  "operations": [
    {
      "id": "create-servers",
      "type": "server",
      "action": "create",
      "params": {
        "infra": "my-cluster.ncl"
      }
    },
    {
      "id": "install-k8s",
      "type": "taskserv",
      "action": "install",
      "params": {
        "name": "kubernetes"
      },
      "dependencies": ["create-servers"]
    }
  ],
  "priority": "normal",
  "checkpoint_enabled": true
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "workflow_id": "wf-20260116-abc123",
    "state": "queued",
    "created_at": "2026-01-16T10:30:00Z"
  }
}
```

### Get Workflow Status

Retrieve workflow execution status.

**Endpoint**: `GET /workflows/{workflow_id}`

**Response**:

```json
{
  "status": "success",
  "data": {
    "workflow_id": "wf-20260116-abc123",
    "name": "deploy-cluster",
    "state": "running",
    "progress": {
      "total_tasks": 2,
      "completed": 1,
      "failed": 0,
      "running": 1
    },
    "current_task": {
      "id": "install-k8s",
      "state": "running",
      "started_at": "2026-01-16T10:32:00Z"
    },
    "created_at": "2026-01-16T10:30:00Z",
    "updated_at": "2026-01-16T10:32:15Z"
  }
}
```

### List Workflows

List all workflows with optional filtering.

**Endpoint**: `GET /workflows`

**Query Parameters**:

- `state` (optional) - Filter by state: `queue| d runnin| g complete| d failed`
- `limit` (optional) - Maximum results (default: 50, max: 100)
- `offset` (optional) - Pagination offset

**Response**:

```json
{
  "status": "success",
  "data": {
    "workflows": [
      {
        "workflow_id": "wf-20260116-abc123",
        "name": "deploy-cluster",
        "state": "running",
        "created_at": "2026-01-16T10:30:00Z"
      }
    ],
    "total": 1,
    "limit": 50,
    "offset": 0
  }
}
```

### Cancel Workflow

Cancel a running workflow.

**Endpoint**: `POST /workflows/{workflow_id}/cancel`

**Response**:

```json
{
  "status": "success",
  "data": {
    "workflow_id": "wf-20260116-abc123",
    "state": "cancelled",
    "cancelled_at": "2026-01-16T10:35:00Z"
  }
}
```

### Get Task Logs

Retrieve logs for a specific task in a workflow.

**Endpoint**: `GET /workflows/{workflow_id}/tasks/{task_id}/logs`

**Query Parameters**:

- `lines` (optional) - Number of lines (default: 100)
- `follow` (optional) - Stream logs (SSE)

**Response**:

```json
{
  "status": "success",
  "data": {
    "task_id": "install-k8s",
    "logs": [
      {
        "timestamp": "2026-01-16T10:32:00Z",
        "level": "info",
        "message": "Starting Kubernetes installation"
      },
      {
        "timestamp": "2026-01-16T10:32:15Z",
        "level": "info",
        "message": "Downloading Kubernetes binaries"
      }
    ]
  }
}
```

### Resume Workflow

Resume a failed workflow from checkpoint.

**Endpoint**: `POST /workflows/{workflow_id}/resume`

**Request**:

```json
{
  "from_checkpoint": "create-servers",
  "skip_failed": false
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "workflow_id": "wf-20260116-abc123",
    "state": "running",
    "resumed_at": "2026-01-16T10:40:00Z"
  }
}
```

## Control Center API

Platform management, service control, and monitoring.

**Base Path**: `/api/v1/control-center`

### List Services

List all platform services and their status.

**Endpoint**: `GET /services`

**Response**:

```json
{
  "status": "success",
  "data": {
    "services": [
      {
        "name": "orchestrator",
        "state": "running",
        "health": "healthy",
        "uptime": 86400,
        "version": "1.0.0"
      },
      {
        "name": "control-center",
        "state": "running",
        "health": "healthy",
        "uptime": 86400,
        "version": "1.0.0"
      }
    ]
  }
}
```

### Get Service Health

Check health status of a specific service.

**Endpoint**: `GET /services/{service_name}/health`

**Response**:

```json
{
  "status": "success",
  "data": {
    "service": "orchestrator",
    "health": "healthy",
    "checks": {
      "api": "pass",
      "database": "pass",
      "storage": "pass"
    },
    "timestamp": "2026-01-16T10:30:00Z"
  }
}
```

### Start Service

Start a stopped platform service.

**Endpoint**: `POST /services/{service_name}/start`

**Response**:

```json
{
  "status": "success",
  "data": {
    "service": "orchestrator",
    "state": "starting",
    "message": "Service start initiated"
  }
}
```

### Stop Service

Gracefully stop a running service.

**Endpoint**: `POST /services/{service_name}/stop`

**Request**:

```json
{
  "force": false,
  "timeout": 30
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "service": "orchestrator",
    "state": "stopped",
    "message": "Service stopped gracefully"
  }
}
```

### Restart Service

Restart a platform service.

**Endpoint**: `POST /services/{service_name}/restart`

**Response**:

```json
{
  "status": "success",
  "data": {
    "service": "orchestrator",
    "state": "restarting",
    "message": "Service restart initiated"
  }
}
```

### Get Service Configuration

Retrieve service configuration.

**Endpoint**: `GET /services/{service_name}/config`

**Response**:

```json
{
  "status": "success",
  "data": {
    "service": "orchestrator",
    "config": {
      "port": 8080,
      "max_workers": 10,
      "checkpoint_enabled": true
    }
  }
}
```

### Update Service Configuration

Update service configuration (requires restart).

**Endpoint**: `PUT /services/{service_name}/config`

**Request**:

```json
{
  "config": {
    "max_workers": 20
  },
  "restart": true
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "service": "orchestrator",
    "config_updated": true,
    "restart_required": true
  }
}
```

### Get Platform Metrics

Retrieve platform-wide metrics.

**Endpoint**: `GET /metrics`

**Response**:

```json
{
  "status": "success",
  "data": {
    "platform": {
      "uptime": 86400,
      "version": "1.0.0"
    },
    "resources": {
      "cpu_usage": 45.2,
      "memory_usage": 62.8,
      "disk_usage": 38.1
    },
    "workflows": {
      "total": 150,
      "running": 5,
      "queued": 2,
      "failed": 3
    },
    "timestamp": "2026-01-16T10:30:00Z"
  }
}
```

## Extension Registry API

Extension distribution, versioning, and discovery.

**Base Path**: `/api/v1/registry`

### List Extensions

List available extensions.

**Endpoint**: `GET /extensions`

**Query Parameters**:

- `type` (optional) - Filter by type: `provide| r taskser| v cluste| r workflow`
- `search` (optional) - Search by name or description

**Response**:

```json
{
  "status": "success",
  "data": {
    "extensions": [
      {
        "name": "kubernetes",
        "type": "taskserv",
        "version": "1.29.0",
        "description": "Kubernetes orchestration platform",
        "dependencies": ["containerd", "etcd"]
      }
    ],
    "total": 1
  }
}
```

### Get Extension Details

Get detailed information about an extension.

**Endpoint**: `GET /extensions/{extension_name}`

**Response**:

```json
{
  "status": "success",
  "data": {
    "name": "kubernetes",
    "type": "taskserv",
    "version": "1.29.0",
    "description": "Kubernetes orchestration platform",
    "dependencies": ["containerd", "etcd"],
    "versions": ["1.29.0", "1.28.5", "1.27.10"],
    "metadata": {
      "author": "Provisioning Team",
      "license": "Apache-2.0",
      "homepage": " [https://kubernetes.io"](https://kubernetes.io")
    }
  }
}
```

### Download Extension

Download an extension package.

**Endpoint**: `GET /extensions/{extension_name}/download`

**Query Parameters**:

- `version` (optional) - Specific version (default: latest)

**Response**: Binary OCI image blob

### Publish Extension

Publish a new extension or version.

**Endpoint**: `POST /extensions`

**Request**: Multipart form data with OCI image

**Response**:

```json
{
  "status": "success",
  "data": {
    "name": "kubernetes",
    "version": "1.29.0",
    "published_at": "2026-01-16T10:30:00Z"
  }
}
```

## Auth Service API

Authentication, identity management, and MFA.

**Base Path**: `/api/v1/auth`

### Login

Authenticate user and obtain JWT token.

**Endpoint**: `POST /login`

**Request**:

```json
{
  "username": "admin",
  "password": "secure-password"
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "refresh-token-abc123",
    "expires_in": 3600,
    "user": {
      "id": "user-123",
      "username": "admin",
      "roles": ["admin"]
    }
  }
}
```

### MFA Challenge

Request MFA challenge for two-factor authentication.

**Endpoint**: `POST /mfa/challenge`

**Request**:

```json
{
  "username": "admin",
  "password": "secure-password"
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "challenge_id": "challenge-abc123",
    "methods": ["totp", "webauthn"],
    "expires_in": 300
  }
}
```

### MFA Verify

Verify MFA code and complete authentication.

**Endpoint**: `POST /mfa/verify`

**Request**:

```json
{
  "challenge_id": "challenge-abc123",
  "method": "totp",
  "code": "123456"
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "refresh-token-abc123",
    "expires_in": 3600
  }
}
```

### Refresh Token

Obtain new access token using refresh token.

**Endpoint**: `POST /refresh`

**Request**:

```json
{
  "refresh_token": "refresh-token-abc123"
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "expires_in": 3600
  }
}
```

### Logout

Invalidate current session and tokens.

**Endpoint**: `POST /logout`

**Request**:

```json
{
  "refresh_token": "refresh-token-abc123"
}
```

**Response**:

```json
{
  "status": "success",
  "message": "Logged out successfully"
}
```

### Create User

Create a new user account (admin only).

**Endpoint**: `POST /users`

**Request**:

```json
{
  "username": "developer",
  "email": "[dev@example.com](mailto:dev@example.com)",
  "password": "secure-password",
  "roles": ["developer"]
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "user_id": "user-456",
    "username": "developer",
    "created_at": "2026-01-16T10:30:00Z"
  }
}
```

### List Users

List all users (admin only).

**Endpoint**: `GET /users`

**Response**:

```json
{
  "status": "success",
  "data": {
    "users": [
      {
        "user_id": "user-123",
        "username": "admin",
        "email": "[admin@example.com](mailto:admin@example.com)",
        "roles": ["admin"],
        "created_at": "2026-01-01T00:00:00Z"
      }
    ],
    "total": 1
  }
}
```

## Vault Service API

Secrets management and dynamic credentials.

**Base Path**: `/api/v1/vault`

### Store Secret

Store a new secret.

**Endpoint**: `POST /secrets`

**Request**:

```json
{
  "path": "database/postgres/password",
  "data": {
    "username": "dbuser",
    "password": "db-password"
  },
  "metadata": {
    "description": "PostgreSQL credentials"
  }
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "path": "database/postgres/password",
    "version": 1,
    "created_at": "2026-01-16T10:30:00Z"
  }
}
```

### Retrieve Secret

Retrieve a stored secret.

**Endpoint**: `GET /secrets/{path}`

**Query Parameters**:

- `version` (optional) - Specific version (default: latest)

**Response**:

```json
{
  "status": "success",
  "data": {
    "path": "database/postgres/password",
    "version": 1,
    "data": {
      "username": "dbuser",
      "password": "db-password"
    },
    "metadata": {
      "description": "PostgreSQL credentials"
    },
    "created_at": "2026-01-16T10:30:00Z"
  }
}
```

### List Secrets

List all secret paths.

**Endpoint**: `GET /secrets`

**Query Parameters**:

- `prefix` (optional) - Filter by path prefix

**Response**:

```json
{
  "status": "success",
  "data": {
    "secrets": [
      {
        "path": "database/postgres/password",
        "versions": 1,
        "updated_at": "2026-01-16T10:30:00Z"
      }
    ],
    "total": 1
  }
}
```

### Delete Secret

Delete a secret (soft delete, preserves versions).

**Endpoint**: `DELETE /secrets/{path}`

**Response**:

```json
{
  "status": "success",
  "message": "Secret deleted successfully"
}
```

### Generate Dynamic Credentials

Generate temporary credentials for supported backends.

**Endpoint**: `POST /dynamic/{backend}/generate`

**Request**:

```json
{
  "role": "readonly",
  "ttl": 3600
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "credentials": {
      "username": "v-readonly-abc123",
      "password": "temporary-password"
    },
    "ttl": 3600,
    "expires_at": "2026-01-16T11:30:00Z"
  }
}
```

## KMS Service API

Key management, encryption, and decryption.

**Base Path**: `/api/v1/kms`

### Encrypt Data

Encrypt data using a managed key.

**Endpoint**: `POST /encrypt`

**Request**:

```json
{
  "key_id": "master-key-01",
  "plaintext": "sensitive data",
  "context": {
    "purpose": "config-encryption"
  }
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "ciphertext": "AQICAHh...",
    "key_id": "master-key-01"
  }
}
```

### Decrypt Data

Decrypt previously encrypted data.

**Endpoint**: `POST /decrypt`

**Request**:

```json
{
  "ciphertext": "AQICAHh...",
  "context": {
    "purpose": "config-encryption"
  }
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "plaintext": "sensitive data",
    "key_id": "master-key-01"
  }
}
```

### Create Key

Create a new encryption key.

**Endpoint**: `POST /keys`

**Request**:

```json
{
  "key_id": "app-key-01",
  "algorithm": "AES-256-GCM",
  "metadata": {
    "description": "Application encryption key"
  }
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "key_id": "app-key-01",
    "algorithm": "AES-256-GCM",
    "created_at": "2026-01-16T10:30:00Z"
  }
}
```

### List Keys

List all encryption keys.

**Endpoint**: `GET /keys`

**Response**:

```json
{
  "status": "success",
  "data": {
    "keys": [
      {
        "key_id": "master-key-01",
        "algorithm": "AES-256-GCM",
        "state": "enabled",
        "created_at": "2026-01-01T00:00:00Z"
      }
    ],
    "total": 1
  }
}
```

### Rotate Key

Rotate an encryption key.

**Endpoint**: `POST /keys/{key_id}/rotate`

**Response**:

```json
{
  "status": "success",
  "data": {
    "key_id": "master-key-01",
    "version": 2,
    "rotated_at": "2026-01-16T10:30:00Z"
  }
}
```

## Audit Service API

Audit logging, compliance tracking, and event queries.

**Base Path**: `/api/v1/audit`

### Query Audit Logs

Query audit events with filtering.

**Endpoint**: `GET /logs`

**Query Parameters**:

- `user` (optional) - Filter by user ID
- `action` (optional) - Filter by action type
- `resource` (optional) - Filter by resource type
- `start_time` (optional) - Start timestamp
- `end_time` (optional) - End timestamp
- `limit` (optional) - Maximum results (default: 100)

**Response**:

```json
{
  "status": "success",
  "data": {
    "events": [
      {
        "event_id": "evt-abc123",
        "timestamp": "2026-01-16T10:30:00Z",
        "user": "admin",
        "action": "workflow.submit",
        "resource": "wf-20260116-abc123",
        "result": "success",
        "metadata": {
          "workflow_name": "deploy-cluster"
        }
      }
    ],
    "total": 1
  }
}
```

### Export Audit Logs

Export audit logs in various formats.

**Endpoint**: `GET /export`

**Query Parameters**:

- `format` - Export format: `jso| n cs| v syslo| g ce| f splunk`
- `start_time` - Start timestamp
- `end_time` - End timestamp

**Response**: File download in requested format

### Get Compliance Report

Generate compliance report for specific period.

**Endpoint**: `GET /compliance`

**Query Parameters**:

- `standard` - Compliance standard: `gdp| r soc| 2 iso27001`
- `start_time` - Report start time
- `end_time` - Report end time

**Response**:

```json
{
  "status": "success",
  "data": {
    "standard": "soc2",
    "period": {
      "start": "2026-01-01T00:00:00Z",
      "end": "2026-01-16T23:59:59Z"
    },
    "controls": [
      {
        "control_id": "CC6.1",
        "status": "compliant",
        "evidence_count": 150
      }
    ],
    "summary": {
      "total_controls": 10,
      "compliant": 9,
      "non_compliant": 1
    }
  }
}
```

## Policy Service API

Authorization policy management (Cedar policies).

**Base Path**: `/api/v1/policy`

### Evaluate Policy

Evaluate authorization request against policies.

**Endpoint**: `POST /evaluate`

**Request**:

```json
{
  "principal": "User::\"admin\"",
  "action": "Action::\"workflow.submit\"",
  "resource": "Workflow::\"deploy-cluster\"",
  "context": {
    "time": "2026-01-16T10:30:00Z"
  }
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "decision": "allow",
    "policies": ["admin-full-access"],
    "diagnostics": {
      "reason": "User has admin role"
    }
  }
}
```

### Create Policy

Create a new authorization policy.

**Endpoint**: `POST /policies`

**Request**:

```json
{
  "policy_id": "developer-read-only",
  "content": "permit(principal in Role::\"developer\", action == Action::\"read\", resource);",
  "description": "Developers have read-only access"
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "policy_id": "developer-read-only",
    "created_at": "2026-01-16T10:30:00Z"
  }
}
```

### List Policies

List all authorization policies.

**Endpoint**: `GET /policies`

**Response**:

```json
{
  "status": "success",
  "data": {
    "policies": [
      {
        "policy_id": "admin-full-access",
        "description": "Admins have full access",
        "created_at": "2026-01-01T00:00:00Z"
      }
    ],
    "total": 1
  }
}
```

### Update Policy

Update an existing policy (hot reload).

**Endpoint**: `PUT /policies/{policy_id}`

**Request**:

```json
{
  "content": "permit(principal in Role::\"developer\", action == Action::\"read\", resource);"
}
```

**Response**:

```json
{
  "status": "success",
  "data": {
    "policy_id": "developer-read-only",
    "updated_at": "2026-01-16T10:30:00Z",
    "reloaded": true
  }
}
```

### Delete Policy

Delete an authorization policy.

**Endpoint**: `DELETE /policies/{policy_id}`

**Response**:

```json
{
  "status": "success",
  "message": "Policy deleted successfully"
}
```

## Gateway Service API

API gateway, routing, and rate limiting.

**Base Path**: `/api/v1/gateway`

### Get Route Configuration

Retrieve current routing configuration.

**Endpoint**: `GET /routes`

**Response**:

```json
{
  "status": "success",
  "data": {
    "routes": [
      {
        "path": "/api/v1/orchestrator/*",
        "target": " [http://orchestrator:8080",](http://orchestrator:8080",)
        "methods": ["GET", "POST", "PUT", "DELETE"],
        "auth_required": true
      }
    ]
  }
}
```

### Update Routes

Update gateway routing (hot reload).

**Endpoint**: `PUT /routes`

**Request**:

```json
{
  "routes": [
    {
      "path": "/api/v1/custom/*",
      "target": " [http://custom-service:9000",](http://custom-service:9000",)
      "methods": ["GET", "POST"],
      "auth_required": true
    }
  ]
}
```

**Response**:

```json
{
  "status": "success",
  "message": "Routes updated successfully"
}
```

### Get Rate Limits

Retrieve rate limiting configuration.

**Endpoint**: `GET /rate-limits`

**Response**:

```json
{
  "status": "success",
  "data": {
    "global": {
      "requests_per_minute": 100,
      "burst": 20
    },
    "per_user": {
      "requests_per_minute": 60,
      "burst": 10
    }
  }
}
```

## Error Codes

Common error codes returned by the API:

| Code | Description |
| ---- | ----------- |
| `ERR_AUTH_INVALID` | Invalid authentication credentials |
| `ERR_AUTH_EXPIRED` | Token expired |
| `ERR_AUTH_MFA_REQUIRED` | MFA verification required |
| `ERR_FORBIDDEN` | Insufficient permissions |
| `ERR_NOT_FOUND` | Resource not found |
| `ERR_CONFLICT` | Resource conflict |
| `ERR_VALIDATION` | Invalid request parameters |
| `ERR_RATE_LIMIT` | Rate limit exceeded |
| `ERR_WORKFLOW_FAILED` | Workflow execution failed |
| `ERR_SERVICE_UNAVAILABLE` | Service temporarily unavailable |
| `ERR_INTERNAL` | Internal server error |

## Rate Limiting Headers

All responses include rate limiting headers:

```http
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1642334400
X-RateLimit-Retry-After: 60
```

## Pagination

List endpoints support pagination using offset-based pagination:

**Request**:

```http
GET /api/v1/workflows?limit=50&offset=100
```

**Response includes**:

```json
{
  "data": { ... },
  "total": 500,
  "limit": 50,
  "offset": 100,
  "has_more": true
}
```

## Webhooks

Platform supports webhook notifications for async operations:

**Webhook Payload**:

```json
{
  "event": "workflow.completed",
  "timestamp": "2026-01-16T10:30:00Z",
  "data": {
    "workflow_id": "wf-20260116-abc123",
    "state": "completed"
  },
  "signature": "sha256=abc123..."
}
```

Configure webhooks via Control Center API.

## Related Documentation

- **[Orchestrator API Details](orchestrator-api.md)** - Deep dive into workflow API
- **[Control Center API Details](control-center-api.md)** - Platform management details
- **[CLI Commands](cli-commands.md)** - CLI alternatives to REST API
- **[Authentication Guide](../security/authentication.md)** - Auth implementation details
- **[API Examples](examples.md)** - Integration examples and patterns
