{
  "openapi": "3.0.3",
  "info": {
    "version": "0.2.7",
    "title": "LVBB Besluit Preview Service API",
    "description": "## Overzicht\n\nDeze API maakt HTML-previews en toegankelijke PDF's (PDF/UA) van bekendmakingen, kennisgevingen en regelingversies.\n\n## Use Cases\n\n### 1. Concept Preview (standaard)\nMaak een concept-PDF van een AanleveringBesluit of AanleveringKennisgeving. De PDF bevat 'Concept' in de footer met dummy publicatiegegevens.\n\n### 2. Officiële Publicatie PDF\nMaak een PDF die **exact overeenkomt** met de officiële bekendmaking door een complete `OfficielePublicatie` XML aan te leveren met echte metadata (jaargang, publicatienummer, etc.).\n\n### 3. Proefversie met Renvooi\nMaak een HTML-preview van een RegelingVersie met wijzigingsmarkeringen (renvooi).\n\n## ZIP Structuren\n\n### Voor AanleveringBesluit/Kennisgeving\n```\naanlevering.zip\n├── opdracht.xml              # Verwijst naar publicatie\n├── AanleveringBesluit.xml    # Of AanleveringKennisgeving.xml\n└── [afbeeldingen...]         # Optioneel\n```\n\n### Voor OfficielePublicatie (isOp=true)\n```\npublicatie.zip\n├── opdracht.xml              # Verwijst naar OfficielePublicatie\n├── OfficielePublicatie.xml   # Met ECHTE metadata\n└── [afbeeldingen...]         # Optioneel\n```\n\n### opdracht.xml formaat\n```xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<publicatieOpdracht xmlns=\"http://www.overheid.nl/2017/lvbb\">\n  <publicatie>AanleveringBesluit.xml</publicatie>\n</publicatieOpdracht>\n```\n\n## PDF Engine\n\nStandaard wordt **RenderX XEP** gebruikt. Met `use-fop=true` kan **Apache FOP** worden gebruikt.\n\n## Authenticatie\n\nOp productie is een API-key vereist via de `X-API-Key` header.",
    "contact": {
      "name": "KOOP - Siebe Jongebloed",
      "email": "siebe.jongebloed@koop.overheid.nl"
    },
    "license": {
      "name": "EUPL 1.2",
      "url": "https://eupl.eu/1.2/nl/"
    }
  },
  "servers": [
    {
      "url": "https://besluitpreviewservice.overheid.nl",
      "description": "Huidige omgeving"
    },
    {
      "url": "https://besluitpreviewservice.overheid.nl",
      "description": "Productie"
    },
    {
      "url": "https://besluitpreviewservice-eto.overheid.nl",
      "description": "Acceptatie (ETO)"
    },
    {
      "url": "https://lvbb-preview.koop-lvbb-tst.test5.s15m.nl",
      "description": "Test"
    }
  ],
  "tags": [
    {
      "name": "Bekendmaking",
      "description": "Genereer PDF van een AanleveringBesluit of AanleveringKennisgeving (concept of voor ondertekenen)"
    },
    {
      "name": "Officiële Publicatie",
      "description": "Genereer PDF van een complete OfficielePublicatie met echte metadata (jaargang, publicatienummer). Gebruik `isOp=true`."
    },
    {
      "name": "Proefversie",
      "description": "Maak HTML-preview van een RegelingVersie met wijzigingsmarkeringen (renvooi)"
    },
    {
      "name": "Regeling PDF",
      "description": "Maak PDF van een RegelingVersie uit een uitwisselpakket"
    },
    {
      "name": "Status en Download",
      "description": "Opvragen status en downloaden van gegenereerde bestanden"
    },
    {
      "name": "Meta",
      "description": "Health checks en API documentatie"
    }
  ],
  "paths": {
    "/maak-bekendmaking": {
      "post": {
        "tags": ["Bekendmaking", "Officiële Publicatie"],
        "summary": "Genereer PDF van besluit/kennisgeving of OfficielePublicatie",
        "description": "## Standaard gebruik (Concept PDF)\n\nUpload een ZIP met `opdracht.xml` en `AanleveringBesluit.xml` of `AanleveringKennisgeving.xml`.\nDe gegenereerde PDF bevat 'Concept' in de footer met dummy publicatiegegevens.\n\n## Officiële Publicatie PDF (isOp=true)\n\nUpload een ZIP met `opdracht.xml` en een complete `OfficielePublicatie.xml` met echte metadata:\n- `jaargang` - het echte jaargang (bijv. 2025)\n- `publicatienummer` - het echte nummer (bijv. 12345)\n- `gepubliceerdOp` - de echte publicatiedatum\n\nDe PDF bevat dan de **echte** publicatiegegevens in header en footer.\n\n## Voor ondertekenen\n\nMet `voor-ondertekenen=true` wordt de 'Concept' aanduiding verwijderd.",
        "operationId": "maakBekendmaking",
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "aanlevering-zip": {
                    "description": "ZIP-bestand met:\n- `opdracht.xml` (verplicht)\n- XML-bestand waarnaar opdracht.xml verwijst\n- Eventuele afbeeldingen (PNG, JPG, GIF)",
                    "type": "string",
                    "format": "binary"
                  },
                  "isOp": {
                    "description": "**Belangrijk voor LVBB**: Zet op `true` als de ZIP een complete `OfficielePublicatie` bevat (i.p.v. AanleveringBesluit). Dit slaat schema validatie over en gebruikt de echte metadata uit de XML.",
                    "type": "boolean",
                    "default": false,
                    "example": true
                  },
                  "voor-ondertekenen": {
                    "description": "Verwijder 'Concept' label uit de PDF. Gebruik dit voor de officiële versie die ondertekend moet worden.",
                    "type": "boolean",
                    "default": false
                  },
                  "zoals-juridisch": {
                    "description": "Zelfde effect als `voor-ondertekenen`. Genereer de PDF zoals deze juridisch gepubliceerd wordt.",
                    "type": "boolean",
                    "default": false
                  },
                  "use-fop": {
                    "description": "Gebruik Apache FOP i.p.v. RenderX XEP als PDF engine. FOP is open source, XEP is commercieel met betere output.",
                    "type": "boolean",
                    "default": false
                  },
                  "auto-clean-up": {
                    "description": "Automatisch alle werkbestanden verwijderen na downloaden van de PDF (binnen 1 uur).",
                    "type": "boolean",
                    "default": true
                  }
                },
                "required": ["aanlevering-zip"]
              },
              "examples": {
                "concept": {
                  "summary": "Concept PDF (standaard)",
                  "description": "Genereer een concept-PDF van een AanleveringBesluit",
                  "value": {
                    "aanlevering-zip": "(binary)",
                    "voor-ondertekenen": false,
                    "auto-clean-up": true
                  }
                },
                "voorOndertekenen": {
                  "summary": "PDF voor ondertekenen",
                  "description": "Genereer PDF zonder 'Concept' label",
                  "value": {
                    "aanlevering-zip": "(binary)",
                    "voor-ondertekenen": true
                  }
                },
                "officielePublicatie": {
                  "summary": "Officiële Publicatie PDF (LVBB)",
                  "description": "Genereer PDF van complete OfficielePublicatie met echte metadata",
                  "value": {
                    "aanlevering-zip": "(binary met OfficielePublicatie.xml)",
                    "isOp": true,
                    "voor-ondertekenen": true
                  }
                }
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Verwerking gestart. Gebruik de links om de status te controleren en de PDF te downloaden.",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/ProcessingResponse"},
                "example": {
                  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                  "status-pdf": "in-progress",
                  "status-html-preview": "gereed",
                  "link-naar-download-pdf": "/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                  "link-naar-html-preview": "/html/op/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                  "link-naar-huidige-status": "/status/a1b2c3d4-e5f6-7890-abcd-ef1234567890"
                }
              }
            }
          },
          "400": {"$ref": "#/components/responses/BadRequest"},
          "403": {"$ref": "#/components/responses/Unauthorized"},
          "422": {"$ref": "#/components/responses/ValidationError"}
        }
      }
    },
    "/maak-proefversie": {
      "post": {
        "tags": ["Proefversie"],
        "summary": "Genereer HTML-preview met renvooi (wijzigingsmarkeringen)",
        "description": "Maak een HTML-weergave van een RegelingVersie met wijzigingsmarkeringen (renvooi).\n\n## Input opties\n\n### Optie 1: AanleveringBesluit + Was-versie\n- `aanlevering-zip`: ZIP met AanleveringBesluit\n- `regelingversie-uitwisselpakket-zip`: ZIP met de was-versie van de regeling\n\n### Optie 2: Previewservice Pakbon\n- `previewservice-pakbon-zip`: ZIP met pakbon.xml en alle benodigde bestanden",
        "operationId": "maakProefversie",
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "aanlevering-zip": {
                    "description": "ZIP met opdracht.xml en AanleveringBesluit met RegelingMutatie",
                    "type": "string",
                    "format": "binary"
                  },
                  "previewservice-pakbon-zip": {
                    "description": "ZIP met pakbon.xml conform het previewservice-pakbon formaat. Bevat was-versie + RegelingMutatie. Zie `/voorbeeld-previewservice-pakbon` voor een voorbeeld.",
                    "type": "string",
                    "format": "binary"
                  },
                  "regelingversie-uitwisselpakket-zip": {
                    "description": "ZIP met uitwisselpakket van de RegelingVersie die als @was-versie is gebruikt (bijv. van de downloadservice)",
                    "type": "string",
                    "format": "binary"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Proefversie aangemaakt",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/ProefversieResponse"},
                "example": {
                  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                  "status": "2compact",
                  "link-to-html-preview": "/html/proefversie/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                  "link-to-xml-op": "/xml/proefversie/a1b2c3d4-e5f6-7890-abcd-ef1234567890"
                }
              }
            }
          },
          "400": {"$ref": "#/components/responses/BadRequest"},
          "403": {"$ref": "#/components/responses/Unauthorized"},
          "422": {"$ref": "#/components/responses/ValidationError"}
        }
      }
    },
    "/maak-pdf-van-regeling": {
      "post": {
        "tags": ["Regeling PDF"],
        "summary": "Genereer PDF van een RegelingVersie",
        "description": "Maak een toegankelijke PDF (PDF/UA) van een RegelingVersie uit een uitwisselpakket.",
        "operationId": "maakPdfVanRegeling",
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "regelingversie-uitwisselpakket-zip": {
                    "description": "ZIP met uitwisselpakket van de RegelingVersie (met pakbon.xml)",
                    "type": "string",
                    "format": "binary"
                  },
                  "use-fop": {
                    "description": "Gebruik Apache FOP i.p.v. RenderX XEP",
                    "type": "boolean",
                    "default": false
                  }
                },
                "required": ["regelingversie-uitwisselpakket-zip"]
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Verwerking gestart",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/ProcessingResponse"}
              }
            }
          },
          "400": {"$ref": "#/components/responses/BadRequest"},
          "403": {"$ref": "#/components/responses/Unauthorized"},
          "422": {"$ref": "#/components/responses/ValidationError"}
        }
      }
    },
    "/status/{id}": {
      "get": {
        "tags": ["Status en Download"],
        "summary": "Status van PDF/HTML generatie opvragen",
        "description": "Vraag de huidige status op van een lopende of voltooide verwerking.",
        "operationId": "getStatus",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "UUID van de verwerking (ontvangen bij aanmaken)",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
          }
        ],
        "responses": {
          "200": {
            "description": "Status informatie",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/StatusResponse"},
                "examples": {
                  "in-progress": {
                    "summary": "PDF wordt gegenereerd",
                    "value": {
                      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                      "status": "in-progress",
                      "link-naar-huidige-status": "/status/a1b2c3d4-e5f6-7890-abcd-ef1234567890"
                    }
                  },
                  "gereed": {
                    "summary": "PDF is gereed",
                    "value": {
                      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                      "status": "gereed",
                      "link-naar-download-pdf": "/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                      "link-naar-html-preview": "/html/op/a1b2c3d4-e5f6-7890-abcd-ef1234567890"
                    }
                  },
                  "verwijderd": {
                    "summary": "Bestanden zijn verwijderd",
                    "value": {
                      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                      "status": "is verwijderd"
                    }
                  }
                }
              }
            }
          },
          "404": {"description": "ID niet gevonden"},
          "403": {"$ref": "#/components/responses/Unauthorized"}
        }
      }
    },
    "/download/{id}": {
      "get": {
        "tags": ["Status en Download"],
        "summary": "Download gegenereerde PDF",
        "description": "Download de gegenereerde PDF. Als de PDF nog niet gereed is, wordt een 202 status teruggegeven met de huidige voortgang.",
        "operationId": "downloadPdf",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "UUID van de verwerking",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PDF bestand",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Disposition": {
                "description": "Bestandsnaam",
                "schema": {
                  "type": "string",
                  "example": "attachment; filename=\"Concept.pdf\""
                }
              }
            }
          },
          "202": {
            "description": "PDF wordt nog gegenereerd",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/StatusResponse"}
              }
            }
          },
          "404": {"description": "ID niet gevonden of bestanden verwijderd"},
          "403": {"$ref": "#/components/responses/Unauthorized"}
        }
      }
    },
    "/html/op/{id}": {
      "get": {
        "tags": ["Status en Download"],
        "summary": "HTML preview van besluit/kennisgeving",
        "description": "Bekijk de HTML-preview van het gegenereerde besluit of kennisgeving.",
        "operationId": "getHtmlOp",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {"type": "string", "format": "uuid"}
          }
        ],
        "responses": {
          "200": {
            "description": "HTML preview",
            "content": {
              "text/html": {}
            }
          },
          "404": {"description": "Niet gevonden"},
          "403": {"$ref": "#/components/responses/Unauthorized"}
        }
      }
    },
    "/html/proefversie/{id}": {
      "get": {
        "tags": ["Proefversie"],
        "summary": "HTML preview van proefversie met renvooi",
        "operationId": "getHtmlProefversie",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {"type": "string", "format": "uuid"}
          }
        ],
        "responses": {
          "200": {
            "description": "HTML proefversie met wijzigingsmarkeringen",
            "content": {"text/html": {}}
          },
          "404": {"description": "Niet gevonden"},
          "403": {"$ref": "#/components/responses/Unauthorized"}
        }
      }
    },
    "/xml/proefversie/{id}": {
      "get": {
        "tags": ["Proefversie"],
        "summary": "XML van proefversie met renvooi",
        "operationId": "getXmlProefversie",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {"type": "string", "format": "uuid"}
          }
        ],
        "responses": {
          "200": {
            "description": "XML met RegelingVersie inclusief renvooi-markeringen",
            "content": {"application/xml": {}}
          },
          "404": {"description": "Niet gevonden"},
          "403": {"$ref": "#/components/responses/Unauthorized"}
        }
      }
    },
    "/delete/{id}": {
      "get": {
        "tags": ["Status en Download"],
        "summary": "Verwijder werkbestanden",
        "description": "Markeer de werkbestanden voor verwijdering. De daadwerkelijke verwijdering vindt elk heel uur plaats.",
        "operationId": "deleteFiles",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {"type": "string", "format": "uuid"}
          }
        ],
        "responses": {
          "200": {
            "description": "Verwijdering gepland",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/DeleteResponse"}
              }
            }
          },
          "404": {"description": "Niet gevonden"},
          "403": {"$ref": "#/components/responses/Unauthorized"}
        }
      }
    },
    "/validatie-fouten/{errorType}/{id}": {
      "get": {
        "tags": ["Status en Download"],
        "summary": "Validatiefouten ophalen",
        "description": "Haal de XML met validatiefouten op als de verwerking is mislukt.",
        "operationId": "getValidatiefouten",
        "parameters": [
          {
            "name": "errorType",
            "in": "path",
            "required": true,
            "description": "Type validatiefout",
            "schema": {
              "type": "string",
              "enum": ["4", "12", "13"]
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {"type": "string", "format": "uuid"}
          }
        ],
        "responses": {
          "200": {
            "description": "XML met validatiefouten",
            "content": {"application/xml": {}}
          },
          "404": {"description": "Geen fouten gevonden"},
          "403": {"$ref": "#/components/responses/Unauthorized"}
        }
      }
    },
    "/health": {
      "get": {
        "tags": ["Meta"],
        "summary": "Health check",
        "description": "Controleer of de service beschikbaar is.",
        "operationId": "getHealth",
        "responses": {
          "200": {
            "description": "Service is UP",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/HealthResponse"},
                "example": {"status": "UP"}
              }
            }
          }
        }
      }
    },
    "/documentatie": {
      "get": {
        "tags": ["Meta"],
        "summary": "Functionele documentatie (PDF)",
        "description": "Download de functionele documentatie inclusief foutcodes.",
        "operationId": "getDocumentatie",
        "responses": {
          "200": {
            "description": "PDF documentatie",
            "content": {"application/pdf": {}}
            }
        }
      }
    },
    "/voorbeeld-previewservice-pakbon": {
      "get": {
        "tags": ["Proefversie", "Meta"],
        "summary": "Voorbeeld pakbon.xml",
        "description": "Download een voorbeeld van de pakbon.xml structuur voor de previewservice-pakbon-zip.",
        "operationId": "getVoorbeeldPakbon",
        "responses": {
          "200": {
            "description": "XML voorbeeld",
            "content": {"application/xml": {}}
            }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "tags": ["Meta"],
        "summary": "OpenAPI specificatie",
        "description": "Deze OpenAPI 3.0 specificatie in JSON formaat.",
        "operationId": "getOpenApi",
        "responses": {
          "200": {
            "description": "OpenAPI JSON",
            "content": {"application/json": {}}
          }
        }
      }
    },
    "/swagger": {
      "get": {
        "tags": ["Meta"],
        "summary": "Swagger UI",
        "description": "Interactieve API documentatie met Swagger UI. Hier kun je de API endpoints bekijken en direct uitproberen.",
        "operationId": "getSwaggerUi",
        "responses": {
          "200": {
            "description": "Swagger UI HTML pagina",
            "content": {"text/html": {}}
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key",
        "description": "API key voor productie toegang"
      }
    },
    "responses": {
      "Unauthorized": {
        "description": "Niet geautoriseerd - API key ontbreekt of is ongeldig",
        "content": {
          "application/json": {
            "schema": {"$ref": "#/components/schemas/ErrorResponse"},
            "example": {
              "errors": [{"code": "403", "omschrijving": "Niet gemachtigd"}]
            }
          }
        }
      },
      "BadRequest": {
        "description": "Ongeldige aanvraag - verplichte velden ontbreken",
        "content": {
          "application/json": {
            "schema": {"$ref": "#/components/schemas/ErrorResponse"}
          }
        }
      },
      "ValidationError": {
        "description": "Validatiefout in aangeleverde XML",
        "content": {
          "application/json": {
            "schema": {"$ref": "#/components/schemas/ErrorResponse"},
            "example": {
              "errors": [
                {
                  "code": "4",
                  "omschrijving": "Schema-validatie gefaald",
                  "link-naar-validatie-fouten": "/validatie-fouten/4/a1b2c3d4-e5f6-7890-abcd-ef1234567890"
                }
              ]
            }
          }
        }
      }
    },
    "schemas": {
      "ProcessingResponse": {
        "type": "object",
        "description": "Response bij starten van verwerking",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unieke identifier voor deze verwerking"
          },
          "status-pdf": {
            "type": "string",
            "enum": ["in-progress", "gereed", "fout", "is verwijderd", "niet gevonden"],
            "description": "Status van PDF generatie"
          },
          "status-html-preview": {
            "type": "string",
            "enum": ["in-progress", "gereed", "fout"],
            "description": "Status van HTML preview generatie"
          },
          "link-naar-download-pdf": {
            "type": "string",
            "format": "uri",
            "description": "URL om de PDF te downloaden (beschikbaar als status=gereed)"
          },
          "link-naar-html-preview": {
            "type": "string",
            "format": "uri",
            "description": "URL naar de HTML preview"
          },
          "link-naar-huidige-status": {
            "type": "string",
            "format": "uri",
            "description": "URL om de status te pollen"
          }
        },
        "required": ["id"]
      },
      "StatusResponse": {
        "type": "object",
        "description": "Status van een verwerking",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "enum": ["in-progress", "gereed", "fout", "is verwijderd", "niet gevonden", "2compact"],
            "description": "Huidige status"
          },
          "link-naar-download-pdf": {
            "type": "string",
            "format": "uri"
          },
          "link-naar-html-preview": {
            "type": "string",
            "format": "uri"
          },
          "link-naar-huidige-status": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "ProefversieResponse": {
        "type": "object",
        "description": "Response voor proefversie",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string"
          },
          "link-to-html-preview": {
            "type": "string",
            "format": "uri",
            "description": "URL naar HTML preview met renvooi"
          },
          "link-to-xml-op": {
            "type": "string",
            "format": "uri",
            "description": "URL naar XML met OfficiëlePublicatie inclusief renvooi"
          }
        }
      },
      "DeleteResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "example": "wordt verwijderd"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "description": "Foutmelding",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string",
                  "description": "Foutcode (zie /documentatie voor overzicht)"
                },
                "omschrijving": {
                  "type": "string",
                  "description": "Omschrijving van de fout"
                },
                "link-naar-validatie-fouten": {
                  "type": "string",
                  "format": "uri",
                  "description": "URL naar XML met gedetailleerde validatiefouten"
                }
              }
            }
          }
        }
      },
      "HealthResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": ["UP", "DOWN"]
          }
        }
      },
      "OpdrachtXml": {
        "type": "object",
        "description": "Structuur van opdracht.xml",
        "xml": {
          "name": "publicatieOpdracht",
          "namespace": "http://www.overheid.nl/2017/lvbb"
        },
        "properties": {
          "publicatie": {
            "type": "string",
            "description": "Bestandsnaam van de publicatie XML",
            "example": "AanleveringBesluit.xml"
          }
        }
      },
      "OfficielePublicatieMetadata": {
        "type": "object",
        "description": "Verplichte metadata in OfficielePublicatie voor echte publicatiegegevens",
        "xml": {
          "name": "OfficielePublicatieMetadata",
          "namespace": "https://standaarden.overheid.nl/stop/imop/data/"
        },
        "properties": {
          "jaargang": {
            "type": "integer",
            "description": "Jaargang van de publicatie",
            "example": 2025
          },
          "publicatienummer": {
            "type": "string",
            "description": "Publicatienummer",
            "example": "12345"
          },
          "gepubliceerdOp": {
            "type": "string",
            "format": "date",
            "description": "Publicatiedatum",
            "example": "2025-01-13"
          },
          "eindverantwoordelijke": {
            "type": "string",
            "description": "Naam van het bevoegd gezag"
          },
          "maker": {
            "type": "string",
            "description": "TOOI-identifier van de maker"
          },
          "officieleTitel": {
            "type": "string",
            "description": "Officiële titel van de publicatie"
          },
          "uitgever": {
            "type": "string",
            "description": "Naam van de uitgever"
          }
        },
        "required": ["jaargang", "publicatienummer", "gepubliceerdOp"]
      }
    }
  },
  "security": [
    {},
    {"ApiKeyAuth": []}
  ]
}
