{
  "openapi": "3.1.0",
  "info": {
    "title": "Entenhausen Municipal Demo API",
    "version": "1.0.0",
    "description": "A fictional, isolated municipal sandbox. Fixed synthetic profiles and catalogue values only. No real identity, payment, booking, application, government decision or external notification. Always show a review and obtain explicit user confirmation before submit. Received requests are not approvals. Store the bearer capability privately and never place it in AI prompts or URLs. Maximum 40 cases per world; 24-hour lifetime; 15-minute review. Idempotent retries use the same key and exact JSON payload.",
    "contact": {
      "url": "https://entenhausen.stage.dev/api-entdecken"
    }
  },
  "servers": [
    {
      "url": "https://entenhausen.stage.dev"
    },
    {
      "url": "https://entenhausen.dev"
    }
  ],
  "paths": {
    "/v1/services": {
      "get": {
        "summary": "List all fictional municipal services and fixed form options",
        "operationId": "get_v1_services",
        "security": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request"
          },
          "401": {
            "description": "Missing or expired demo capability"
          },
          "409": {
            "description": "Stale version, expired review, booking conflict, changed profile or reused key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Unsupported input; only catalogue choices are accepted"
          },
          "429": {
            "description": "Bounded demo capacity reached"
          }
        }
      }
    },
    "/v1/services/{id}": {
      "get": {
        "summary": "Read a service contract",
        "operationId": "get_v1_services_id",
        "security": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request"
          },
          "401": {
            "description": "Missing or expired demo capability"
          },
          "409": {
            "description": "Stale version, expired review, booking conflict, changed profile or reused key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Unsupported input; only catalogue choices are accepted"
          },
          "429": {
            "description": "Bounded demo capacity reached"
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ServiceId"
            }
          }
        ]
      }
    },
    "/v1/profiles": {
      "get": {
        "summary": "List four synthetic profiles; optional bearer includes current demo addresses",
        "operationId": "get_v1_profiles",
        "security": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request"
          },
          "401": {
            "description": "Missing or expired demo capability"
          },
          "409": {
            "description": "Stale version, expired review, booking conflict, changed profile or reused key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Unsupported input; only catalogue choices are accepted"
          },
          "429": {
            "description": "Bounded demo capacity reached"
          }
        }
      }
    },
    "/v1/slots/{id}": {
      "get": {
        "summary": "Available slots in this isolated demo world",
        "operationId": "get_v1_slots_id",
        "security": [
          {
            "DemoBearer": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request"
          },
          "401": {
            "description": "Missing or expired demo capability"
          },
          "409": {
            "description": "Stale version, expired review, booking conflict, changed profile or reused key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Unsupported input; only catalogue choices are accepted"
          },
          "429": {
            "description": "Bounded demo capacity reached"
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "period",
            "schema": {
              "enum": [
                "vormittag",
                "nachmittag",
                "egal"
              ],
              "default": "egal"
            }
          },
          {
            "in": "query",
            "name": "resource",
            "schema": {
              "type": "string"
            },
            "description": "For raum, the room value from the catalogue."
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ServiceId"
            }
          }
        ]
      }
    },
    "/v1/sessions": {
      "post": {
        "summary": "Create a 24-hour isolated demo world; no personal data",
        "operationId": "post_v1_sessions",
        "security": [],
        "responses": {
          "201": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Session"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request"
          },
          "401": {
            "description": "Missing or expired demo capability"
          },
          "409": {
            "description": "Stale version, expired review, booking conflict, changed profile or reused key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Unsupported input; only catalogue choices are accepted"
          },
          "429": {
            "description": "Bounded demo capacity reached"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {},
                "required": []
              }
            }
          }
        }
      }
    },
    "/v1/drafts": {
      "post": {
        "summary": "Prepare a 15-minute review without executing the service",
        "operationId": "post_v1_drafts",
        "security": [
          {
            "DemoBearer": []
          }
        ],
        "responses": {
          "201": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Case"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request"
          },
          "401": {
            "description": "Missing or expired demo capability"
          },
          "409": {
            "description": "Stale version, expired review, booking conflict, changed profile or reused key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Unsupported input; only catalogue choices are accepted"
          },
          "429": {
            "description": "Bounded demo capacity reached"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DraftInput"
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-zA-Z0-9_-]{16,100}$"
            },
            "description": "Retain this key when retrying the identical request. A different payload needs a new key."
          }
        ]
      },
      "get": {
        "summary": "List the current demo world’s cases",
        "operationId": "get_v1_drafts",
        "security": [
          {
            "DemoBearer": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "cases": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Case"
                      }
                    }
                  },
                  "required": [
                    "cases"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Malformed request"
          },
          "401": {
            "description": "Missing or expired demo capability"
          },
          "409": {
            "description": "Stale version, expired review, booking conflict, changed profile or reused key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Unsupported input; only catalogue choices are accepted"
          },
          "429": {
            "description": "Bounded demo capacity reached"
          }
        }
      }
    },
    "/v1/drafts/{id}": {
      "get": {
        "summary": "Read a case belonging to this demo world",
        "operationId": "get_v1_drafts_id",
        "security": [
          {
            "DemoBearer": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Case"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request"
          },
          "401": {
            "description": "Missing or expired demo capability"
          },
          "409": {
            "description": "Stale version, expired review, booking conflict, changed profile or reused key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Unsupported input; only catalogue choices are accepted"
          },
          "429": {
            "description": "Bounded demo capacity reached"
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-f0-9]{32}$"
            }
          }
        ]
      }
    },
    "/v1/drafts/{id}/submit": {
      "post": {
        "summary": "Explicitly confirm the reviewed version",
        "operationId": "post_v1_drafts_id_submit",
        "security": [
          {
            "DemoBearer": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Case"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request"
          },
          "401": {
            "description": "Missing or expired demo capability"
          },
          "409": {
            "description": "Stale version, expired review, booking conflict, changed profile or reused key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Unsupported input; only catalogue choices are accepted"
          },
          "429": {
            "description": "Bounded demo capacity reached"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Confirmation"
              }
            }
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-f0-9]{32}$"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-zA-Z0-9_-]{16,100}$"
            },
            "description": "Retain this key when retrying the identical request. A different payload needs a new key."
          }
        ]
      }
    },
    "/v1/drafts/{id}/cancel": {
      "post": {
        "summary": "Cancel a review or a completed booking",
        "operationId": "post_v1_drafts_id_cancel",
        "security": [
          {
            "DemoBearer": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Case"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request"
          },
          "401": {
            "description": "Missing or expired demo capability"
          },
          "409": {
            "description": "Stale version, expired review, booking conflict, changed profile or reused key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Unsupported input; only catalogue choices are accepted"
          },
          "429": {
            "description": "Bounded demo capacity reached"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Confirmation"
              }
            }
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-f0-9]{32}$"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-zA-Z0-9_-]{16,100}$"
            },
            "description": "Retain this key when retrying the identical request. A different payload needs a new key."
          }
        ]
      }
    },
    "/v1/drafts/{id}/receipt": {
      "get": {
        "summary": "Download clearly marked fictional PDF",
        "operationId": "get_v1_drafts_id_receipt",
        "security": [
          {
            "DemoBearer": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request"
          },
          "401": {
            "description": "Missing or expired demo capability"
          },
          "409": {
            "description": "Stale version, expired review, booking conflict, changed profile or reused key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Unsupported input; only catalogue choices are accepted"
          },
          "429": {
            "description": "Bounded demo capacity reached"
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-f0-9]{32}$"
            }
          }
        ]
      }
    },
    "/formulare/{id}": {
      "get": {
        "summary": "Download clearly marked fictional PDF",
        "operationId": "get_formulare_id",
        "security": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Malformed request"
          },
          "401": {
            "description": "Missing or expired demo capability"
          },
          "409": {
            "description": "Stale version, expired review, booking conflict, changed profile or reused key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Unsupported input; only catalogue choices are accepted"
          },
          "429": {
            "description": "Bounded demo capacity reached"
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ServiceId"
            }
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "DemoBearer": {
        "type": "http",
        "scheme": "bearer",
        "description": "Opaque capability returned by POST /v1/sessions. Treat as a secret."
      }
    },
    "schemas": {
      "ServiceId": {
        "type": "string",
        "enum": [
          "termin",
          "umzug",
          "meldebescheinigung",
          "gewerbe",
          "hund",
          "kita",
          "wohngeld",
          "parken",
          "sperrmuell",
          "maengel",
          "bibliothek",
          "raum",
          "veranstaltung",
          "urkunde",
          "fundsache",
          "bauen"
        ]
      },
      "ProfileId": {
        "type": "string",
        "enum": [
          "donald",
          "daisy",
          "daniel",
          "dagobert"
        ]
      },
      "Confirmation": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1
          },
          "confirmed": {
            "const": true
          }
        },
        "required": [
          "version",
          "confirmed"
        ]
      },
      "Session": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "token": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "mode": {
            "const": "fictional_demo"
          }
        },
        "required": [
          "token",
          "expires_at",
          "mode"
        ]
      },
      "Problem": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "error"
        ]
      },
      "Case": {
        "type": "object",
        "required": [
          "id",
          "service",
          "state",
          "version",
          "profile",
          "details",
          "fee",
          "receipt",
          "can_cancel",
          "demo"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-f0-9]{32}$"
          },
          "service": {
            "$ref": "#/components/schemas/ServiceId"
          },
          "state": {
            "enum": [
              "review",
              "completed",
              "received",
              "cancelled"
            ]
          },
          "version": {
            "type": "integer"
          },
          "profile": {
            "type": "object"
          },
          "details": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "fee": {
            "type": "integer"
          },
          "receipt": {
            "type": [
              "object",
              "null"
            ]
          },
          "can_cancel": {
            "type": "boolean"
          },
          "demo": {
            "const": true
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Draft_termin": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "termin"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "anliegen": {
                "type": "string",
                "enum": [
                  "ausweis",
                  "umzug",
                  "beratung"
                ],
                "description": "Ihr Anliegen"
              },
              "zeitraum": {
                "type": "string",
                "enum": [
                  "vormittag",
                  "nachmittag",
                  "egal"
                ],
                "description": "Wann passt es?"
              },
              "slot": {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$",
                "description": "A currently available slot returned by /v1/slots/{id}; Europe/Berlin."
              }
            },
            "required": [
              "anliegen",
              "zeitraum",
              "slot"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_umzug": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "umzug"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "adresse": {
                "type": "string",
                "enum": [
                  "blumen13",
                  "distel7",
                  "scharren4"
                ],
                "description": "Neue Demo-Adresse"
              },
              "haushalt": {
                "type": "string",
                "enum": [
                  "allein",
                  "familie"
                ],
                "description": "Wer zieht mit?"
              }
            },
            "required": [
              "adresse",
              "haushalt"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_meldebescheinigung": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "meldebescheinigung"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "zweck": {
                "type": "string",
                "enum": [
                  "standard",
                  "verein",
                  "arbeit"
                ],
                "description": "Verwendungszweck"
              }
            },
            "required": [
              "zweck"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_gewerbe": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "gewerbe"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "betrieb": {
                "type": "string",
                "enum": [
                  "imbiss",
                  "werkstatt",
                  "handel"
                ],
                "description": "Demo-Betrieb"
              },
              "betriebsart": {
                "type": "string",
                "enum": [
                  "abholung",
                  "vorort",
                  "dienstleistung"
                ],
                "description": "Betriebsart"
              }
            },
            "required": [
              "betrieb",
              "betriebsart"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_hund": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "hund"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "hund": {
                "type": "string",
                "enum": [
                  "bolivar",
                  "pluto",
                  "bello"
                ],
                "description": "Demo-Hund"
              },
              "haltung": {
                "type": "string",
                "enum": [
                  "familie",
                  "assistenz"
                ],
                "description": "Haltung"
              }
            },
            "required": [
              "hund",
              "haltung"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_kita": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "kita"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "einrichtung": {
                "type": "string",
                "enum": [
                  "gumpe",
                  "erpel",
                  "erfinder"
                ],
                "description": "Wunscheinrichtung"
              },
              "betreuung": {
                "type": "string",
                "enum": [
                  "halbtag",
                  "ganztag"
                ],
                "description": "Betreuungszeit"
              }
            },
            "required": [
              "einrichtung",
              "betreuung"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_wohngeld": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "wohngeld"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "haushalt": {
                "type": "string",
                "enum": [
                  "einperson",
                  "familie",
                  "rente"
                ],
                "description": "Beispielhaushalt"
              },
              "wohnung": {
                "type": "string",
                "enum": [
                  "miete",
                  "eigentum"
                ],
                "description": "Wohnsituation"
              }
            },
            "required": [
              "haushalt",
              "wohnung"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_parken": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "parken"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "zone": {
                "type": "string",
                "enum": [
                  "altstadt",
                  "gumpe",
                  "bahnhof"
                ],
                "description": "Parkzone"
              },
              "fahrzeug": {
                "type": "string",
                "enum": [
                  "313",
                  "roller",
                  "erfinder"
                ],
                "description": "Demo-Fahrzeug"
              }
            },
            "required": [
              "zone",
              "fahrzeug"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_sperrmuell": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "sperrmuell"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "gegenstand": {
                "type": "string",
                "enum": [
                  "sofa",
                  "schrank",
                  "tisch"
                ],
                "description": "Was wird abgeholt?"
              },
              "abholung": {
                "type": "string",
                "enum": [
                  "naechste",
                  "uebernaechste"
                ],
                "description": "Abholfenster"
              }
            },
            "required": [
              "gegenstand",
              "abholung"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_maengel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "maengel"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "ort": {
                "type": "string",
                "enum": [
                  "bruecke",
                  "platz",
                  "bahnhof"
                ],
                "description": "Demo-Ort"
              },
              "mangel": {
                "type": "string",
                "enum": [
                  "leuchte",
                  "schlagloch",
                  "papierkorb"
                ],
                "description": "Was ist passiert?"
              }
            },
            "required": [
              "ort",
              "mangel"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_bibliothek": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "bibliothek"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "tarif": {
                "type": "string",
                "enum": [
                  "jahr",
                  "probe"
                ],
                "description": "Demo-Tarif"
              },
              "interesse": {
                "type": "string",
                "enum": [
                  "comic",
                  "wissen",
                  "roman"
                ],
                "description": "Ihr erster Bereich"
              }
            },
            "required": [
              "tarif",
              "interesse"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_raum": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "raum"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "raum": {
                "type": "string",
                "enum": [
                  "saal",
                  "werkstatt",
                  "musik"
                ],
                "description": "Raum"
              },
              "zeitraum": {
                "type": "string",
                "enum": [
                  "vormittag",
                  "nachmittag",
                  "egal"
                ],
                "description": "Wann passt es?"
              },
              "slot": {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$",
                "description": "A currently available slot returned by /v1/slots/{id}; Europe/Berlin."
              }
            },
            "required": [
              "raum",
              "zeitraum",
              "slot"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_veranstaltung": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "veranstaltung"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "art": {
                "type": "string",
                "enum": [
                  "strassenfest",
                  "markt",
                  "verein"
                ],
                "description": "Veranstaltungsart"
              },
              "ort": {
                "type": "string",
                "enum": [
                  "erpelplatz",
                  "ufer",
                  "buergerhaus"
                ],
                "description": "Veranstaltungsort"
              }
            },
            "required": [
              "art",
              "ort"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_urkunde": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "urkunde"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "art": {
                "type": "string",
                "enum": [
                  "geburt",
                  "heirat",
                  "register"
                ],
                "description": "Urkundenart"
              }
            },
            "required": [
              "art"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_fundsache": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "fundsache"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "gegenstand": {
                "type": "string",
                "enum": [
                  "schirm",
                  "schluessel",
                  "hut"
                ],
                "description": "Was wurde gefunden?"
              },
              "ort": {
                "type": "string",
                "enum": [
                  "bahnhof",
                  "gumpe",
                  "erpel"
                ],
                "description": "Fundort"
              }
            },
            "required": [
              "gegenstand",
              "ort"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "Draft_bauen": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "service": {
            "const": "bauen"
          },
          "profile": {
            "$ref": "#/components/schemas/ProfileId"
          },
          "fields": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "vorhaben": {
                "type": "string",
                "enum": [
                  "anbau",
                  "werkstatt",
                  "solar"
                ],
                "description": "Demo-Vorhaben"
              },
              "lage": {
                "type": "string",
                "enum": [
                  "altstadt",
                  "wohngebiet",
                  "gewerbe"
                ],
                "description": "Demo-Lage"
              }
            },
            "required": [
              "vorhaben",
              "lage"
            ]
          }
        },
        "required": [
          "service",
          "profile",
          "fields"
        ]
      },
      "DraftInput": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/Draft_termin"
          },
          {
            "$ref": "#/components/schemas/Draft_umzug"
          },
          {
            "$ref": "#/components/schemas/Draft_meldebescheinigung"
          },
          {
            "$ref": "#/components/schemas/Draft_gewerbe"
          },
          {
            "$ref": "#/components/schemas/Draft_hund"
          },
          {
            "$ref": "#/components/schemas/Draft_kita"
          },
          {
            "$ref": "#/components/schemas/Draft_wohngeld"
          },
          {
            "$ref": "#/components/schemas/Draft_parken"
          },
          {
            "$ref": "#/components/schemas/Draft_sperrmuell"
          },
          {
            "$ref": "#/components/schemas/Draft_maengel"
          },
          {
            "$ref": "#/components/schemas/Draft_bibliothek"
          },
          {
            "$ref": "#/components/schemas/Draft_raum"
          },
          {
            "$ref": "#/components/schemas/Draft_veranstaltung"
          },
          {
            "$ref": "#/components/schemas/Draft_urkunde"
          },
          {
            "$ref": "#/components/schemas/Draft_fundsache"
          },
          {
            "$ref": "#/components/schemas/Draft_bauen"
          }
        ]
      }
    }
  }
}
