{
  "openapi": "3.1.0",
  "info": {
    "title": "vlows klant-API",
    "version": "0.1.0",
    "description": "API voor koppelingen met vlows. Maak en beheer je API-key in de console. Stuur de key mee in de Authorization: Bearer-header. Zie https://wiki.vlows.io voor voorbeelden en velddefinities."
  },
  "servers": [
    {
      "url": "https://api.vlows.io"
    }
  ],
  "paths": {
    "/account/v1/couriers": {
      "get": {
        "operationId": "couriers",
        "summary": "Geregistreerde vervoerders opvragen.",
        "description": "Gebruik een API-key uit de console met scope deliveries:read. Geregistreerde vervoerders opvragen.",
        "responses": {
          "200": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/leveringen/#gebruik-een-geregistreerde-vervoerder"
        }
      }
    },
    "/account/v1/overview": {
      "get": {
        "operationId": "overview",
        "summary": "Aantallen binnen je eigen organisatie opvragen.",
        "description": "Gebruik een API-key uit de console met scope deliveries:read. Aantallen binnen je eigen organisatie opvragen.",
        "responses": {
          "200": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/velden-per-handeling/#gegevens-lezen-zonder-extra-invoervelden"
        }
      }
    },
    "/account/v1/usage": {
      "get": {
        "operationId": "usage",
        "summary": "Gebruiksdagtotalen over 30 dagen.",
        "description": "Gebruik een API-key uit de console met scope usage:read. Gebruiksdagtotalen over 30 dagen.",
        "responses": {
          "200": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/api-gebruik/"
        }
      }
    },
    "/account/v1/usage/requests": {
      "get": {
        "operationId": "usageRequests",
        "summary": "Laatste 100 gebruiksverzoeken binnen 30 dagen.",
        "description": "Gebruik een API-key uit de console met scope usage:read. Laatste 100 gebruiksverzoeken binnen 30 dagen.",
        "responses": {
          "200": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/api-gebruik/"
        }
      }
    },
    "/deliveries/v1/parcels": {
      "get": {
        "operationId": "listParcels",
        "summary": "Leveringenlijst met cursorpaginering.",
        "description": "Gebruik een API-key uit de console met scope deliveries:read. Leveringenlijst met cursorpaginering.",
        "responses": {
          "200": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Maximaal aantal resultaten: 1–100, standaard 50."
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Neem data.next_cursor ongewijzigd uit de vorige pagina over. Laat bij de eerste pagina weg."
          },
          {
            "name": "courier",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Exacte geregistreerde vervoerderscode binnen je organisatie. Weglaten toont alle vervoerders."
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 5
            },
            "description": "Optioneel filter 0–5. Weglaten toont alle statussen."
          }
        ],
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/leveringen/#lijstfilters-en-paginering"
        }
      },
      "post": {
        "operationId": "createParcel",
        "summary": "Levering aanmaken; Idempotency-Key verplicht.",
        "description": "Gebruik een API-key uit de console met scope deliveries:write. Levering aanmaken; Idempotency-Key verplicht.",
        "responses": {
          "201": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Unieke sleutel van 8–128 bytes, zonder witruimte aan begin of einde. Herhaal dezelfde methode, URL en exacte bodybytes met dezelfde sleutel. Een gewijzigde body met dezelfde sleutel geeft 409."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ParcelInput"
              },
              "examples": {
                "minimaal": {
                  "summary": "Vier verplichte basisvelden; vervang de vervoerder door je eigen geregistreerde code.",
                  "value": {
                    "courier": "demo",
                    "country": "NL",
                    "postal_code": "9901KB",
                    "number": "16"
                  }
                },
                "met_planning": {
                  "summary": "Pakket met planning; vervang de voorbeeldtijden door je eigen planning.",
                  "value": {
                    "courier": "demo",
                    "country": "NL",
                    "postal_code": "9901KB",
                    "number": "16",
                    "parcel_length": 300,
                    "parcel_width": 200,
                    "parcel_height": 150,
                    "parcel_weight": 1200,
                    "time_slot_period_start": 1792137600,
                    "time_slot_period_end": 1792144800,
                    "service_type": 0
                  }
                }
              }
            }
          }
        },
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/leveringen/#een-levering-aanmaken"
        }
      }
    },
    "/deliveries/v1/parcels/{id}": {
      "get": {
        "operationId": "getParcel",
        "summary": "Eén levering lezen, inclusief ETag.",
        "description": "Gebruik een API-key uit de console met scope deliveries:read. Eén levering lezen, inclusief ETag.",
        "responses": {
          "200": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "De UUID uit data.entry_id van je eigen levering; geen eigen ordernummer."
          }
        ],
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/leveringen/#een-levering-opvragen"
        }
      },
      "patch": {
        "operationId": "patchParcel",
        "summary": "Levering wijzigen; actuele If-Match verplicht.",
        "description": "Gebruik een API-key uit de console met scope deliveries:write. Levering wijzigen; actuele If-Match verplicht.",
        "responses": {
          "200": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "De UUID uit data.entry_id van je eigen levering; geen eigen ordernummer."
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "\"1\"",
            "description": "Neem de laatste ETag letterlijk over, inclusief dubbele aanhalingstekens. Ontbrekende of verouderde versie geeft 412."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ParcelPatch"
              },
              "examples": {
                "gewicht": {
                  "value": {
                    "parcel_weight": 1500
                  }
                },
                "wissen": {
                  "value": {
                    "parcel_weight": null,
                    "addition": ""
                  }
                }
              }
            }
          }
        },
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/leveringen/#een-levering-wijzigen"
        }
      }
    },
    "/deliveries/v1/parcels/{id}/events": {
      "get": {
        "operationId": "events",
        "summary": "Maximaal 1000 gebeurtenissen voor een levering.",
        "description": "Gebruik een API-key uit de console met scope deliveries:read. Maximaal 1000 gebeurtenissen voor een levering.",
        "responses": {
          "200": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "De UUID uit data.entry_id van je eigen levering; geen eigen ordernummer."
          }
        ],
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/gebeurtenissen/#geschiedenis-uitlezen"
        }
      },
      "post": {
        "operationId": "addEvent",
        "summary": "Status 0–3 melden; Idempotency-Key verplicht.",
        "description": "Gebruik een API-key uit de console met scope deliveries:write. Status 0–3 melden; Idempotency-Key verplicht.",
        "responses": {
          "201": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "De UUID uit data.entry_id van je eigen levering; geen eigen ordernummer."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Unieke sleutel van 8–128 bytes, zonder witruimte aan begin of einde. Herhaal dezelfde methode, URL en exacte bodybytes met dezelfde sleutel. Een gewijzigde body met dezelfde sleutel geeft 409."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "occurred_at"
                ],
                "properties": {
                  "status": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 3,
                    "default": 0,
                    "description": "Stuur expliciet mee: 0 aangemeld, 1 opgehaald, 2 onderweg, 3 in bezorging. Weglaten gebruikt 0. Status 4 en 5 vereisen een bezorgpoging."
                  },
                  "occurred_at": {
                    "type": "integer",
                    "format": "int64",
                    "minimum": 946684800,
                    "description": "Werkelijke waarnemingstijd in Unix-seconden UTC; vanaf 1 januari 2000 tot maximaal vijf minuten in de toekomst.",
                    "examples": [
                      1792141200
                    ]
                  }
                }
              },
              "examples": {
                "in_bezorging": {
                  "value": {
                    "status": 3,
                    "occurred_at": 1792141200
                  }
                }
              }
            }
          }
        },
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/gebeurtenissen/#velden-voor-een-gebeurtenis"
        }
      }
    },
    "/deliveries/v1/parcels/{id}/attempts": {
      "get": {
        "operationId": "attempts",
        "summary": "Pogingen voor een levering lezen.",
        "description": "Gebruik een API-key uit de console met scope deliveries:read. Pogingen voor een levering lezen.",
        "responses": {
          "200": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "De UUID uit data.entry_id van je eigen levering; geen eigen ordernummer."
          }
        ],
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/gebeurtenissen/#geschiedenis-uitlezen"
        }
      },
      "post": {
        "operationId": "addAttempt",
        "summary": "Bezorgpoging melden; Idempotency-Key verplicht.",
        "description": "Gebruik een API-key uit de console met scope deliveries:write. Bezorgpoging melden; Idempotency-Key verplicht.",
        "responses": {
          "201": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "De UUID uit data.entry_id van je eigen levering; geen eigen ordernummer."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            },
            "description": "Unieke sleutel van 8–128 bytes, zonder witruimte aan begin of einde. Herhaal dezelfde methode, URL en exacte bodybytes met dezelfde sleutel. Een gewijzigde body met dezelfde sleutel geeft 409."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "time_attempt"
                ],
                "properties": {
                  "time_attempt": {
                    "type": "integer",
                    "format": "int64",
                    "minimum": 946684800,
                    "description": "Werkelijke waarnemingstijd in Unix-seconden UTC; vanaf 1 januari 2000 tot maximaal vijf minuten in de toekomst.",
                    "examples": [
                      1792141200
                    ]
                  },
                  "outcome": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 4,
                    "default": 0,
                    "description": "Stuur expliciet mee: 0 afgeleverd, 1 mislukt, 2 elders afgeleverd, 3 geweigerd, 4 opnieuw ingepland. Weglaten gebruikt 0 (afgeleverd)."
                  },
                  "reason": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10,
                    "default": 0,
                    "description": "0 geen reden, 1 niet thuis, 2 adres niet gevonden, 3 geen toegang, 4 geweigerd, 5 beschadigd, 6 geen tijd, 7 voertuig/verkeer, 8 weer, 9 bedrijf gesloten, 10 anders."
                  },
                  "delivered": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "delivered_country",
                      "delivered_postal_code",
                      "delivered_number"
                    ],
                    "properties": {
                      "delivered_country": {
                        "type": "string",
                        "maxLength": 32,
                        "description": "Landcode; uitsluitend NL (hoofdletters). Bij aanmaken: Voorwaardelijk: samen met land, postcode en nummer van deze groep. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
                        "examples": [
                          "NL"
                        ],
                        "x-maxUtf8Bytes": 32,
                        "const": "NL",
                        "minLength": 1
                      },
                      "delivered_city": {
                        "type": "string",
                        "maxLength": 32,
                        "description": "Plaatsnaam; maximaal 32 UTF-8-bytes. Bij aanmaken: Nee. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
                        "examples": [
                          "Delfzijl"
                        ],
                        "x-maxUtf8Bytes": 32
                      },
                      "delivered_postal_code": {
                        "type": "string",
                        "maxLength": 32,
                        "description": "Nederlandse postcode: vier cijfers en twee letters; bijvoorbeeld 9901KB. Bij aanmaken: Voorwaardelijk: samen met land, postcode en nummer van deze groep. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
                        "examples": [
                          "9901KB"
                        ],
                        "x-maxUtf8Bytes": 32,
                        "minLength": 1
                      },
                      "delivered_street": {
                        "type": "string",
                        "maxLength": 32,
                        "description": "Straatnaam; maximaal 32 UTF-8-bytes. Vervang dit voorbeeld door de echte straat. Bij aanmaken: Nee. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
                        "examples": [
                          "Voorbeeldstraat"
                        ],
                        "x-maxUtf8Bytes": 32
                      },
                      "delivered_number": {
                        "type": "string",
                        "maxLength": 32,
                        "description": "Huisnummer als tekst; maximaal 32 UTF-8-bytes. Zie adrescontrole voor letters en toevoegingen. Bij aanmaken: Voorwaardelijk: samen met land, postcode en nummer van deze groep. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
                        "examples": [
                          "16"
                        ],
                        "x-maxUtf8Bytes": 32,
                        "minLength": 1
                      },
                      "delivered_addition": {
                        "type": "string",
                        "maxLength": 32,
                        "description": "Toevoeging als tekst; maximaal 32 UTF-8-bytes. Weglaten of lege tekst als er geen toevoeging is. Bij aanmaken: Nee. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
                        "examples": [
                          "A"
                        ],
                        "x-maxUtf8Bytes": 32
                      },
                      "delivered_location_type": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 6,
                        "description": "Locatiecode 0–6; zie de codetabel hieronder. Weglaten als onbekend. Bij aanmaken: Nee.",
                        "examples": [
                          0
                        ]
                      }
                    },
                    "description": "Optioneel afleveradres; alleen toegestaan bij outcome 0 of 2. Geef land, postcode en huisnummer samen op."
                  },
                  "attempt_no": {
                    "type": "integer",
                    "const": 0,
                    "description": "Weglaten: vlows kent het volgnummer toe. Een eigen niet-nul nummer is ongeldig."
                  }
                }
              },
              "examples": {
                "niet_thuis": {
                  "value": {
                    "time_attempt": 1792141500,
                    "outcome": 1,
                    "reason": 1
                  }
                },
                "afgeleverd": {
                  "value": {
                    "time_attempt": 1792141800,
                    "outcome": 0,
                    "reason": 0,
                    "delivered": {
                      "delivered_country": "NL",
                      "delivered_postal_code": "9901KB",
                      "delivered_number": "16",
                      "delivered_location_type": 0
                    }
                  }
                }
              }
            }
          }
        },
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/gebeurtenissen/#velden-voor-een-bezorgpoging"
        }
      }
    },
    "/deliveries/v1/address/validate": {
      "post": {
        "operationId": "validateAddress",
        "summary": "Een Nederlands adres controleren.",
        "description": "Gebruik een API-key uit de console met scope deliveries:write. Een Nederlands adres controleren.",
        "responses": {
          "200": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "description": "Vul postcode en huisnummer samen in voor een bruikbare controle. Lege invoer geeft not_provided. De uitkomst staat in data.status; ook not_found, invalid en ambiguous kunnen HTTP 200 geven.",
                "properties": {
                  "postal_code": {
                    "type": "string",
                    "description": "Nederlandse postcode, vier cijfers (eerste niet nul) en twee letters. Spaties en kleine letters worden genormaliseerd.",
                    "examples": [
                      "9901KB"
                    ]
                  },
                  "number": {
                    "type": "string",
                    "description": "Huisnummer 1–99999 als tekst; eventueel een letter/toevoeging. Combineer niet met een aparte addition als het nummer al een toevoeging bevat.",
                    "examples": [
                      "16"
                    ]
                  },
                  "addition": {
                    "type": "string",
                    "description": "Optionele huisletter of toevoeging. Weglaten als onbekend; geen tweede toevoeging bij een al samengesteld number.",
                    "examples": [
                      "A"
                    ]
                  }
                }
              },
              "examples": {
                "basisadres": {
                  "value": {
                    "postal_code": "9901KB",
                    "number": "16"
                  }
                }
              }
            }
          }
        },
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/adressen/#invoervelden"
        }
      }
    },
    "/deliveries/v1/reference": {
      "get": {
        "operationId": "reference",
        "summary": "Statussen, eenheden en referentiecodes.",
        "description": "Gebruik een API-key uit de console met scope deliveries:read. Statussen, eenheden en referentiecodes.",
        "responses": {
          "200": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/pakketvelden/#service--en-locatiecodes"
        }
      }
    },
    "/deliveries/v1/oracle/{metric}": {
      "get": {
        "operationId": "oracle",
        "summary": "Aggregatie activity/planned of coverage-metadata.",
        "description": "Gebruik een API-key uit de console met scope oracle:read. Aggregatie activity/planned of coverage-metadata.",
        "responses": {
          "200": {
            "description": "Successful response; data depends on endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or expired credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "403": {
            "description": "Missing permission or verification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "412": {
            "description": "Stale or missing If-Match",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          },
          "503": {
            "description": "Service or oracle unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "metric",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "activity",
                "planned",
                "coverage"
              ]
            },
            "description": "activity: activiteit; planned: planning; coverage: metadata zonder postcode of periode."
          },
          {
            "name": "pc4",
            "in": "query",
            "schema": {
              "type": "string",
              "pattern": "^[1-9][0-9]{3}$"
            },
            "description": "Verplicht voor activity/planned: vier cijfers, eerste niet nul. Weglaten voor coverage."
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64",
              "multipleOf": 3600
            },
            "description": "Verplicht voor activity/planned: inclusief begin als Unix-seconden UTC op een heel uur. Niet eerder dan 30 dagen geleden."
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int64",
              "multipleOf": 3600
            },
            "description": "Verplicht voor activity/planned: exclusief einde als Unix-seconden UTC op een heel uur. Groter dan from, maximaal 7 dagen later en niet later dan 30 dagen vanaf nu."
          }
        ],
        "externalDocs": {
          "description": "Velden, voorwaarden en voorbeelden",
          "url": "https://wiki.vlows.io/oracle/#invoervelden"
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "API-key uit de vlows-console. Bewaar de volledige key bij aanmaken."
      }
    },
    "schemas": {
      "ParcelInput": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "courier",
          "country",
          "postal_code",
          "number"
        ],
        "properties": {
          "courier": {
            "type": "string",
            "maxLength": 32,
            "description": "Geregistreerde code; 1–32 kleine letters, cijfers, underscores of koppeltekens. Begin met een letter of cijfer. Neem de code exact over. Bij aanmaken: Ja. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "pattern": "^[a-z0-9][a-z0-9_-]{0,31}$",
            "examples": [
              "demo"
            ],
            "x-maxUtf8Bytes": 32,
            "minLength": 1
          },
          "country": {
            "type": "string",
            "maxLength": 32,
            "description": "Landcode; uitsluitend NL (hoofdletters). Bij aanmaken: Ja. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "NL"
            ],
            "x-maxUtf8Bytes": 32,
            "const": "NL",
            "minLength": 1
          },
          "city": {
            "type": "string",
            "maxLength": 32,
            "description": "Plaatsnaam; maximaal 32 UTF-8-bytes. Bij aanmaken: Nee. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "Delfzijl"
            ],
            "x-maxUtf8Bytes": 32
          },
          "postal_code": {
            "type": "string",
            "maxLength": 32,
            "description": "Nederlandse postcode: vier cijfers en twee letters; bijvoorbeeld 9901KB. Bij aanmaken: Ja. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "9901KB"
            ],
            "x-maxUtf8Bytes": 32,
            "minLength": 1
          },
          "street": {
            "type": "string",
            "maxLength": 32,
            "description": "Straatnaam; maximaal 32 UTF-8-bytes. Vervang dit voorbeeld door de echte straat. Bij aanmaken: Nee. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "Voorbeeldstraat"
            ],
            "x-maxUtf8Bytes": 32
          },
          "number": {
            "type": "string",
            "maxLength": 32,
            "description": "Huisnummer als tekst; maximaal 32 UTF-8-bytes. Zie adrescontrole voor letters en toevoegingen. Bij aanmaken: Ja. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "16"
            ],
            "x-maxUtf8Bytes": 32,
            "minLength": 1
          },
          "addition": {
            "type": "string",
            "maxLength": 32,
            "description": "Toevoeging als tekst; maximaal 32 UTF-8-bytes. Weglaten of lege tekst als er geen toevoeging is. Bij aanmaken: Nee. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "A"
            ],
            "x-maxUtf8Bytes": 32
          },
          "time_slot_period_start": {
            "type": "integer",
            "minimum": 946684800,
            "maximum": 9223372036854775807,
            "format": "int64",
            "description": "Begin tijdvak in Unix-seconden UTC. Vanaf 1 januari 2000 tot één jaar na nu. Bij aanmaken: Voorwaardelijk: samen met einde.",
            "examples": [
              1792137600
            ]
          },
          "time_slot_period_end": {
            "type": "integer",
            "minimum": 946684800,
            "maximum": 9223372036854775807,
            "format": "int64",
            "description": "Einde tijdvak in Unix-seconden UTC; na het begin en hoogstens zeven dagen later. Bij aanmaken: Voorwaardelijk: samen met begin.",
            "examples": [
              1792144800
            ]
          },
          "time_delivered": {
            "type": "integer",
            "minimum": 946684800,
            "maximum": 9223372036854775807,
            "format": "int64",
            "description": "Werkelijke aflevertijd in Unix-seconden UTC. Bij andere statussen weglaten. Bij aanmaken: Alleen bij delivery_status 4; dan verplicht. Niet meer dan vijf minuten in de toekomst.",
            "examples": [
              1792141200
            ]
          },
          "parcel_length": {
            "type": "integer",
            "minimum": 0,
            "maximum": 32767,
            "description": "Geheel getal in millimeters: 0–32767. Laat weg als de afmeting onbekend is. Bij aanmaken: Nee.",
            "examples": [
              300
            ]
          },
          "parcel_width": {
            "type": "integer",
            "minimum": 0,
            "maximum": 32767,
            "description": "Geheel getal in millimeters: 0–32767. Laat weg als de afmeting onbekend is. Bij aanmaken: Nee.",
            "examples": [
              200
            ]
          },
          "parcel_height": {
            "type": "integer",
            "minimum": 0,
            "maximum": 32767,
            "description": "Geheel getal in millimeters: 0–32767. Laat weg als de afmeting onbekend is. Bij aanmaken: Nee.",
            "examples": [
              150
            ]
          },
          "parcel_weight": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2147483647,
            "format": "int32",
            "description": "Geheel getal in grammen: 0–2147483647. Laat weg als het gewicht onbekend is. Bij aanmaken: Nee.",
            "examples": [
              1200
            ]
          },
          "delivery_status": {
            "type": "integer",
            "minimum": 0,
            "maximum": 5,
            "description": "Bezorgstatus 0–5. Status 4 vereist time_delivered. Bij aanmaken: Nee; standaard 0.",
            "examples": [
              0
            ],
            "default": 0
          },
          "delivery_attempts": {
            "type": "integer",
            "minimum": 0,
            "maximum": 3,
            "description": "Bij aanmaken exact het aantal ingevulde pogingslots (0–3). Latere pogingen worden apart gemeld; totaal maximaal 127. Bij aanmaken: Nee; automatisch berekend.",
            "examples": [
              0
            ]
          },
          "service_type": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2,
            "description": "Servicecode 0–2; standaardservice is 0, express 1 en same-day 2. Bij aanmaken: Nee.",
            "examples": [
              0
            ]
          },
          "delivery_vehicle": {
            "type": "string",
            "maxLength": 64,
            "description": "Vrije omschrijving van het voertuig, maximaal 64 UTF-8-bytes; geen vaste codelijst. Bij aanmaken: Nee. Maximaal 64 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "bestelbus"
            ],
            "x-maxUtf8Bytes": 64
          },
          "planned_country": {
            "type": "string",
            "maxLength": 32,
            "description": "Landcode; uitsluitend NL (hoofdletters). Bij aanmaken: Voorwaardelijk: samen met land, postcode en nummer van deze groep. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "NL"
            ],
            "x-maxUtf8Bytes": 32,
            "enum": [
              "",
              "NL"
            ]
          },
          "planned_city": {
            "type": "string",
            "maxLength": 32,
            "description": "Plaatsnaam; maximaal 32 UTF-8-bytes. Bij aanmaken: Nee. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "Delfzijl"
            ],
            "x-maxUtf8Bytes": 32
          },
          "planned_postal_code": {
            "type": "string",
            "maxLength": 32,
            "description": "Nederlandse postcode: vier cijfers en twee letters; bijvoorbeeld 9901KB. Bij aanmaken: Voorwaardelijk: samen met land, postcode en nummer van deze groep. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "9901KB"
            ],
            "x-maxUtf8Bytes": 32
          },
          "planned_street": {
            "type": "string",
            "maxLength": 32,
            "description": "Straatnaam; maximaal 32 UTF-8-bytes. Vervang dit voorbeeld door de echte straat. Bij aanmaken: Nee. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "Voorbeeldstraat"
            ],
            "x-maxUtf8Bytes": 32
          },
          "planned_number": {
            "type": "string",
            "maxLength": 32,
            "description": "Huisnummer als tekst; maximaal 32 UTF-8-bytes. Zie adrescontrole voor letters en toevoegingen. Bij aanmaken: Voorwaardelijk: samen met land, postcode en nummer van deze groep. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "16"
            ],
            "x-maxUtf8Bytes": 32
          },
          "planned_addition": {
            "type": "string",
            "maxLength": 32,
            "description": "Toevoeging als tekst; maximaal 32 UTF-8-bytes. Weglaten of lege tekst als er geen toevoeging is. Bij aanmaken: Nee. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "A"
            ],
            "x-maxUtf8Bytes": 32
          },
          "planned_location_type": {
            "type": "integer",
            "minimum": 0,
            "maximum": 6,
            "description": "Locatiecode 0–6; zie de codetabel hieronder. Weglaten als onbekend. Bij aanmaken: Nee.",
            "examples": [
              0
            ]
          },
          "delivered_country": {
            "type": "string",
            "maxLength": 32,
            "description": "Landcode; uitsluitend NL (hoofdletters). Bij aanmaken: Voorwaardelijk: samen met land, postcode en nummer van deze groep. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "NL"
            ],
            "x-maxUtf8Bytes": 32,
            "enum": [
              "",
              "NL"
            ]
          },
          "delivered_city": {
            "type": "string",
            "maxLength": 32,
            "description": "Plaatsnaam; maximaal 32 UTF-8-bytes. Bij aanmaken: Nee. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "Delfzijl"
            ],
            "x-maxUtf8Bytes": 32
          },
          "delivered_postal_code": {
            "type": "string",
            "maxLength": 32,
            "description": "Nederlandse postcode: vier cijfers en twee letters; bijvoorbeeld 9901KB. Bij aanmaken: Voorwaardelijk: samen met land, postcode en nummer van deze groep. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "9901KB"
            ],
            "x-maxUtf8Bytes": 32
          },
          "delivered_street": {
            "type": "string",
            "maxLength": 32,
            "description": "Straatnaam; maximaal 32 UTF-8-bytes. Vervang dit voorbeeld door de echte straat. Bij aanmaken: Nee. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "Voorbeeldstraat"
            ],
            "x-maxUtf8Bytes": 32
          },
          "delivered_number": {
            "type": "string",
            "maxLength": 32,
            "description": "Huisnummer als tekst; maximaal 32 UTF-8-bytes. Zie adrescontrole voor letters en toevoegingen. Bij aanmaken: Voorwaardelijk: samen met land, postcode en nummer van deze groep. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "16"
            ],
            "x-maxUtf8Bytes": 32
          },
          "delivered_addition": {
            "type": "string",
            "maxLength": 32,
            "description": "Toevoeging als tekst; maximaal 32 UTF-8-bytes. Weglaten of lege tekst als er geen toevoeging is. Bij aanmaken: Nee. Maximaal 32 UTF-8-bytes; geen regeleinden of nultekens.",
            "examples": [
              "A"
            ],
            "x-maxUtf8Bytes": 32
          },
          "delivered_location_type": {
            "type": "integer",
            "minimum": 0,
            "maximum": 6,
            "description": "Locatiecode 0–6; zie de codetabel hieronder. Weglaten als onbekend. Bij aanmaken: Nee.",
            "examples": [
              0
            ]
          },
          "time_attempt_1": {
            "type": "integer",
            "minimum": 946684800,
            "maximum": 9223372036854775807,
            "format": "int64",
            "description": "Tijd van poging 1, Unix-seconden UTC. Gebruik de werkelijke waarnemingstijd; slots beginnen bij 1. Bij aanmaken: Voorwaardelijk: samen met uitkomst. Niet meer dan vijf minuten in de toekomst.",
            "examples": [
              1792137600
            ]
          },
          "attempt_1_outcome": {
            "type": "integer",
            "minimum": 0,
            "maximum": 4,
            "description": "Uitkomst 0–4 van poging 1. Zie de uitkomsttabel bij gebeurtenissen en pogingen. Bij aanmaken: Voorwaardelijk: samen met tijd.",
            "examples": [
              1
            ]
          },
          "attempt_1_reason": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Reden 0–10 van poging 1. Bij weglaten geldt 0 (geen aanvullende reden). Bij aanmaken: Nee; alleen bij ingevulde poging.",
            "examples": [
              1
            ]
          },
          "time_attempt_2": {
            "type": "integer",
            "minimum": 946684800,
            "maximum": 9223372036854775807,
            "format": "int64",
            "description": "Tijd van poging 2, Unix-seconden UTC. Gebruik de werkelijke waarnemingstijd; slots beginnen bij 1. Bij aanmaken: Voorwaardelijk: samen met uitkomst. Niet meer dan vijf minuten in de toekomst.",
            "examples": [
              1792138200
            ]
          },
          "attempt_2_outcome": {
            "type": "integer",
            "minimum": 0,
            "maximum": 4,
            "description": "Uitkomst 0–4 van poging 2. Zie de uitkomsttabel bij gebeurtenissen en pogingen. Bij aanmaken: Voorwaardelijk: samen met tijd.",
            "examples": [
              1
            ]
          },
          "attempt_2_reason": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Reden 0–10 van poging 2. Bij weglaten geldt 0 (geen aanvullende reden). Bij aanmaken: Nee; alleen bij ingevulde poging.",
            "examples": [
              1
            ]
          },
          "time_attempt_3": {
            "type": "integer",
            "minimum": 946684800,
            "maximum": 9223372036854775807,
            "format": "int64",
            "description": "Tijd van poging 3, Unix-seconden UTC. Gebruik de werkelijke waarnemingstijd; slots beginnen bij 1. Bij aanmaken: Voorwaardelijk: samen met uitkomst. Niet meer dan vijf minuten in de toekomst.",
            "examples": [
              1792138800
            ]
          },
          "attempt_3_outcome": {
            "type": "integer",
            "minimum": 0,
            "maximum": 4,
            "description": "Uitkomst 0–4 van poging 3. Zie de uitkomsttabel bij gebeurtenissen en pogingen. Bij aanmaken: Voorwaardelijk: samen met tijd.",
            "examples": [
              1
            ]
          },
          "attempt_3_reason": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Reden 0–10 van poging 3. Bij weglaten geldt 0 (geen aanvullende reden). Bij aanmaken: Nee; alleen bij ingevulde poging.",
            "examples": [
              1
            ]
          }
        },
        "description": "Invoer voor een levering. De service maakt entry_id aan. Afmetingen zijn millimeters, gewicht is grammen en tijdvelden zijn Unix-seconden UTC. Vul pogingslots aaneengesloten in."
      },
      "Envelope": {
        "type": "object",
        "required": [
          "data",
          "error"
        ],
        "properties": {
          "data": {},
          "error": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "request_id": {
                    "type": "string"
                  }
                }
              }
            ]
          }
        }
      },
      "ParcelPatch": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "country": {
            "type": "string",
            "maxLength": 32,
            "description": "Landcode; uitsluitend NL (hoofdletters). Weglaten behoudt de bestaande waarde.",
            "examples": [
              "NL"
            ],
            "x-maxUtf8Bytes": 32,
            "const": "NL",
            "minLength": 1
          },
          "city": {
            "type": "string",
            "maxLength": 32,
            "description": "Plaatsnaam; maximaal 32 UTF-8-bytes. Weglaten behoudt de bestaande waarde. Lege tekst wist deze optionele waarde.",
            "examples": [
              "Delfzijl"
            ],
            "x-maxUtf8Bytes": 32
          },
          "postal_code": {
            "type": "string",
            "maxLength": 32,
            "description": "Nederlandse postcode: vier cijfers en twee letters; bijvoorbeeld 9901KB. Weglaten behoudt de bestaande waarde.",
            "examples": [
              "9901KB"
            ],
            "x-maxUtf8Bytes": 32,
            "minLength": 1
          },
          "street": {
            "type": "string",
            "maxLength": 32,
            "description": "Straatnaam; maximaal 32 UTF-8-bytes. Vervang dit voorbeeld door de echte straat. Weglaten behoudt de bestaande waarde. Lege tekst wist deze optionele waarde.",
            "examples": [
              "Voorbeeldstraat"
            ],
            "x-maxUtf8Bytes": 32
          },
          "number": {
            "type": "string",
            "maxLength": 32,
            "description": "Huisnummer als tekst; maximaal 32 UTF-8-bytes. Zie adrescontrole voor letters en toevoegingen. Weglaten behoudt de bestaande waarde.",
            "examples": [
              "16"
            ],
            "x-maxUtf8Bytes": 32,
            "minLength": 1
          },
          "addition": {
            "type": "string",
            "maxLength": 32,
            "description": "Toevoeging als tekst; maximaal 32 UTF-8-bytes. Weglaten of lege tekst als er geen toevoeging is. Weglaten behoudt de bestaande waarde. Lege tekst wist deze optionele waarde.",
            "examples": [
              "A"
            ],
            "x-maxUtf8Bytes": 32
          },
          "time_slot_period_start": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 946684800,
            "maximum": 9223372036854775807,
            "format": "int64",
            "description": "Begin tijdvak in Unix-seconden UTC. Vanaf 1 januari 2000 tot één jaar na nu. Weglaten behoudt de bestaande waarde. null wist deze optionele waarde; het geheel moet geldig blijven.",
            "examples": [
              1792137600
            ]
          },
          "time_slot_period_end": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 946684800,
            "maximum": 9223372036854775807,
            "format": "int64",
            "description": "Einde tijdvak in Unix-seconden UTC; na het begin en hoogstens zeven dagen later. Weglaten behoudt de bestaande waarde. null wist deze optionele waarde; het geheel moet geldig blijven.",
            "examples": [
              1792144800
            ]
          },
          "parcel_length": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 32767,
            "description": "Geheel getal in millimeters: 0–32767. Laat weg als de afmeting onbekend is. Weglaten behoudt de bestaande waarde. null wist deze optionele waarde; het geheel moet geldig blijven.",
            "examples": [
              300
            ]
          },
          "parcel_width": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 32767,
            "description": "Geheel getal in millimeters: 0–32767. Laat weg als de afmeting onbekend is. Weglaten behoudt de bestaande waarde. null wist deze optionele waarde; het geheel moet geldig blijven.",
            "examples": [
              200
            ]
          },
          "parcel_height": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 32767,
            "description": "Geheel getal in millimeters: 0–32767. Laat weg als de afmeting onbekend is. Weglaten behoudt de bestaande waarde. null wist deze optionele waarde; het geheel moet geldig blijven.",
            "examples": [
              150
            ]
          },
          "parcel_weight": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 2147483647,
            "format": "int32",
            "description": "Geheel getal in grammen: 0–2147483647. Laat weg als het gewicht onbekend is. Weglaten behoudt de bestaande waarde. null wist deze optionele waarde; het geheel moet geldig blijven.",
            "examples": [
              1200
            ]
          },
          "service_type": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 2,
            "description": "Servicecode 0–2; standaardservice is 0, express 1 en same-day 2. Weglaten behoudt de bestaande waarde. null wist deze optionele waarde; het geheel moet geldig blijven.",
            "examples": [
              0
            ]
          },
          "delivery_vehicle": {
            "type": "string",
            "maxLength": 64,
            "description": "Vrije omschrijving van het voertuig, maximaal 64 UTF-8-bytes; geen vaste codelijst. Weglaten behoudt de bestaande waarde. Lege tekst wist deze optionele waarde.",
            "examples": [
              "bestelbus"
            ],
            "x-maxUtf8Bytes": 64
          },
          "planned_country": {
            "type": "string",
            "maxLength": 32,
            "description": "Landcode; uitsluitend NL (hoofdletters). Weglaten behoudt de bestaande waarde. Lege tekst wist deze optionele waarde.",
            "examples": [
              "NL"
            ],
            "x-maxUtf8Bytes": 32,
            "enum": [
              "",
              "NL"
            ]
          },
          "planned_city": {
            "type": "string",
            "maxLength": 32,
            "description": "Plaatsnaam; maximaal 32 UTF-8-bytes. Weglaten behoudt de bestaande waarde. Lege tekst wist deze optionele waarde.",
            "examples": [
              "Delfzijl"
            ],
            "x-maxUtf8Bytes": 32
          },
          "planned_postal_code": {
            "type": "string",
            "maxLength": 32,
            "description": "Nederlandse postcode: vier cijfers en twee letters; bijvoorbeeld 9901KB. Weglaten behoudt de bestaande waarde. Lege tekst wist deze optionele waarde.",
            "examples": [
              "9901KB"
            ],
            "x-maxUtf8Bytes": 32
          },
          "planned_street": {
            "type": "string",
            "maxLength": 32,
            "description": "Straatnaam; maximaal 32 UTF-8-bytes. Vervang dit voorbeeld door de echte straat. Weglaten behoudt de bestaande waarde. Lege tekst wist deze optionele waarde.",
            "examples": [
              "Voorbeeldstraat"
            ],
            "x-maxUtf8Bytes": 32
          },
          "planned_number": {
            "type": "string",
            "maxLength": 32,
            "description": "Huisnummer als tekst; maximaal 32 UTF-8-bytes. Zie adrescontrole voor letters en toevoegingen. Weglaten behoudt de bestaande waarde. Lege tekst wist deze optionele waarde.",
            "examples": [
              "16"
            ],
            "x-maxUtf8Bytes": 32
          },
          "planned_addition": {
            "type": "string",
            "maxLength": 32,
            "description": "Toevoeging als tekst; maximaal 32 UTF-8-bytes. Weglaten of lege tekst als er geen toevoeging is. Weglaten behoudt de bestaande waarde. Lege tekst wist deze optionele waarde.",
            "examples": [
              "A"
            ],
            "x-maxUtf8Bytes": 32
          },
          "planned_location_type": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 6,
            "description": "Locatiecode 0–6; zie de codetabel hieronder. Weglaten als onbekend. Weglaten behoudt de bestaande waarde. null wist deze optionele waarde; het geheel moet geldig blijven.",
            "examples": [
              0
            ]
          }
        },
        "description": "Alleen gewijzigde velden meesturen. De samengevoegde levering moet geldig zijn, inclusief adresgroepen en tijdvakgrenzen. Gebruik de actuele ETag als If-Match. Status en aflevergegevens veranderen via gebeurtenissen/pogingen."
      }
    }
  }
}
