{
  "name": "Vibe-coding tilmeldings-API",
  "description": "Modtager tilmeldinger via webhook og gemmer dem i en database. Udstiller data som rå JSON og som tabel.",
  "base_url": "https://ovelse.bigum.co",
  "fields": {
    "name": {
      "type": "string",
      "required": true,
      "example": "Anna Hansen",
      "description": "Fulde navn."
    },
    "email": {
      "type": "string",
      "required": true,
      "example": "anna@eksempel.dk",
      "description": "Gyldig e-mailadresse."
    },
    "group": {
      "type": "integer",
      "required": true,
      "example": 3,
      "description": "Gruppenummer (heltal, 0 eller større)."
    },
    "zipcode": {
      "type": "integer",
      "required": true,
      "example": 2100,
      "description": "Dansk postnummer (4 cifre, 1000-9999)."
    },
    "date": {
      "type": "date (YYYY-MM-DD)",
      "required": true,
      "example": "2026-06-20",
      "description": "Dato. ISO-format YYYY-MM-DD."
    },
    "timeslot": {
      "type": "time (HH:MM)",
      "required": true,
      "example": "11:00",
      "description": "Klokkeslæt i 24-timers format, fx 11:00."
    }
  },
  "endpoints": [
    {
      "method": "POST",
      "path": "/vibe-coding/input",
      "summary": "Gem én tilmelding.",
      "body": "JSON med felterne name, email, group, zipcode, date, timeslot.",
      "also_accepts": "form-data eller GET med query-parametre (nemt at teste).",
      "responses": {
        "201": "Gemt. { ok:true, message, data }",
        "400": "Ingen data sendt. { ok:false, error:'no_data', expected_fields }",
        "405": "Forkert HTTP-metode.",
        "422": "Validering fejlede. { ok:false, error:'validation_failed', errors }",
        "500": "Databasefejl.",
        "503": "Database ikke konfigureret endnu."
      }
    },
    {
      "method": "GET",
      "path": "/vibe-coding/output",
      "summary": "Hent alle tilmeldinger som rå JSON-array.",
      "query": "?limit=10 (1-1000) · ?order=desc|asc",
      "responses": {
        "200": "JSON-array af tilmeldinger.",
        "500": "Databasefejl.",
        "503": "Database ikke konfigureret."
      }
    },
    {
      "method": "GET",
      "path": "/vibe-coding/check",
      "summary": "HTML-tabel med de seneste 10 tilmeldinger + 'Se ny data'-knap.",
      "responses": {
        "200": "HTML-side."
      }
    }
  ],
  "example_request": {
    "name": "Anna Hansen",
    "email": "anna@eksempel.dk",
    "group": 3,
    "zipcode": 2100,
    "date": "2026-06-20",
    "timeslot": "11:00"
  },
  "example_success": {
    "ok": true,
    "message": "Tilmelding gemt.",
    "data": {
      "id": 1,
      "name": "Anna Hansen",
      "email": "anna@eksempel.dk",
      "group": 3,
      "zipcode": 2100,
      "date": "2026-06-20",
      "timeslot": "11:00",
      "created_at": "2026-06-15T10:00:00.000Z"
    }
  }
}