{
  "openapi": "3.0.1",
  "info": {
    "title": "Neptune API (internal use only)",
    "contact": {
      "name": "SPORTident GmbH",
      "email": "support@sportident.com"
    },
    "version": "v1"
  },
  "servers": [
    {
      "url": "https://localhost:5001/",
      "description": "Local development environment"
    },
    {
      "url": "https://api.staging.sportident.com/",
      "description": "Staging environment"
    },
    {
      "url": "https://api.sportident.com/",
      "description": "Production environment"
    }
  ],
  "paths": {
    "/api/rest/v1/auth/userinfo": {
      "get": {
        "tags": [
          "Auth"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/auth/token": {
      "post": {
        "tags": [
          "Auth"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/get-cards-info": {
      "get": {
        "tags": [
          "CardReservation"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardInfoResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/get-card-configuration": {
      "get": {
        "tags": [
          "CardReservation"
        ],
        "parameters": [
          {
            "name": "cardNumber",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "culture",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardConfigurationResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/get-random-card-numbers": {
      "get": {
        "tags": [
          "CardReservation"
        ],
        "parameters": [
          {
            "name": "productId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RandomCardNumbersResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/is-card-free": {
      "get": {
        "tags": [
          "CardReservation"
        ],
        "parameters": [
          {
            "name": "cardNumber",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IsCardFreeResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/get-country-from-my-ip": {
      "get": {
        "tags": [
          "CardReservation"
        ],
        "parameters": [
          {
            "name": "ip",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CountryCodeResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/get-countries-list": {
      "get": {
        "tags": [
          "CardReservation"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CountryOption"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/order": {
      "post": {
        "tags": [
          "CardReservation"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/OrderRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/OrderRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/center/create-quotation-for-subscription": {
      "post": {
        "tags": [
          "Center"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CenterSubscription"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CenterSubscription"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CenterSubscription"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CenterSubscription"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/environment": {
      "get": {
        "tags": [
          "Dev"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/request-headers": {
      "get": {
        "tags": [
          "Dev"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/remote-ip": {
      "get": {
        "tags": [
          "Dev"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-country-by-ip": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "ip",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/encrypt": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/decrypt": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/transliterate": {
      "post": {
        "tags": [
          "Dev"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/dev/get-user-name": {
      "get": {
        "tags": [
          "Dev"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-user-claims": {
      "get": {
        "tags": [
          "Dev"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-random-password": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "length",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-orders": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "states",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "weclappRetailerEntityId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "searchText",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "size",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "oid desc"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-weclapp-orders": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "states",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerEntityId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "searchText",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "size",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 20
            }
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "oid desc"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-weclapp-api-token": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "weclappSystem",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/WeclappSystem"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/set-weclapp-api-token": {
      "post": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "weclappSystem",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/WeclappSystem"
            }
          },
          {
            "name": "token",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/test-weclapp-api": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "quotationEntityId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "weclappSystem",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/WeclappSystem"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/create-payrexx-paylink": {
      "post": {
        "tags": [
          "Dev"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-payrexx-paylink": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/delete-payrexx-paylink": {
      "post": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-payrexx-transaction": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-payrexx-transactions": {
      "get": {
        "tags": [
          "Dev"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-payrexx-payouts": {
      "get": {
        "tags": [
          "Dev"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-payrexx-payout-with-details": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-payrexx-lexware-csv-export": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "uuid",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/get-sales-invoices-csv-export": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "month",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/create-weclapp-order-paylink": {
      "post": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "weclappOrderOid",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/delete-weclapp-order-paylink": {
      "post": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "weclappOrderOid",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/qrcode": {
      "get": {
        "tags": [
          "Dev"
        ],
        "parameters": [
          {
            "name": "content",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "https://www.sportident.com/"
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/QrCodeFileFormat"
            }
          },
          {
            "name": "ecc",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/ECCLevel"
            }
          },
          {
            "name": "pixels",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/dev/uptime-monitor-status": {
      "get": {
        "tags": [
          "Dev"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/licensing/create-licenses": {
      "post": {
        "tags": [
          "Licensing"
        ],
        "parameters": [
          {
            "name": "product",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/LicensedProduct"
            }
          },
          {
            "name": "numberOfLicenses",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/licensing/secret-hashes": {
      "get": {
        "tags": [
          "Licensing"
        ],
        "parameters": [
          {
            "name": "product",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/LicensedProduct"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/licensing/request-license-key": {
      "post": {
        "tags": [
          "Licensing"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LicenseInformation"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LicenseInformation"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LicenseInformation"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LicenseInformation"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/licensing/assign-license": {
      "post": {
        "tags": [
          "Licensing"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LicenseInformation"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LicenseInformation"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LicenseInformation"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LicenseInformation"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LicenseInformation"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/licensing/licenses": {
      "get": {
        "tags": [
          "Licensing"
        ],
        "parameters": [
          {
            "name": "product",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/LicensedProduct"
            }
          },
          {
            "name": "email",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/maintenance/enable-maintenance-mode": {
      "post": {
        "tags": [
          "Maintenance"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/maintenance/disable-maintenance-mode": {
      "post": {
        "tags": [
          "Maintenance"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/maintenance/import-localized-countries": {
      "post": {
        "tags": [
          "Maintenance"
        ],
        "summary": "This maintenance endpoint can be used to import localized list of countries in the database.\r\nA set of countries in a specific language/culture in json format can be obtained from\r\nhttps://stefangabos.github.io/world_countries/\r\nPlease select the desired language, chose \"World\" option, and json format option to download\r\nsuitable data set.",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LocalizedCountriesResourceDTO"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LocalizedCountriesResourceDTO"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LocalizedCountriesResourceDTO"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LocalizedCountriesResourceDTO"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/maintenance/import-localized-product-options": {
      "post": {
        "tags": [
          "Maintenance"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LocalizedProductOptionsResourceDTO"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LocalizedProductOptionsResourceDTO"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LocalizedProductOptionsResourceDTO"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LocalizedProductOptionsResourceDTO"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/maintenance/import-retailers": {
      "post": {
        "tags": [
          "Maintenance"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/maintenance/import-articles": {
      "post": {
        "tags": [
          "Maintenance"
        ],
        "parameters": [
          {
            "name": "weclappSystem",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/WeclappSystem"
            }
          },
          {
            "name": "updateEvenIfWeclappVersionMatches",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/maintenance/shop-articles-as-csv": {
      "get": {
        "tags": [
          "Maintenance"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/maintenance/create-encryption-certificate": {
      "get": {
        "tags": [
          "Maintenance"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/maintenance/create-signing-certificate": {
      "get": {
        "tags": [
          "Maintenance"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/maintenance/clear-caches": {
      "post": {
        "tags": [
          "Maintenance"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/payrexx/status": {
      "post": {
        "tags": [
          "Payrexx"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookMessage"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookMessage"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookMessage"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookMessage"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/products/si-cards/{cardNumber}": {
      "get": {
        "tags": [
          "Products"
        ],
        "parameters": [
          {
            "name": "cardNumber",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/shop/retailers/public-list": {
      "get": {
        "tags": [
          "Shop"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RetailerInfo"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/shop/retailers/internal-list": {
      "get": {
        "tags": [
          "Shop"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RetailerInfo"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/grpc-json/v1/shop/articles": {
      "get": {
        "tags": [
          "ShopRpc"
        ],
        "summary": "Get a list of all Weclapp articles that are marked as shop articles. Weclapp custom field `NEPTUNE_SHOP_ARTICLE` determines if an article is included in the list. Weclapp custom field `NEPTUNE_AVAILABILITY` determines which group of users can order the article.",
        "parameters": [
          {
            "name": "includeUnavailableArticles",
            "in": "query",
            "description": "If this flag is set, the returned article list will include all shop articles regardless of availability. You will need to check availability by looking at ArticleDTO.isAvailable in this case.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeSubitemArticles",
            "in": "query",
            "description": "If this flag is set, the returned article list will include articles that are or can be selected as sub items of main articles.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "filterByArticleNumbers",
            "in": "query",
            "description": "Comma separated list of article numbers of articles that should be included in the reply. Leave empty if no filtering should be applied. Note that articles that can be used as a sub item of a listed article will be included in the reply if includeSubitemArticles is set.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Sportident-Client-Id",
            "in": "header",
            "description": "Client identifier to determine the source of a request.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ArticleDTO"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Error: Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          }
        }
      }
    },
    "/api/grpc-json/v1/shop/articles/{articleNumber}": {
      "get": {
        "tags": [
          "ShopRpc"
        ],
        "summary": "Get a Weclapp article by its article number.",
        "parameters": [
          {
            "name": "articleNumber",
            "in": "path",
            "description": "Article number.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Sportident-Client-Id",
            "in": "header",
            "description": "Client identifier to determine the source of a request.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleDTO"
                }
              }
            }
          },
          "400": {
            "description": "Error: Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          },
          "404": {
            "description": "Error: Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          }
        }
      }
    },
    "/api/grpc-json/v1/shop/countries": {
      "get": {
        "tags": [
          "ShopRpc"
        ],
        "summary": "Get a list of countries with their country codes.",
        "parameters": [
          {
            "name": "X-Sportident-Client-Id",
            "in": "header",
            "description": "Client identifier to determine the source of a request.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "description": "Language and locale preferred by the client.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetCountriesReply"
                }
              }
            }
          },
          "400": {
            "description": "Error: Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          }
        }
      }
    },
    "/api/grpc-json/v1/shop/siids/{cardType}/random-free-siids": {
      "get": {
        "tags": [
          "ShopRpc"
        ],
        "summary": "Get random free SPORTident IDs (card numbers) for a specific card type.",
        "parameters": [
          {
            "name": "cardType",
            "in": "path",
            "description": "Card type ('sicard9', 'sicard10' or 'siac1').",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "numberOfSportidentIds",
            "in": "query",
            "description": "Requested number of SPORTident IDs. Defaults to 10 if not set. Maximum value is 20.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "X-Sportident-Client-Id",
            "in": "header",
            "description": "Client identifier to determine the source of a request.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetRandomFreeSportidentIdsReply"
                },
                "examples": {
                  "Example": {
                    "summary": "SIIDs of type SIAC",
                    "value": "{\"cardType\":\"siac1\",\"sportidentIds\":[8018081,8119975,8023038,8023581,8224341,8144268,8034932,8256540,8100003,8303211]}"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Error: Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          }
        }
      }
    },
    "/api/grpc-json/v1/shop/siids/{cardType}/{sportidentId}": {
      "get": {
        "tags": [
          "ShopRpc"
        ],
        "summary": "Check if a SPORTident ID (card number) is valid and free (i.e. available for ordering).",
        "parameters": [
          {
            "name": "cardType",
            "in": "path",
            "description": "Card type ('sicard9', 'sicard10' or 'siac1').",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sportidentId",
            "in": "path",
            "description": "Required. Sportident ID.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "X-Sportident-Client-Id",
            "in": "header",
            "description": "Client identifier to determine the source of a request.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckSportidentIdReply"
                },
                "examples": {
                  "Example 1": {
                    "summary": "Valid SIID that is in use",
                    "value": "{\"cardType\":\"siac1\",\"sportidentId\":8000001,\"isValid\":true,\"canBeOrdered\":false}"
                  },
                  "Example 2": {
                    "summary": "Valid SIID that is available",
                    "value": "{\"cardType\":\"siac1\",\"sportidentId\":8450645,\"isValid\":true,\"canBeOrdered\":true}"
                  },
                  "Example 3": {
                    "summary": "Invalid SIID",
                    "value": "{\"cardType\":\"siac1\",\"sportidentId\":2411234,\"isValid\":false,\"canBeOrdered\":false}"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Error: Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          }
        }
      }
    },
    "/api/grpc-json/v1/shop/discount-codes/create": {
      "post": {
        "tags": [
          "ShopRpc"
        ],
        "summary": "Create a one or more discount codes for a specific campaign.",
        "parameters": [
          {
            "name": "X-Sportident-Client-Id",
            "in": "header",
            "description": "Client identifier to determine the source of a request.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDiscountCodesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateDiscountCodesReply"
                }
              }
            }
          },
          "400": {
            "description": "Error: Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          }
        }
      }
    },
    "/api/grpc-json/v1/shop/discount-codes/validate": {
      "post": {
        "tags": [
          "ShopRpc"
        ],
        "summary": "Check if one ore more discount codes are valid for the current shopping cart and return the validation result including net amount to deduct for each of the provided codes.",
        "parameters": [
          {
            "name": "X-Sportident-Client-Id",
            "in": "header",
            "description": "Client identifier to determine the source of a request.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateDiscountCodesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidateDiscountCodesReply"
                }
              }
            }
          },
          "400": {
            "description": "Error: Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          }
        }
      }
    },
    "/api/grpc-json/v1/shop/orders": {
      "post": {
        "tags": [
          "ShopRpc"
        ],
        "summary": "Create a new order. On success, a confirmation email is sent to the provided contact email address.",
        "parameters": [
          {
            "name": "X-Sportident-Client-Id",
            "in": "header",
            "description": "Client identifier to determine the source of a request.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Required. Order with contact information, shipping/billing address and\r\na list of order items.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShopOrderDTO"
              },
              "examples": {
                "Example": {
                  "summary": "Example order",
                  "value": "{\"contact\":{\"firstName\":\"Thomas\",\"lastName\":\"Scherer\",\"email\":\"thomas.scherer@sportident.com\",\"emailOptIn\":false,\"culture\":\"de\"},\"shippingAddress\":{\"firstName\":\"Thomas\",\"lastName\":\"Scherer\",\"organisation\":\"SPORTident GmbH\",\"address1\":\"Markt 14\",\"address2\":\"\",\"zip\":\"99310\",\"city\":\"Arnstadt\",\"state\":\"\",\"countryCode\":\"DE\",\"phoneNumber\":\"+49362878300\"},\"billingAddress\":null,\"billingAddressIsSameAsShippingAddress\":true,\"orderItems\":[{\"articleNumber\":\"10503\",\"articleName\":\"SIAC - SPORTident ActiveCard with elastic band\",\"quantity\":1,\"configuration\":{},\"subitems\":[{\"articleNumber\":\"10503.blue\",\"articleName\":\"Blue SIAC - SPORTident ActiveCard\",\"quantity\":1,\"configuration\":{\"feedbackSignal\":\"default\",\"personalDataFirstName\":\"Thomas\",\"personalDataLastName\":\"Scherer\",\"sportidentId\":\"8000001\"},\"articleBomItemOid\":1},{\"articleNumber\":\"33203\",\"articleName\":\"Blue Finger Band\",\"quantity\":1,\"configuration\":{},\"articleBomItemOid\":2}],\"articleBomItemOid\":0}],\"discountCodes\":[\"XMAS25-PROMO\"],\"retailerCustomerOrderReference\":\"Ref-1234\",\"notes\":\"This is a test.\"}"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShopOrderDTO"
                }
              }
            }
          },
          "400": {
            "description": "Error: Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/users/{id}": {
      "get": {
        "tags": [
          "User"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/users/get-by-name": {
      "get": {
        "tags": [
          "User"
        ],
        "parameters": [
          {
            "name": "userName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/users": {
      "get": {
        "tags": [
          "User"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/User"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "User"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/users/update-profile": {
      "post": {
        "tags": [
          "User"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/users/update-roles": {
      "post": {
        "tags": [
          "User"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/utils/bulk-update-card-order-items": {
      "post": {
        "tags": [
          "Utils"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateCardOrderItemsRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateCardOrderItemsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateCardOrderItemsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateCardOrderItemsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/rest/v1/version": {
      "get": {
        "tags": [
          "Version"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NeptuneVersion"
                }
              }
            }
          }
        }
      }
    },
    "/api/rest/v1/weclapp/webhook": {
      "post": {
        "tags": [
          "Weclapp"
        ],
        "parameters": [
          {
            "name": "weclappSystem",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/WeclappSystem"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/WeclappWebhookRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WeclappWebhookRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WeclappWebhookRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WeclappWebhookRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AdditionalInformation": {
        "type": "object",
        "properties": {
          "sport": {
            "type": "string",
            "nullable": true
          },
          "platform": {
            "type": "string",
            "nullable": true
          },
          "projectDescription": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Address": {
        "required": [
          "address1",
          "city",
          "country",
          "firstName",
          "lastName"
        ],
        "type": "object",
        "properties": {
          "fullName": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "firstName": {
            "minLength": 1,
            "type": "string"
          },
          "lastName": {
            "minLength": 1,
            "type": "string"
          },
          "club": {
            "type": "string",
            "nullable": true
          },
          "address1": {
            "minLength": 1,
            "type": "string"
          },
          "address2": {
            "type": "string",
            "nullable": true
          },
          "zip": {
            "type": "string",
            "nullable": true
          },
          "city": {
            "minLength": 1,
            "type": "string"
          },
          "state": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "minLength": 1,
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "AddressDTO": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "description": "Required. First name. Optional if organisation is set."
          },
          "lastName": {
            "type": "string",
            "description": "Optional. Last name."
          },
          "organisation": {
            "type": "string",
            "description": "Optional. Organisation. Required if first name is not set."
          },
          "address1": {
            "type": "string",
            "description": "Required. First address line."
          },
          "address2": {
            "type": "string",
            "description": "Optional. Second address line."
          },
          "zip": {
            "type": "string",
            "description": "Optional. Zip code."
          },
          "city": {
            "type": "string",
            "description": "Required. City."
          },
          "state": {
            "type": "string",
            "description": "Optional. State."
          },
          "countryCode": {
            "type": "string",
            "description": "Required. Two-letter country code (ISO 3166-1 alpha-2). Mapped from/to CountryOid by the backend."
          },
          "phoneNumber": {
            "type": "string",
            "description": "Optional. E.164 format. Required for the shipping addresses when DPD, Fedex, or UPS are used for handling the shipment."
          }
        },
        "additionalProperties": false,
        "description": "Data transfer object representing an address."
      },
      "Any": {
        "required": [
          "@type"
        ],
        "type": "object",
        "properties": {
          "@type": {
            "type": "string"
          }
        },
        "additionalProperties": { }
      },
      "ArticleBomItemDTO": {
        "type": "object",
        "properties": {
          "orderItem": {
            "$ref": "#/components/schemas/ShopOrderItemDTO"
          },
          "validArticleNumbers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of valid article numbers for this sub item."
          },
          "isLocked": {
            "type": "boolean",
            "description": "Sub items that are displayed in the shop but cannot be changed are marked as locked. This may, for example, apply to sub items of a set that are fixed but should be listed by the frontend."
          },
          "isConfigurable": {
            "type": "boolean",
            "description": "Set to true if the customer is allowed to change configuration options for this sub item. Example 1: Personal information may be customized for SIACs that are part of a set. Example 2: Operating mode may not be changed for some stations that are part of a set."
          },
          "excludedCustomAttributes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Some custom attributes are not applicable if an article is part of a set. These attributes must not be displayed in the webshop. Example: Set articles 10503 and 10504 both have SIACs (e.g. 10503.blue) as sub items, but sportidentId may only be configured if the SIAC is part of set 10504 (\"SIAC with personal number\")."
          }
        },
        "additionalProperties": false
      },
      "ArticleDTO": {
        "type": "object",
        "properties": {
          "articleNumber": {
            "type": "string",
            "description": "Required. Article number."
          },
          "name": {
            "type": "string",
            "description": "Required. Article name."
          },
          "description": {
            "type": "string",
            "description": "Optional. Article description."
          },
          "productType": {
            "type": "string",
            "description": "Optional. Product type. Currently only set for a couple of products that require special handling (e.g. 'Card', 'CardService' and 'Strap')."
          },
          "properties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Article properties as key-value pairs. Empty for most articles, except for cards and straps. Example for productType 'card': { cardType: \"siac1\",   tipProductOptionName: \"White\",   tipProductOptionFileName: \"tip_siac_logo_white.png\",   bodyProductOptionName: \"Red\",   bodyProductOptionFileName: \"body_siac_red.png\" }"
          },
          "bomItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ArticleBomItemDTO"
            },
            "description": "Sub items for articles of type 'sales_bill_of_materials' (\"Verkaufsstückliste\"). This includes only sub items that are displayed in the frontend."
          },
          "customAttributes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomAttributeDTO"
            },
            "description": "Custom attributes for article configuration."
          },
          "selectableAsSubitemOnly": {
            "type": "boolean",
            "description": "Some articles can only be selected as a sub item that is part of a sales bill of materials. These articles must not be listed as main articles in the frontend."
          },
          "isAvailable": {
            "type": "boolean",
            "description": "The availability of articles is determined by the Weclapp custom field `NEPTUNE_AVAILABILITY`. Articles may or may not be available depending on the user's role (i.e. some articles are made only available for SPORTident employees or partners)."
          },
          "minimumQuantity": {
            "type": "integer",
            "description": "Minimum quantity. Value is 1 for all articles, except for articles that can only be ordered in bulk.",
            "format": "int32"
          },
          "hasFixedQuantityOne": {
            "type": "boolean",
            "description": "Some articles have a fixed quantity of one. Specifically, article 21410 \"SIAC Battery Exchange\" can only be ordered with quantity 1, because a card number needs to be specified for each exchanged SIAC. Same goes for the articles 10301 and 10504 (SI-Card9 and SIAC with personal number)."
          }
        },
        "additionalProperties": false
      },
      "BulkUpdateCardOrderItemsRequest": {
        "type": "object",
        "properties": {
          "orderOid": {
            "type": "integer",
            "format": "int32"
          },
          "oldArticleNumber": {
            "type": "string",
            "nullable": true
          },
          "newArticleNumber": {
            "type": "string",
            "nullable": true
          },
          "newFeedbackSignal": {
            "type": "string",
            "nullable": true
          },
          "dryRun": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "CardConfigurationResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "cardNumber": {
            "type": "integer",
            "format": "int32"
          },
          "bodyOption": {
            "$ref": "#/components/schemas/ProductOptionBase"
          },
          "batteryDate": {
            "type": "string",
            "format": "date-time"
          },
          "canBeRepaired": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "CardInfoDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "string",
            "nullable": true
          },
          "ranges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Range"
            },
            "nullable": true
          },
          "tips": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductOptionBase"
            },
            "nullable": true
          },
          "bodies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductOptionBase"
            },
            "nullable": true
          },
          "straps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductOptionBase"
            },
            "nullable": true
          },
          "customNumber": {
            "type": "boolean"
          },
          "enabled": {
            "type": "boolean"
          },
          "detail": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CardInfoResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "cardsInfo": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CardInfoDto"
            },
            "nullable": true
          },
          "serviceInfo": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CardInfoDto"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CardReservationOrder": {
        "required": [
          "products"
        ],
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Product"
            }
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "billingAddress": {
            "$ref": "#/components/schemas/Address"
          },
          "shippingAddress": {
            "$ref": "#/components/schemas/Address"
          },
          "retailerOid": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CenterSubscription": {
        "type": "object",
        "properties": {
          "subscriptionType": {
            "$ref": "#/components/schemas/CenterSubscriptionType"
          },
          "subscriptionStartDate": {
            "type": "string",
            "format": "date-time"
          },
          "subscriptionEndDate": {
            "type": "string",
            "format": "date-time"
          },
          "firstName": {
            "type": "string",
            "nullable": true
          },
          "lastName": {
            "type": "string",
            "nullable": true
          },
          "organisation": {
            "type": "string",
            "nullable": true
          },
          "address1": {
            "type": "string",
            "nullable": true
          },
          "address2": {
            "type": "string",
            "nullable": true
          },
          "zip": {
            "type": "string",
            "nullable": true
          },
          "city": {
            "type": "string",
            "nullable": true
          },
          "state": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CenterSubscriptionType": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32"
      },
      "CheckSportidentIdReply": {
        "type": "object",
        "properties": {
          "cardType": {
            "type": "string",
            "description": "Selected card type ('sicard9', 'sicard10' or 'siac1')."
          },
          "sportidentId": {
            "type": "integer",
            "description": "Selected SportidentId.",
            "format": "int32"
          },
          "isValid": {
            "type": "boolean",
            "description": "True if the SPORTident ID is within the number range allowed for orders for the selected card type."
          },
          "canBeOrdered": {
            "type": "boolean",
            "description": "True if the SPORTident ID is valid and free (i.e. available for ordering)."
          }
        },
        "additionalProperties": false
      },
      "ContactDTO": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "description": "Required. First name of the contact."
          },
          "lastName": {
            "type": "string",
            "description": "Optional. Last name of the contact."
          },
          "email": {
            "type": "string",
            "description": "Required. Email address of the contact."
          },
          "emailOptIn": {
            "type": "boolean",
            "description": "Set to true if the contact opted in to receive news and offers from SPORTident via email."
          },
          "culture": {
            "type": "string",
            "description": "Optional. Culture (language code) selected by the user or detected by the browser when the order was placed (e.g. \"de\")."
          }
        },
        "additionalProperties": false,
        "description": "Data transfer object representing a contact."
      },
      "CountryCodeResponse": {
        "type": "object",
        "properties": {
          "countryCode": {
            "type": "string",
            "nullable": true
          },
          "countryDetected": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "CountryDTO": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "ISO alpha two letter country code."
          },
          "name": {
            "type": "string",
            "description": "Country name."
          }
        },
        "additionalProperties": false
      },
      "CountryDto": {
        "required": [
          "alpha2",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "minLength": 1,
            "type": "string"
          },
          "alpha2": {
            "minLength": 1,
            "type": "string"
          },
          "alpha3": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CountryOption": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateDiscountCodesReply": {
        "type": "object",
        "properties": {
          "discountCodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DiscountCodeDTO"
            },
            "description": "List of discount created codes."
          }
        },
        "additionalProperties": false
      },
      "CreateDiscountCodesRequest": {
        "type": "object",
        "properties": {
          "campaignId": {
            "type": "string",
            "description": "Required. ID (short name) of the campaign. The campaign ID determines what configuration is used for the discount code (i.e. what type of discount it is, what article numbers are eligible, if the code is single-use or multi-use, for how long the code is valid, etc.)."
          },
          "numberOfDiscountCodes": {
            "type": "integer",
            "description": "Required. Number of discount codes to create.",
            "format": "int32"
          },
          "customerReference": {
            "type": "string",
            "description": "Optional. Customer reference (e.g. a customer ID from an external system)."
          },
          "customerFirstName": {
            "type": "string",
            "description": "Optional. Customer first name."
          },
          "customerLastName": {
            "type": "string",
            "description": "Optional. Customer last name."
          },
          "customerEmail": {
            "type": "string",
            "description": "Optional. Customer email."
          }
        },
        "additionalProperties": false
      },
      "CreateShopOrderReply": {
        "type": "object",
        "properties": {
          "order": {
            "$ref": "#/components/schemas/ShopOrderDTO"
          }
        },
        "additionalProperties": false
      },
      "CustomAttributeDTO": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "Attribute key (e.g. \"sportidentId\" or \"consecutiveCardNumbers\")."
          },
          "type": {
            "$ref": "#/components/schemas/Type"
          },
          "label": {
            "type": "string",
            "description": "Attribute label to be displayed in the frontend."
          },
          "options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomAttributeOptionDTO"
            },
            "description": "Options for attributes of type 'selectOne'."
          },
          "defaultValue": {
            "type": "string",
            "description": "Default value, if applicable."
          },
          "isRequired": {
            "type": "boolean",
            "description": "Set to true if a value must be provided for this attribute."
          },
          "applicableToQuantityOne": {
            "type": "boolean",
            "description": "Set to true for attributes that are applicable for order items with quantity 1."
          },
          "applicableToQuantityGreaterThanOne": {
            "type": "boolean",
            "description": "Set to true for attributes that are applicable for order items with quantity greater than 1."
          }
        },
        "additionalProperties": false
      },
      "CustomAttributeOptionDTO": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "Value to transmit to the backend."
          },
          "label": {
            "type": "string",
            "description": "Label to display to the user in the frontend."
          }
        },
        "additionalProperties": false
      },
      "Customer": {
        "required": [
          "firstName",
          "lastName"
        ],
        "type": "object",
        "properties": {
          "fullName": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "firstName": {
            "minLength": 1,
            "type": "string"
          },
          "lastName": {
            "minLength": 1,
            "type": "string"
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "subscribe": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "DiscountCodeDTO": {
        "type": "object",
        "properties": {
          "discountCode": {
            "type": "string",
            "description": "The discount code."
          },
          "validFrom": {
            "type": "string",
            "description": "Valid from date in ISO 8601 format (e.g. \"2025-06-01T00:00:00Z\")."
          },
          "validUntil": {
            "type": "string",
            "description": "Valid until date in ISO 8601 format (e.g. \"2025-10-01T00:00:00Z\")."
          },
          "description": {
            "type": "string",
            "description": "Description of the discount code."
          }
        },
        "additionalProperties": false
      },
      "DiscountCodeValidationResultDTO": {
        "type": "object",
        "properties": {
          "discountCode": {
            "type": "string",
            "description": "The discount code provided by the customer (trimmed and normalised if necessary)."
          },
          "isValid": {
            "type": "boolean",
            "description": "True if the code is valid."
          },
          "discountAmount": {
            "type": "integer",
            "description": "Net amount in cents to deduct from the order. 0 if the code is invalid.",
            "format": "int32"
          },
          "description": {
            "type": "string",
            "description": "Optional description that explains the meaning of the discount code (e.g. \"15% discount on a single SIAC.\"). To be displayed in the frontend for valid codes."
          },
          "errorMessage": {
            "type": "string",
            "description": "Error message if the code is invalid (e.g. \"Code not applicable to current order items.\"). Empty if the code is valid."
          }
        },
        "additionalProperties": false
      },
      "ECCLevel": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32"
      },
      "GetCountriesReply": {
        "type": "object",
        "properties": {
          "countries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CountryDTO"
            }
          }
        },
        "additionalProperties": false
      },
      "GetRandomFreeSportidentIdsReply": {
        "type": "object",
        "properties": {
          "cardType": {
            "type": "string",
            "description": "Card type ('sicard9', 'sicard10' or 'siac1')."
          },
          "sportidentIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "List of SPORTident IDs that are available for ordering."
          }
        },
        "additionalProperties": false
      },
      "GetShopArticleReply": {
        "type": "object",
        "properties": {
          "article": {
            "$ref": "#/components/schemas/ArticleDTO"
          }
        },
        "additionalProperties": false
      },
      "GetShopArticlesReply": {
        "type": "object",
        "properties": {
          "articles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ArticleDTO"
            },
            "description": "List of shop articles."
          }
        },
        "additionalProperties": false
      },
      "IsCardFreeResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "cardNumber": {
            "type": "integer",
            "format": "int32"
          },
          "isFree": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "LicenseHolderInformation": {
        "required": [
          "country",
          "firstName"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "minLength": 1,
            "type": "string"
          },
          "lastName": {
            "type": "string",
            "nullable": true
          },
          "organisation": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "minLength": 1,
            "type": "string"
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "additionalInformation": {
            "$ref": "#/components/schemas/AdditionalInformation"
          },
          "fullName": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "LicenseInformation": {
        "required": [
          "licenseHolder",
          "licenseType",
          "product"
        ],
        "type": "object",
        "properties": {
          "product": {
            "$ref": "#/components/schemas/LicensedProduct"
          },
          "licenseType": {
            "$ref": "#/components/schemas/LicenseType"
          },
          "licenseName": {
            "type": "string",
            "nullable": true
          },
          "licenseKey": {
            "type": "string",
            "nullable": true
          },
          "licenseHolder": {
            "$ref": "#/components/schemas/LicenseHolderInformation"
          }
        },
        "additionalProperties": false
      },
      "LicenseType": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "LicensedProduct": {
        "enum": [
          0
        ],
        "type": "integer",
        "format": "int32"
      },
      "LocalizedCountriesResourceDTO": {
        "required": [
          "cultureCode"
        ],
        "type": "object",
        "properties": {
          "cultureCode": {
            "minLength": 1,
            "type": "string"
          },
          "localizedNames": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CountryDto"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LocalizedProductOptionsResourceDTO": {
        "required": [
          "cultureCode"
        ],
        "type": "object",
        "properties": {
          "cultureCode": {
            "minLength": 1,
            "type": "string"
          },
          "localizedOptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductOptionI18N"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "NeptuneVersion": {
        "type": "object",
        "properties": {
          "apiVersion": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderRequest": {
        "required": [
          "order"
        ],
        "type": "object",
        "properties": {
          "order": {
            "$ref": "#/components/schemas/CardReservationOrder"
          }
        },
        "additionalProperties": false,
        "description": "This class acts as root class for received order. To match structure of order json."
      },
      "OrderResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "orderId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Product": {
        "required": [
          "bodyId",
          "strapId",
          "tipId"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "nullable": true
          },
          "lastName": {
            "type": "string",
            "nullable": true
          },
          "cardNumber": {
            "type": "integer",
            "format": "int32"
          },
          "feedbackSignal": {
            "type": "string",
            "nullable": true
          },
          "tipId": {
            "minLength": 1,
            "pattern": "^productoption[0-9]{1,4}$",
            "type": "string"
          },
          "bodyId": {
            "minLength": 1,
            "pattern": "^productoption[0-9]{1,4}$",
            "type": "string"
          },
          "strapId": {
            "minLength": 1,
            "pattern": "^productoption[0-9]{1,4}$",
            "type": "string"
          },
          "productId": {
            "type": "string",
            "nullable": true
          },
          "quantity": {
            "maximum": 1000,
            "minimum": 1,
            "type": "integer",
            "format": "int32"
          },
          "oldOid": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "consecutiveNumbers": {
            "type": "boolean"
          },
          "weclappSiacRepairTicketEntityId": {
            "type": "string",
            "nullable": true
          },
          "isSiacService": {
            "type": "boolean"
          },
          "isPCard": {
            "type": "boolean",
            "readOnly": true
          },
          "isBulkItem": {
            "type": "boolean",
            "readOnly": true
          },
          "bodyOid": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "readOnly": true
          },
          "tipOid": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "readOnly": true
          },
          "strapOid": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "ProductOptionBase": {
        "type": "object",
        "properties": {
          "oid": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "key": {
            "type": "string",
            "nullable": true
          },
          "stocked": {
            "type": "boolean"
          },
          "id": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ProductOptionI18N": {
        "required": [
          "optionName",
          "optionNameI18N"
        ],
        "type": "object",
        "properties": {
          "oid": {
            "type": "integer",
            "format": "int32"
          },
          "optionName": {
            "minLength": 1,
            "type": "string"
          },
          "optionNameI18N": {
            "minLength": 1,
            "type": "string"
          },
          "culture": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "QrCodeFileFormat": {
        "enum": [
          0
        ],
        "type": "integer",
        "format": "int32"
      },
      "RandomCardNumbersResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "numbers": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Range": {
        "type": "object",
        "properties": {
          "min": {
            "type": "integer",
            "format": "int32"
          },
          "max": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "RetailerInfo": {
        "type": "object",
        "properties": {
          "oid": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "urlSlug": {
            "type": "string",
            "nullable": true
          },
          "externalShopUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ShopOrderDTO": {
        "type": "object",
        "properties": {
          "oid": {
            "type": "integer",
            "description": "Immutable. Object identifier assigned by the backend. Leave empty (0) when creating a new order.",
            "format": "int32"
          },
          "orderNumber": {
            "type": "string",
            "description": "Immutable. Generated by the backend. Leave empty (\"\") when creating a new  order."
          },
          "contact": {
            "$ref": "#/components/schemas/ContactDTO"
          },
          "shippingAddress": {
            "$ref": "#/components/schemas/AddressDTO"
          },
          "billingAddress": {
            "$ref": "#/components/schemas/AddressDTO"
          },
          "billingAddressIsSameAsShippingAddress": {
            "type": "boolean",
            "description": "Set to true if billing address is identical to the shipping address. The content of billingAddress is ignored by the backend if this flag is set to true."
          },
          "orderItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShopOrderItemDTO"
            },
            "description": "Required. List of order items. At least one order item must be provided."
          },
          "discountCodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional. List of discount codes. Note that the discount codes should be validated before submitting a create order request, as the order will be rejected if one or multiple of the provided discount codes are invalid."
          },
          "retailerCustomerOrderReference": {
            "type": "string",
            "description": "Optional. Customer order reference. Passed along to the commission field in the Weclapp quotation, sales order and invoice. Helps retailers to associate their internal customer orders with the Weclapp order."
          },
          "notes": {
            "type": "string",
            "description": "Optional. Notes provided by the customer."
          }
        },
        "additionalProperties": false
      },
      "ShopOrderItemDTO": {
        "type": "object",
        "properties": {
          "oid": {
            "type": "integer",
            "description": "Immutable. Object identifier assigned by the backend. Leave empty (0) when creating a new order item.",
            "format": "int32"
          },
          "articleNumber": {
            "type": "string",
            "description": "Required. Weclapp article number. Mapped from/to ArticleOid by the backend."
          },
          "articleName": {
            "type": "string",
            "description": "Set by the backend. Weclapp article name. Used internally to display the article name, e.g. in the confirmation email."
          },
          "quantity": {
            "type": "integer",
            "description": "Required. Quantity greater than or equal to 1. Note that for subitems you will need to multiply the default quantity included in the set by the quantity of the parent item. This is defined this way to be consistent with how Weclapp handles quantities for subitems. Example: When ordering 3 SIACs with finger bands (set article 10503), the quantity of both subitems (SIAC and fingerband) needs to be set to 3.",
            "format": "int32"
          },
          "configuration": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Configuration for custom attributes as key-value pairs."
          },
          "subitems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShopOrderItemDTO"
            },
            "description": "List of sub items. Relevant if the article is of type \"sales bill of materials\" (\"Verkaufsstückliste\"). May include only sub items that are configurable."
          },
          "articleBomItemOid": {
            "type": "integer",
            "description": "Optional. Reference to ArticleBomItem. Must be set for sub items. Must not be set for parent items. Note that these oids differ between the staging environment and the production environment.",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "Status": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "Type": {
        "enum": [
          "text",
          "longText",
          "boolean",
          "integer",
          "selectOne"
        ],
        "type": "string",
        "description": "Custom attribute type."
      },
      "User": {
        "required": [
          "userName"
        ],
        "type": "object",
        "properties": {
          "userName": {
            "minLength": 1,
            "type": "string"
          },
          "password": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "retailerOid": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ValidateDiscountCodesReply": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DiscountCodeValidationResultDTO"
            },
            "description": "List of discount code validation results, including the net amount to deduct for each valid discount code."
          }
        },
        "additionalProperties": false
      },
      "ValidateDiscountCodesRequest": {
        "type": "object",
        "properties": {
          "orderItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShopOrderItemDTO"
            },
            "description": "Required. List of order items. At least one order item must be provided."
          },
          "discountCodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Required. List of discount codes to validate."
          }
        },
        "additionalProperties": false
      },
      "WebhookContact": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "zip": {
            "type": "string",
            "nullable": true
          },
          "uuid": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "nullable": true
          },
          "place": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "street": {
            "type": "string",
            "nullable": true
          },
          "company": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true
          },
          "lastname": {
            "type": "string",
            "nullable": true
          },
          "firstname": {
            "type": "string",
            "nullable": true
          },
          "countryISO": {
            "type": "string",
            "nullable": true
          },
          "deliveryZip": {
            "type": "string",
            "nullable": true
          },
          "dateOfBirth": {
            "type": "string",
            "nullable": true
          },
          "deliveryPlace": {
            "type": "string",
            "nullable": true
          },
          "deliveryTitle": {
            "type": "string",
            "nullable": true
          },
          "deliveryStreet": {
            "type": "string",
            "nullable": true
          },
          "deliveryCompany": {
            "type": "string",
            "nullable": true
          },
          "deliveryCountry": {
            "type": "string",
            "nullable": true
          },
          "deliveryLastname": {
            "type": "string",
            "nullable": true
          },
          "deliveryFirstname": {
            "type": "string",
            "nullable": true
          },
          "deliveryCountryISO": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WebhookCustomField": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "value": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WebhookDiscount": {
        "type": "object",
        "properties": {
          "code": {
            "nullable": true
          },
          "amount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "percentage": {
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WebhookInvoice": {
        "type": "object",
        "properties": {
          "test": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "number": {
            "type": "string",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "discount": {
            "$ref": "#/components/schemas/WebhookDiscount"
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookProduct"
            },
            "nullable": true
          },
          "paymentLink": {
            "$ref": "#/components/schemas/WebhookPaymentLink"
          },
          "referenceId": {
            "type": "string",
            "nullable": true
          },
          "customFields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookCustomField"
            },
            "nullable": true
          },
          "originalAmount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "refundedAmount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "shippingAmount": {
            "nullable": true
          },
          "paymentRequestId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WebhookMessage": {
        "type": "object",
        "properties": {
          "transaction": {
            "$ref": "#/components/schemas/WebhookTransaction"
          }
        },
        "additionalProperties": false
      },
      "WebhookMetadata": {
        "type": "object",
        "additionalProperties": false
      },
      "WebhookPayment": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string",
            "nullable": true
          },
          "wallet": {
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WebhookPaymentLink": {
        "type": "object",
        "properties": {
          "hash": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "referenceId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WebhookProduct": {
        "type": "object",
        "properties": {
          "sku": {
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "price": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "vatRate": {
            "nullable": true
          },
          "quantity": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WebhookTransaction": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "psp": {
            "type": "string",
            "nullable": true
          },
          "lang": {
            "type": "string",
            "nullable": true
          },
          "mode": {
            "type": "string",
            "nullable": true
          },
          "time": {
            "type": "string",
            "nullable": true
          },
          "uuid": {
            "type": "string",
            "nullable": true
          },
          "pspId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "amount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "contact": {
            "$ref": "#/components/schemas/WebhookContact"
          },
          "invoice": {
            "$ref": "#/components/schemas/WebhookInvoice"
          },
          "payment": {
            "$ref": "#/components/schemas/WebhookPayment"
          },
          "metadata": {
            "$ref": "#/components/schemas/WebhookMetadata"
          },
          "pageUuid": {
            "nullable": true
          },
          "payrexxFee": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "refundable": {
            "type": "boolean",
            "nullable": true
          },
          "referenceId": {
            "type": "string",
            "nullable": true
          },
          "subscription": {
            "nullable": true
          },
          "partiallyRefundable": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WeclappSystem": {
        "enum": [
          0,
          1
        ],
        "type": "integer",
        "format": "int32"
      },
      "WeclappWebhookRequest": {
        "type": "object",
        "properties": {
          "entityId": {
            "type": "string",
            "nullable": true
          },
          "entityName": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    }
  },
  "tags": [
    {
      "name": "ShopRpc",
      "description": "Service for the B2B webshop and for the new public webshop.\r\nOAuth authentication is optional. Some articles are only available for\r\nauthenticated users with role `PARTNER` or role `SPORTIDENT`."
    }
  ]
}