{
  "components": {
    "schemas": {
      "Problem": {
        "properties": {
          "code": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "issues": {
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "status": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "session": {
        "in": "cookie",
        "name": "quotometry_session",
        "type": "apiKey"
      },
      "staffSession": {
        "in": "cookie",
        "name": "quotometry_staff",
        "type": "apiKey"
      }
    }
  },
  "info": {
    "description": "Control plane for merchants (session cookie + X-Quotometry-Tenant) and platform staff (/staff). Bodies and responses are typed in @quotometry/control-client; errors are RFC 9457 problem+json (docs/agent-docs/api/errors.md).",
    "title": "Quotometry merchant API",
    "version": "0.1.4"
  },
  "openapi": "3.1.0",
  "paths": {
    "/healthz": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "Liveness",
        "tags": [
          "meta"
        ]
      }
    },
    "/metrics": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "Prometheus scrape (internal; `METRICS_TOKEN` when set)",
        "tags": [
          "meta"
        ]
      }
    },
    "/readyz": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "Readiness: the database answers",
        "tags": [
          "meta"
        ]
      }
    },
    "/staff/v1/announcements": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Announcements",
        "tags": [
          "staff"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Create an announcement",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/announcements/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Delete an announcement",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/audit": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Staff audit log (?tenant, ?action, ?actor, ?from, ?to, ?limit, ?offset)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/auth/login": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "Staff sign-in",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/auth/logout": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Staff sign-out",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/auth/me": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Current staff user",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/auth/totp/disable": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Switch staff two-factor off (password required)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/auth/totp/enable": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Confirm staff two-factor, returns recovery codes",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/auth/totp/setup": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Start staff two-factor enrolment",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/blocklist": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Sign-up blocklist",
        "tags": [
          "staff"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Block a domain / e-mail",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/blocklist/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Unblock",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/catalog/effective/{process}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "process",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "The catalogue as merchants see it",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/catalog/quality": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "What is missing from catalogue entries",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/catalog/revisions": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Catalogue revisions",
        "tags": [
          "staff"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Start a catalogue revision",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/catalog/revisions/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Throw a draft revision away",
        "tags": [
          "staff"
        ]
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "The differences a revision carries",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/catalog/revisions/{id}/entries": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Take a difference back out",
        "tags": [
          "staff"
        ]
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Add or replace a catalogue entry",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/catalog/revisions/{id}/import": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Import machines or materials from CSV",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/catalog/revisions/{id}/publish": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Publish a catalogue revision",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/coupons": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Platform coupons shops can claim",
        "tags": [
          "staff"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Issue a platform coupon",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/coupons/{id}/active": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Stop or restart a platform coupon",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/deliverability": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "How every shop's buyer mail is landing, worst first",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/domains": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Every shop's hostnames, the ones not serving first",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/domains/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Take a hostname off a shop, and out of the provider",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/domains/{id}/recheck": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Put a hostname back in the sweep's hands now",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/domains/{id}/verify": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Say a hostname is proved when DNS cannot (superadmin, with a reason)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/flags": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Feature flags",
        "tags": [
          "staff"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Create or change a feature flag",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/flags/{key}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Remove a feature flag",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/flags/{key}/tenants": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Tenants decided individually for a flag",
        "tags": [
          "staff"
        ]
      },
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Decide one tenant for a flag",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/legal": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Legal document versions, drafts included",
        "tags": [
          "staff"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Draft a new document version",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/legal/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Discard a draft version",
        "tags": [
          "staff"
        ]
      },
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Edit a draft version",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/legal/{id}/publish": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Publish a document version",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/mail-templates": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Platform e-mail wording and what each message may say",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/mail-templates/{key}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Back to the built-in wording",
        "tags": [
          "staff"
        ]
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Reword a platform e-mail",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/mail-templates/{key}/preview": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Preview wording with example values",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/mail-templates/{key}/revisions": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "What a message used to say",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/mail/events": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "A bounce or complaint from the mail provider",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/overview": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Platform overview (MRR, sign-ups, usage, queues, geometry workers)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/overview/series": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "The platform per day over the last 30 days",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/payments": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Payments ledger (?limit, ?offset; whole ledger as CSV on Accept: text/csv)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/plan-code": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "The code a new plan with this name would be given (?name)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/plans": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Plans (one row per code, with status and whether it may be deleted) and every version",
        "tags": [
          "staff"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "New plan (code derived from the name) or its next version; retires the version on sale",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/plans/{code}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "code",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Delete a whole plan no shop has ever subscribed to (409 plan_in_use)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/plans/{code}/migrate": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "code",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Migrate subscribers to the latest version",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/plans/{code}/{version}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "code",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Delete a plan version no shop has ever subscribed to (409 plan_in_use)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/plans/{code}/{version}/activate": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "code",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Put a version on sale, retiring the one that was",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/plans/{code}/{version}/archive": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "code",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Retire a plan version, or put it back on sale",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/dns": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Whether the platform's own DNS is in place: the edge, the wildcard and the CNAME target",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/geometry-workers": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "The geometry workers' limits, each worker's last sample and verdict, and how many to run",
        "tags": [
          "staff"
        ]
      },
      "put": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Set analyses per worker, analyses per shop and the analysis timeout",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/geometry-workers/series": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Worker utilisation, queue, wait and run times and the busiest shops over 24h, 7d or 30d",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/mail": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "How the platform's mail leaves: the transport chosen, each one's key hint, addresses, SES's account",
        "tags": [
          "staff"
        ]
      },
      "put": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Choose Resend, Amazon SES or an SMTP server; store keys (sealed) and the platform's addresses",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/mail/domain": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Register the platform's own sending domains with the chosen provider; the records each needs",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/mail/ses/notifications": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Create SES's configuration set, SNS topic and subscription for bounces and complaints",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/mail/test": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Send a test message through a transport",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/names": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "The sites domain and CNAME target, and where each came from",
        "tags": [
          "staff"
        ]
      },
      "put": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Rename the platform: the sites domain or the CNAME target",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/payments": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "The payment provider chosen, Stripe's key hint and webhook URL, shops held by each provider",
        "tags": [
          "staff"
        ]
      },
      "put": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Choose the payment provider; store Stripe's keys (sealed)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/sign-in": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "The sign-in providers, their redirect addresses and linked accounts",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/sign-in/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Remove a sign-in provider and every account's link to it",
        "tags": [
          "staff"
        ]
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Add or change a sign-in provider: issuer, client id, secret (sealed), on, sign-up allowed",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/site-cache": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "The memory budget for shop websites and what each quote-api server holds",
        "tags": [
          "staff"
        ]
      },
      "put": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Set the memory budget for shop websites, per server",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/widget-versions": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "The widget versions a shop may choose, the default, and how many widgets pin each",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/widget-versions/{version}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Take a widget version off the list; widgets pinning it follow the default",
        "tags": [
          "staff"
        ]
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "List a widget version or change one: its loader and core address, notes, retired",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/platform/widget-versions/{version}/default": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Make a widget version the default every unpinned widget loads",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/referrals": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Sign-ups by referring tenant",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/site-reports": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "What people have reported about shops' websites",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/site-reports/{id}": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Record that a report was looked at, and what came of it",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/sites": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Every shop's website (?q=, ?filter=new|noindex|reported|suspended)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/staff": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Staff users",
        "tags": [
          "staff"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Create a staff user",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/staff/{id}": {
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Update a staff user",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/subscriptions": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Subscriptions overview (?status, ?limit, ?offset)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/system": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Queues, dead jobs, analysis failures",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/system/jobs/{id}": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Retry a dead job",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/system/series": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Mail per day and analysis failures over a span (?from, ?to)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Tenants list (?q, ?plan, ?status, ?limit, ?offset)",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Tenant detail",
        "tags": [
          "staff"
        ]
      },
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Tenant notes and tags",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}/billing": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Tenant billing view",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}/discount": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Set the agreed discount on this shop's own bill",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}/impersonate": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Read-only impersonation session",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}/invoices": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Issue an invoice",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}/invoices/{invoice}/close": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "invoice",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Close an invoice",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}/payments": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Record a manual payment",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}/quota-override": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Quota override",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}/site-reports": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "The reports about one shop",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}/site/status": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Suspend a shop's website, or restore it",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}/status": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Suspend / reactivate a tenant",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}/subscription": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Assign a plan",
        "tags": [
          "staff"
        ]
      }
    },
    "/staff/v1/tenants/{id}/subscription/status": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "staffSession": []
          }
        ],
        "summary": "Set subscription status",
        "tags": [
          "staff"
        ]
      }
    },
    "/v1/analytics/demand": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Demand insight (?from, ?to, ?mode, ?widgets)",
        "tags": [
          "analytics"
        ]
      }
    },
    "/v1/analytics/funnel": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Funnel (?from, ?to, ?mode, ?widgets)",
        "tags": [
          "analytics"
        ]
      }
    },
    "/v1/analytics/operations": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Operations",
        "tags": [
          "analytics"
        ]
      }
    },
    "/v1/analytics/revenue": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Revenue (?from, ?to, ?mode, ?widgets)",
        "tags": [
          "analytics"
        ]
      }
    },
    "/v1/analytics/summary": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "KPI tiles (?mode=live|test|all, ?widgets=wgt_…,…)",
        "tags": [
          "analytics"
        ]
      }
    },
    "/v1/analytics/usage": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Usage per configuration per day (?from, ?to, ?mode, ?widgets)",
        "tags": [
          "analytics"
        ]
      }
    },
    "/v1/analytics/usage.csv": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Usage as CSV",
        "tags": [
          "analytics"
        ]
      }
    },
    "/v1/announcements": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Platform announcements for merchants",
        "tags": [
          "tenant"
        ]
      }
    },
    "/v1/api-keys": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "The keys that still work, with when each was last used (never a secret)",
        "tags": [
          "developers"
        ]
      },
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Create a secret API key (shown once)",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/api-keys/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Revoke a key: its next request is refused",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/audit": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Audit log of this shop, paged (?action, ?actor, ?from, ?to, ?q, ?limit, ?offset), with filter facets",
        "tags": [
          "tenant"
        ]
      }
    },
    "/v1/auth/identities": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "The providers linked to this account, and the ones it could link",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/identities/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Unlink a provider, unless it is the only way into the account",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/identities/{id}/link": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Begin linking a provider to this account: answers the address to go to",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/invitations": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Invite a member",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/invitations/accept": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Accept an invitation as the signed-in invitee",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/invitations/lookup": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "What an invitation link offers: shop, role, address, whether it has an account",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/invitations/register": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "Create an account from an invitation and join the shop, signed in",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/login": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "Log in (session cookie)",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/logout": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Log out",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/me": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Current user and memberships",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/oidc/providers": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "The sign-in providers a person may use, and whether each allows sign-up",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/oidc/second-factor": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "The authenticator code after a provider's sign-in",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/oidc/{id}/callback": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Where the provider sends the browser back; redirects to the console",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/oidc/{id}/start": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Begin a sign-in or sign-up with a provider: answers the address to go to",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/password": {
      "patch": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Change the password (revokes other sessions)",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/password/forgot": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Request a password-reset link (always answers the same)",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/password/reset": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Set a new password from a reset token",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/permissions": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Permission matrix for the current role",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/security": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Verification state, two-factor state, active sessions",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/signup": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "Sign up: creates the user, the tenant and the owner membership",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/totp/disable": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Switch two-factor off (password required)",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/totp/enable": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Confirm two-factor enrolment, returns recovery codes",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/totp/setup": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Start two-factor enrolment",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/verify": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "Confirm an e-mail address with the token from the link",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/auth/verify/send": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Send or re-send the verification link",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/billing": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Billing page data: plan, usage, invoices, payments",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/cancel": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Cancel at period end",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/change": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Change plan (manual billing): upgrade now with an invoice, downgrade at period end; refused when a payment provider is chosen",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/change/cancel": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Keep the current plan: take back a scheduled change",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/checkout": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Start hosted checkout with the chosen provider, or change the plan of a subscription it holds",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/coupon": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Claim a platform coupon for this shop",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/invoices/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Subscription invoice as a PDF (id ends in `.pdf`)",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/invoices/{id}/pay": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Pay an open manual invoice by card: a checkout with the chosen online provider",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/portal": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Open the portal of the provider holding the subscription",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/preview": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "What a plan change costs today, when it applies, and what stops a smaller plan fitting",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/sandbox/pay": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Sandbox: pay a test checkout with a test card",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/sandbox/session": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Sandbox: what a test checkout is for (?session=)",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/sandbox/simulate": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Sandbox: make a renewal or a failed payment happen now",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/billing/webhooks/stripe": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "Stripe webhook (signed)",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/configurations": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Configurations",
        "tags": [
          "configurations"
        ]
      },
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Create from a template",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/import": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Import",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Delete a configuration that was never quoted",
        "tags": [
          "configurations"
        ]
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Configuration with draft and versions",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/archive": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Archive: stop offering it and take it off every widget",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/backtest": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Backtest the draft against stored quotes",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/buyer-options": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "What the widget would show a buyer, from the draft",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/calibrate": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "What this process can be calibrated on, for one machine",
        "tags": [
          "configurations"
        ]
      },
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Fit calibratable coefficients to parts the shop has made",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/diff": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Semantic diff between versions",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/draft": {
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Save the draft (If-Match etag)",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/duplicate": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Duplicate",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/export": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Export",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/finishes": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Finish presets, priced at this draft's own labour rates",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/golden": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Golden parts",
        "tags": [
          "configurations"
        ]
      },
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Add a golden part",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/golden/evaluate": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Evaluate golden parts against the draft",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/golden/{gid}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "gid",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Remove a golden part",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/publish": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Publish the draft as a new version",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/restore": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Restore an archived configuration",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/rollback": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Roll back to a version",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/simulate": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Sample quote with the draft",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/usage": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Usage of a configuration",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/validate": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Validate the draft",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/configurations/{id}/versions": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Versions",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/coupons": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Coupons",
        "tags": [
          "customers"
        ]
      },
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Create a coupon",
        "tags": [
          "customers"
        ]
      }
    },
    "/v1/coupons/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Delete a coupon",
        "tags": [
          "customers"
        ]
      },
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Update a coupon",
        "tags": [
          "customers"
        ]
      }
    },
    "/v1/coupons/{id}/uses": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Coupon uses",
        "tags": [
          "customers"
        ]
      }
    },
    "/v1/customers": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Customers (?q, ?tag, ?from, ?to, ?limit, ?offset; answers total)",
        "tags": [
          "customers"
        ]
      }
    },
    "/v1/customers.csv": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Customers as CSV",
        "tags": [
          "customers"
        ]
      }
    },
    "/v1/customers/token": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Mint a customer token",
        "tags": [
          "customers"
        ]
      }
    },
    "/v1/customers/token-secret": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Whether a customer-token secret exists",
        "tags": [
          "customers"
        ]
      },
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Rotate the customer-token secret (shown once)",
        "tags": [
          "customers"
        ]
      }
    },
    "/v1/customers/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "GDPR delete",
        "tags": [
          "customers"
        ]
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Customer detail with history",
        "tags": [
          "customers"
        ]
      },
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Update a customer",
        "tags": [
          "customers"
        ]
      }
    },
    "/v1/customers/{id}/export": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "GDPR export",
        "tags": [
          "customers"
        ]
      }
    },
    "/v1/domains": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Every hostname this shop holds, and the records to add",
        "tags": [
          "widgets"
        ]
      },
      "put": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Claim a hostname for the shop website (or, from the E-mail page, its mail)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/domains/adopt": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Show the shop website on a hostname its widget's hosted page already serves",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/domains/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Give a hostname back",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/domains/{id}/verify": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Read the proof record now",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/events": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Recent events (?limit, ?offset; answers total)",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/features": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Feature flags for this tenant",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/inbox/assign/{entity}/{id}": {
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "entity",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Assignment and tags",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/messages": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Messages people wrote through the shop's website",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/messages/{id}": {
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Mark a message read, or spam",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/notes/{entity}/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "entity",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Notes",
        "tags": [
          "inbox"
        ]
      },
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "entity",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Add a note",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/notes/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Delete a note",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/orders": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Orders (?mode, ?widgets, ?from, ?to, ?limit, ?offset; answers total)",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/orders/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Order detail",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/orders/{id}/pdf": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Order confirmation / pro-forma PDF",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/orders/{id}/spec.pdf": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Print specification: what to make and how, no prices",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/orders/{id}/status": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Set order status (+ tracking)",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/parts/{id}/download": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Presigned download of a quoted part's file (audited)",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/quotes": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Quotes and RFQs (?rfq, ?status, ?q, ?mode, ?widgets, ?from, ?to, ?limit, ?offset; answers total)",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/quotes/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Quote detail",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/quotes/{id}/convert": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Convert to an order",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/quotes/{id}/decline": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Decline",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/quotes/{id}/lines/{position}/price": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "position",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Override a line price",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/quotes/{id}/pdf": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Quote PDF",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/quotes/{id}/send": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Send the quote (accept link)",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/inbox/quotes/{id}/spec.pdf": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Print specification of a quote's parts, no prices",
        "tags": [
          "inbox"
        ]
      }
    },
    "/v1/invitations/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Revoke a pending invitation",
        "tags": [
          "tenant"
        ]
      }
    },
    "/v1/legal": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Legal documents in force with who in this shop accepted each, and what this user must still accept",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/legal/accept": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Record that this user accepted a document version",
        "tags": [
          "auth"
        ]
      }
    },
    "/v1/library": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Library entities (machines, materials)",
        "tags": [
          "library"
        ]
      },
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Create a library entity",
        "tags": [
          "library"
        ]
      }
    },
    "/v1/library.csv": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Library as CSV",
        "tags": [
          "library"
        ]
      }
    },
    "/v1/library/import": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Import library CSV",
        "tags": [
          "library"
        ]
      }
    },
    "/v1/library/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Delete an unreferenced entity",
        "tags": [
          "library"
        ]
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Entity with where-used",
        "tags": [
          "library"
        ]
      },
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Update an entity",
        "tags": [
          "library"
        ]
      }
    },
    "/v1/library/{id}/apply": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Library-wide change into linked drafts",
        "tags": [
          "library"
        ]
      }
    },
    "/v1/library/{id}/archive": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Archive / restore",
        "tags": [
          "library"
        ]
      }
    },
    "/v1/library/{id}/stock": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Set live stock (entity or colour)",
        "tags": [
          "library"
        ]
      }
    },
    "/v1/library/{id}/usage": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Where used",
        "tags": [
          "library"
        ]
      }
    },
    "/v1/mail/log": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "What this shop's account sent, and what happened to it (?status, ?kind, ?limit, ?offset; answers total)",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/mail/provider/{provider}": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "provider",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "A bounce or complaint from the mail provider (`resend`: Svix-signed; `ses`: SNS, basic auth)",
        "tags": [
          "meta"
        ]
      }
    },
    "/v1/mail/routes": {
      "put": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Which sender each kind of mail goes from (orders, quotes, team)",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/mail/senders": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "This shop's senders, and which mail each one sends",
        "tags": [
          "developers"
        ]
      },
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Add a sender: your domain, your mail server or your Resend account",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/mail/senders/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Remove a sender: its mail goes from our address",
        "tags": [
          "developers"
        ]
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Change a sender",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/mail/senders/{id}/test": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Send a test message through your own server or account",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/mail/senders/{id}/verify": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Read a domain sender's records now",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/mail/suppressions": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Addresses we will not write to",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/mail/suppressions/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Write to this address again",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/mail/unsubscribe": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "Unsubscribe page for a signed link (returns HTML)",
        "tags": [
          "meta"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "One-click unsubscribe (RFC 8058; returns HTML)",
        "tags": [
          "meta"
        ]
      }
    },
    "/v1/members": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Team members, pending invitations, roles and notification events",
        "tags": [
          "tenant"
        ]
      }
    },
    "/v1/members/me/notifications": {
      "patch": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Own notification preferences",
        "tags": [
          "tenant"
        ]
      }
    },
    "/v1/members/{user}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "user",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Remove a member",
        "tags": [
          "tenant"
        ]
      },
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "user",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Change a member's role or notifications",
        "tags": [
          "tenant"
        ]
      }
    },
    "/v1/openapi.json": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "This document",
        "tags": [
          "meta"
        ]
      }
    },
    "/v1/parts/{id}/preview": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "A part's name, size and preview mesh link",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/price-lists": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Price lists",
        "tags": [
          "customers"
        ]
      },
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Create a price list",
        "tags": [
          "customers"
        ]
      }
    },
    "/v1/price-lists/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Delete a price list",
        "tags": [
          "customers"
        ]
      },
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Update a price list",
        "tags": [
          "customers"
        ]
      }
    },
    "/v1/privacy/downloads": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Download audit, paged (?q, ?who, ?from, ?to, ?limit, ?offset)",
        "tags": [
          "privacy"
        ]
      }
    },
    "/v1/privacy/export": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Tenant data export",
        "tags": [
          "privacy"
        ]
      }
    },
    "/v1/processes/{id}/catalog": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Platform catalogue for a process",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/processes/{id}/settings-schema": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Settings schema of a process",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/public/plans": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "The plans on sale and public, in pricing-page order (cacheable)",
        "tags": [
          "public"
        ]
      }
    },
    "/v1/public/session": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "Whether the visitor is signed in to the console: always 200; a name, initials and shop when they are",
        "tags": [
          "public"
        ]
      }
    },
    "/v1/samples": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Upload a sample part for the simulator",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/samples/catalogue": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "The sample parts the platform ships",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/samples/catalogue/{key}": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Extrude a shipped sample and analyse it",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/samples/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Sample analysis status and parts, each with its preview mesh",
        "tags": [
          "configurations"
        ]
      }
    },
    "/v1/site": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "The shop's website: its draft, its themes, the masters, its versions, the quotas",
        "tags": [
          "widgets"
        ]
      },
      "patch": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Change the address the website answers on",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/assets": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "The website's media library",
        "tags": [
          "widgets"
        ]
      },
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Upload a picture (bytes in the body)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/assets/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Remove a picture",
        "tags": [
          "widgets"
        ]
      },
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Say what a picture shows",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/assets/{id}/file": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "A picture's bytes, for the console's media library",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/draft": {
      "put": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "The website's settings and the theme it wears (needs `If-Match`)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/master-download/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "A master template as a zip (public)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/masters/{id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "A master template's home page with its sample content (public, HTML)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/masters/{id}/": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "A master template's home page (public, HTML)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/masters/{id}/{*rest}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "*rest",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "Any page or file of a master template (public)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/publish": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Publish the theme the website wears: what buyers read",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/rollback": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Serve an earlier published version again, its theme back in the editor",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/slug-check": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Whether an address on the platform domain is free (?slug=)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/themes": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [],
        "summary": "The master templates a website may start from (public)",
        "tags": [
          "widgets"
        ]
      },
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "A copy of a master template, or of one of the shop's themes",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/themes/upload": {
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "A theme from a zip (bytes in the body)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/themes/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Remove a theme the website is not wearing",
        "tags": [
          "widgets"
        ]
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "One theme: its manifest, content, files and issues",
        "tags": [
          "widgets"
        ]
      },
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "A theme's name or content (`If-Match`)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/themes/{id}/activate": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "The website wears this theme from the next publish",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/themes/{id}/download": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "The theme as a zip",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/themes/{id}/files/{*path}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "*path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Remove the shop's version of a file",
        "tags": [
          "widgets"
        ]
      },
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "*path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "One file of a theme, for the code view",
        "tags": [
          "widgets"
        ]
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "*path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Write one file of a theme (bytes in the body, `If-Match`)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/site/themes/{id}/preview": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "A short-lived address the editor's preview is served from",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/subscription": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Current subscription and plan",
        "tags": [
          "billing"
        ]
      }
    },
    "/v1/tenant": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Tenant profile and settings blocks (company, regional, tax, shipping, calendar, notifications, documents, files, abuse)",
        "tags": [
          "tenant"
        ]
      },
      "patch": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Update tenant profile and settings",
        "tags": [
          "tenant"
        ]
      }
    },
    "/v1/webhook-deliveries/{id}/replay": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Replay a delivery",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/webhook-endpoints": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Endpoints",
        "tags": [
          "developers"
        ]
      },
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Create an endpoint",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/webhook-endpoints/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Delete an endpoint",
        "tags": [
          "developers"
        ]
      },
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Update an endpoint",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/webhook-endpoints/{id}/deliveries": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Delivery log",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/webhook-endpoints/{id}/rotate": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Rotate the signing secret",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/webhook-endpoints/{id}/test": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Test-fire",
        "tags": [
          "developers"
        ]
      }
    },
    "/v1/widget-versions": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "The widget versions a widget may pin, the default first",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/widgets": {
      "get": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Widgets",
        "tags": [
          "widgets"
        ]
      },
      "post": {
        "parameters": [
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Create a widget",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/widgets/{id}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Delete a widget",
        "tags": [
          "widgets"
        ]
      },
      "patch": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Update a widget (theme, badge, origins, enabled)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/widgets/{id}/check": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Install checker",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/widgets/{id}/configurations": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Attach a configuration",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/widgets/{id}/configurations/{cfg}": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "cfg",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Detach a configuration",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/widgets/{id}/domain": {
      "delete": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Release the custom domain",
        "tags": [
          "widgets"
        ]
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Claim a custom domain for the hosted page",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/widgets/{id}/domain/verify": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Prove the domain points here",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/widgets/{id}/duplicate": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "Copy a widget (new key, no origins, switched off)",
        "tags": [
          "widgets"
        ]
      }
    },
    "/v1/widgets/{id}/go-live": {
      "post": {
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tenant the session acts on",
            "in": "header",
            "name": "X-Quotometry-Tenant",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Any value; proves a same-site script made the call",
            "in": "header",
            "name": "X-Quotometry-Csrf",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OK"
          },
          "4XX": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem"
          }
        },
        "security": [
          {
            "session": []
          }
        ],
        "summary": "A test widget becomes live: new live key, the test key stops working",
        "tags": [
          "widgets"
        ]
      }
    }
  },
  "servers": [
    {
      "url": "https://api.quotometry.example"
    }
  ]
}
