---
title: "Create a tenant-scoped CET Workbench governed skill draft (issue #640)"
method: POST
path: "/api/workbench/admin/user-mappings"
tags: ["Workbench"]
---

# Create a tenant-scoped CET Workbench governed skill draft (issue #640)

`POST /api/workbench/admin/user-mappings`

## Request

- Base URL: `https://api.cernion.de`
- URL: `https://api.cernion.de/api/workbench/admin/user-mappings`
- Auth: none declared

CET-governed Workbench/Tenant-Gateway API for Open WebUI clients. Tokens stay server-side; CET remains case-state and governance authority.

## Query parameters

- `token` string

## Request body

- object
  - `skillId` string: Caller-supplied tenant-scoped skill id
  - `title` string: Skill title
  - `description` string: Skill description
  - `domains` string[]
  - `triggerPatterns` string[]
  - `examplePrompts` string[]
  - `applicableRoles` string[]
  - `requiredEvidence` string[]
  - `steps` string[]
  - `allowedActions` string[]
  - `blockedActions` string[]
  - `noCallGuards` string[]
  - `handoffDomains` string[]
  - `capabilityHints` string[]
  - `receiptHints` string[]
  - `token` string: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.

## Response `200`

Workbench response

- object
  - `saved` boolean: Whether the skill lifecycle mutation succeeded
  - `skill` object
    - `skillId` string: Tenant-scoped CET Workbench skill/playbook id
    - `tenantId` string: Tenant id
    - `title` string: Skill title
    - `description` string: Skill description
    - `domains` string[]
    - `triggerPatterns` string[]
    - `examplePrompts` string[]
    - `applicableRoles` string[]
    - `requiredEvidence` string[]
    - `steps` string[]
    - `allowedActions` string[]
    - `blockedActions` string[]
    - `noCallGuards` string[]
    - `handoffDomains` string[]
    - `capabilityHints` string[]
    - `receiptHints` string[]
    - `status` 'draft' | 'proposed' | 'active' | 'deprecated' | 'archived': Skill lifecycle status
    - `version` number: Skill content version
    - `createdBy` string: Actor id that created the skill
    - `approvedBy` string: Actor id that activated the skill
    - `createdAt` string: ISO timestamp
    - `updatedAt` string: ISO timestamp
    - `auditRefs` string[]
  - `idempotent` boolean: True when a retried mutation was a no-op

## Other responses

- `403`: Tenant, actor, role or sensitivity denied
- `404`: Workbench resource not found
- `409`: Stale or conflicting mapping
- `422`: Invalid workbench request

---

[API](https://skmtc.dev/cernion/apis/cernion-energy-tools-api.md) · [All operations](https://skmtc.dev/cernion/apis/cernion-energy-tools-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cernion/apis/cernion-energy-tools-api/revisions/cdb94473b538?raw)
