{
  "openapi": "3.1.0",
  "info": {
    "title": "smedr API",
    "version": "1.0.0",
    "description": "De publieke API van smedr. Zie https://www.smedr.nl/api.html voor de leesbare referentie."
  },
  "servers": [
    {
      "url": "https://api.smedr.nl/v1"
    }
  ],
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "Een API-sleutel (smedr_live_…)."
      }
    }
  },
  "security": [
    {
      "apiKey": []
    }
  ],
  "paths": {
    "/v1/customers": {
      "get": {
        "tags": [
          "Relaties"
        ],
        "summary": "Relaties ophalen.",
        "description": "Vereist het recht `customers.view`.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Aantal rijen, standaard 50, maximaal 200.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Ondoorzichtige cursor uit de vorige pagina.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated_since",
            "in": "query",
            "required": false,
            "description": "Alleen wat op of ná dit tijdstip is gewijzigd.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      },
      "post": {
        "tags": [
          "Relaties"
        ],
        "summary": "Een relatie aanmaken. Het relatienummer wordt automatisch toegekend.",
        "description": "Vereist het recht `customers.edit`.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "Unieke waarde per aanvraag; een herhaling geeft hetzelfde antwoord terug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/customers/{id}": {
      "get": {
        "tags": [
          "Relaties"
        ],
        "summary": "Eén relatie ophalen.",
        "description": "Vereist het recht `customers.view`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      },
      "patch": {
        "tags": [
          "Relaties"
        ],
        "summary": "Een relatie bijwerken. Alleen de velden die je meestuurt veranderen.",
        "description": "Vereist het recht `customers.edit`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/contacts": {
      "get": {
        "tags": [
          "Contactpersonen"
        ],
        "summary": "Contactpersonen ophalen.",
        "description": "Vereist het recht `contacts.view`.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Aantal rijen, standaard 50, maximaal 200.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Ondoorzichtige cursor uit de vorige pagina.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated_since",
            "in": "query",
            "required": false,
            "description": "Alleen wat op of ná dit tijdstip is gewijzigd.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customer_id",
            "in": "query",
            "required": false,
            "description": "Beperk tot één relatie.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/contacts/{id}": {
      "get": {
        "tags": [
          "Contactpersonen"
        ],
        "summary": "Eén contactpersoon ophalen.",
        "description": "Vereist het recht `contacts.view`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      },
      "patch": {
        "tags": [
          "Contactpersonen"
        ],
        "summary": "Een contactpersoon bijwerken.",
        "description": "Vereist het recht `contacts.edit`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/customers/{id}/contacts": {
      "post": {
        "tags": [
          "Contactpersonen"
        ],
        "summary": "Een contactpersoon toevoegen aan een relatie.",
        "description": "Vereist het recht `contacts.edit`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "Unieke waarde per aanvraag; een herhaling geeft hetzelfde antwoord terug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/products": {
      "get": {
        "tags": [
          "Producten"
        ],
        "summary": "Producten ophalen.",
        "description": "Vereist het recht `products.view`.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Aantal rijen, standaard 50, maximaal 200.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Ondoorzichtige cursor uit de vorige pagina.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated_since",
            "in": "query",
            "required": false,
            "description": "Alleen wat op of ná dit tijdstip is gewijzigd.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      },
      "post": {
        "tags": [
          "Producten"
        ],
        "summary": "Een product aanmaken. Het productnummer wordt automatisch toegekend.",
        "description": "Vereist het recht `products.edit`.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "Unieke waarde per aanvraag; een herhaling geeft hetzelfde antwoord terug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/products/{id}": {
      "get": {
        "tags": [
          "Producten"
        ],
        "summary": "Eén product ophalen.",
        "description": "Vereist het recht `products.view`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      },
      "patch": {
        "tags": [
          "Producten"
        ],
        "summary": "Een product bijwerken.",
        "description": "Vereist het recht `products.edit`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/quotes": {
      "get": {
        "tags": [
          "Offertes"
        ],
        "summary": "Offertes ophalen (zonder regels).",
        "description": "Vereist het recht `quotes.view`.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Aantal rijen, standaard 50, maximaal 200.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Ondoorzichtige cursor uit de vorige pagina.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated_since",
            "in": "query",
            "required": false,
            "description": "Alleen wat op of ná dit tijdstip is gewijzigd.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "draft, sent, accepted, rejected of superseded.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      },
      "post": {
        "tags": [
          "Offertes"
        ],
        "summary": "Een offerte aanmaken, eventueel meteen met secties en regels. Ontstaat altijd als concept.",
        "description": "Vereist het recht `quotes.edit`.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "Unieke waarde per aanvraag; een herhaling geeft hetzelfde antwoord terug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/quotes/{id}": {
      "get": {
        "tags": [
          "Offertes"
        ],
        "summary": "Eén offerte met haar secties en regels.",
        "description": "Vereist het recht `quotes.view`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      },
      "patch": {
        "tags": [
          "Offertes"
        ],
        "summary": "Kopgegevens bijwerken. De status is niet via de API te wijzigen — versturen is een handeling in smedr zelf.",
        "description": "Vereist het recht `quotes.edit`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/projects": {
      "get": {
        "tags": [
          "Projecten"
        ],
        "summary": "Projecten ophalen.",
        "description": "Vereist het recht `projects.view`. Vereist de module Projecten.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Aantal rijen, standaard 50, maximaal 200.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Ondoorzichtige cursor uit de vorige pagina.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated_since",
            "in": "query",
            "required": false,
            "description": "Alleen wat op of ná dit tijdstip is gewijzigd.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      },
      "post": {
        "tags": [
          "Projecten"
        ],
        "summary": "Een project aanmaken.",
        "description": "Vereist het recht `projects.edit`. Vereist de module Projecten.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "Unieke waarde per aanvraag; een herhaling geeft hetzelfde antwoord terug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/projects/{id}": {
      "get": {
        "tags": [
          "Projecten"
        ],
        "summary": "Eén project ophalen.",
        "description": "Vereist het recht `projects.view`. Vereist de module Projecten.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/tasks": {
      "get": {
        "tags": [
          "Taken en interacties"
        ],
        "summary": "Taken en interacties ophalen.",
        "description": "Vereist het recht `tasks.view`. Vereist de module CRM.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Aantal rijen, standaard 50, maximaal 200.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Ondoorzichtige cursor uit de vorige pagina.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated_since",
            "in": "query",
            "required": false,
            "description": "Alleen wat op of ná dit tijdstip is gewijzigd.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "open",
            "in": "query",
            "required": false,
            "description": "true voor alleen openstaande taken.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subject_id",
            "in": "query",
            "required": false,
            "description": "Beperk tot één onderwerp.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      },
      "post": {
        "tags": [
          "Taken en interacties"
        ],
        "summary": "Een taak of interactie vastleggen bij een relatie, offerte, project, factuur of abonnement.",
        "description": "Vereist het recht `tasks.edit`. Vereist de module CRM.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "Unieke waarde per aanvraag; een herhaling geeft hetzelfde antwoord terug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/tasks/{id}": {
      "get": {
        "tags": [
          "Taken en interacties"
        ],
        "summary": "Eén taak ophalen.",
        "description": "Vereist het recht `tasks.view`. Vereist de module CRM.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/invoices": {
      "get": {
        "tags": [
          "Facturen"
        ],
        "summary": "Facturen ophalen, inclusief het betaalde bedrag.",
        "description": "Vereist het recht `invoices.view`. Vereist de module Facturen.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Aantal rijen, standaard 50, maximaal 200.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Ondoorzichtige cursor uit de vorige pagina.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated_since",
            "in": "query",
            "required": false,
            "description": "Alleen wat op of ná dit tijdstip is gewijzigd.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "draft, sent, credited of written_off.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      },
      "post": {
        "tags": [
          "Facturen"
        ],
        "summary": "Een concept-factuur aanmaken, eventueel meteen met regels.",
        "description": "Vereist het recht `invoices.edit`. Vereist de module Facturen.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "Unieke waarde per aanvraag; een herhaling geeft hetzelfde antwoord terug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/invoices/{id}": {
      "get": {
        "tags": [
          "Facturen"
        ],
        "summary": "Eén factuur met haar regels.",
        "description": "Vereist het recht `invoices.view`. Vereist de module Facturen.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/invoices/{id}/lines": {
      "put": {
        "tags": [
          "Facturen"
        ],
        "summary": "Alle regels van een concept-factuur vervangen. Werkt alleen zolang de factuur concept is.",
        "description": "Vereist het recht `invoices.edit`. Vereist de module Facturen.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/subscriptions": {
      "get": {
        "tags": [
          "Abonnementen"
        ],
        "summary": "Abonnementen ophalen.",
        "description": "Vereist het recht `subscriptions.view`. Vereist de module Abonnementen.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Aantal rijen, standaard 50, maximaal 200.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Ondoorzichtige cursor uit de vorige pagina.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated_since",
            "in": "query",
            "required": false,
            "description": "Alleen wat op of ná dit tijdstip is gewijzigd.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      },
      "post": {
        "tags": [
          "Abonnementen"
        ],
        "summary": "Een concept-abonnement aanmaken.",
        "description": "Vereist het recht `subscriptions.edit`. Vereist de module Abonnementen.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "Unieke waarde per aanvraag; een herhaling geeft hetzelfde antwoord terug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/subscriptions/{id}": {
      "get": {
        "tags": [
          "Abonnementen"
        ],
        "summary": "Eén abonnement ophalen.",
        "description": "Vereist het recht `subscriptions.view`. Vereist de module Abonnementen.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    },
    "/v1/subscriptions/{id}/lines": {
      "put": {
        "tags": [
          "Abonnementen"
        ],
        "summary": "Alle regels van een concept-abonnement vervangen.",
        "description": "Vereist het recht `subscriptions.edit`. Vereist de module Abonnementen.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Gelukt"
          },
          "400": {
            "description": "De aanvraag klopt niet"
          },
          "401": {
            "description": "Sleutel ontbreekt, is ongeldig of mag hier niet vandaan"
          },
          "403": {
            "description": "Sleutel mist het benodigde recht"
          },
          "404": {
            "description": "Niet gevonden, of de module staat niet aan"
          },
          "429": {
            "description": "Te veel aanroepen"
          }
        }
      }
    }
  }
}
