# Flowg8 · Flow erstellen

Erstelle ein Designer-Dokument mit typisierten Feldern und Node-Graph. Dies speichert einen Entwurf und startet keinen Prozess.

Ersetze die Beispiel-groupId durch eine vorhandene Workspace-Freigabegruppe. Maximal 30 Felder (Text, Zahl, Boolean, ISO-Datum, Auswahl) und 40 Nodes (start, condition, approval, end).

Bedingungen referenzieren Feldschlüssel mit all/any und eq, neq, gt, gte, lt, lte oder contains. Interne Freigabe-Nodes referenzieren groupId. Externe verwenden groupId:null und externalApprover:{source:„email“,email:„reviewer@example.com“} oder {source:„field“,field:„recipientEmail“,allowedDomains:[„example.com“]}. Das referenzierte Feld muss ein Text-/E-Mail-Pflichtfeld sein. sharedFields benennt extern sichtbare Antragsfelder (Standard []). Verbinde vor Veröffentlichung alle Ausgänge. Schleifen und unerreichbare Nodes werden abgewiesen.

Freigabe-Ausgänge: next führt bei Genehmigung weiter, rejectedNext bei Ablehnung. Verbinde beide bei neuen Flows. Beide können zu einer Bedingung, einer weiteren Freigabe oder einem Ende führen. Ohne rejectedNext bleibt die bisherige sofortige Ablehnung erhalten; null ist ein unverbundener Entwurfsausgang und verhindert die Veröffentlichung. Nur Gates auf dem tatsächlichen Entscheidungspfad werden aktiv.

Alternative für reine Definitionen: POST /v1/flows {name, definition}; POST /v1/flows/{flowId}/versions {definition}; POST /v1/flow-versions/{versionId}/publish {}. Beide Schema-Versionen werden unterstützt.

## POST /v1/designer-flows

Authentication: restricted integration key (scope: flows:write) or Flowg8 sign-in access token
Required tenant header: X-Organization-Id.
Required user permissions: Administrator oder Sandbox-Entwickler erforderlich. The API checks current membership, roles, key scopes and resource permissions on every request. Documentation visibility grants no access.

## Input parameters
- name (string, required): min length 1 · max length 120
- accessScope (string, optional): min length 1 · max length 60
- definition (object, required): 
- presentation (object, required): 

## Request example (replace example IDs)

```sh
curl -X POST "https://api.flowg8.io/v1/designer-flows" \
  -H "authorization: Bearer $FLOWG8_API_KEY" \
  -H "x-organization-id: 10000000-0000-4000-8000-000000000001" \
  -H "idempotency-key: example-create-flow-001" \
  -H "content-type: application/json" \
  --data-raw '{
  "name": "Deployment approval",
  "definition": {
    "schemaVersion": 2,
    "fields": [
      {
        "key": "environment",
        "label": "Environment",
        "type": "select",
        "required": true,
        "options": [
          "staging",
          "production"
        ],
        "min": null,
        "max": null
      }
    ],
    "nodes": [
      {
        "id": "start",
        "type": "start",
        "label": "Request received",
        "next": "approval"
      },
      {
        "id": "approval",
        "type": "approval",
        "label": "Operations approval",
        "groupId": "10000000-0000-4000-8000-000000000009",
        "next": "end"
      },
      {
        "id": "end",
        "type": "end",
        "label": "Approved",
        "outcome": "approved"
      }
    ]
  },
  "presentation": {
    "names": {
      "api": "Request",
      "amount": "Condition",
      "end": "Complete"
    },
    "description": "Operations approves a deployment.",
    "positions": {}
  }
}'
```

## Response excerpt

```json
{
  "id": "10000000-0000-4000-8000-000000000002",
  "draft": {
    "revision": 1,
    "publishedVersionId": null
  }
}
```

Source: /docs/create-flow
Full schemas: /docs/openapi.json
