{
  "openapi": "3.1.1",
  "info": {
    "title": "OMSA",
    "description": "Open Mobility Sales API for searching, selecting, and purchasing mobility products and related resources.",
    "contact": {
      "name": "Team Selgerintegrasjoner",
      "url": "https://github.com/entur/omsa"
    },
    "version": "2026.06.2",
    "x-stability-level": "draft"
  },
  "servers": [
    {
      "url": "https://api.entur.io/omsa/v1",
      "description": "Production environment"
    },
    {
      "url": "https://api.dev.entur.io/omsa/v1",
      "description": "Development environment"
    },
    {
      "url": "https://api.staging.entur.io/omsa/v1",
      "description": "Staging environment"
    }
  ],
  "tags": [
    {
      "name": "discovery",
      "description": "Discovery endpoints for landing page, conformance, and API metadata."
    },
    {
      "name": "collections",
      "description": "Collection endpoints for retrieving OMSA resources and query results."
    },
    {
      "name": "processes",
      "description": "Process endpoints for creating and mutating packages, offers, and refunds."
    },
    {
      "name": "authentication",
      "description": "Authentication endpoints for issuing OAuth tokens."
    }
  ],
  "paths": {
    "/": {
      "get": {
        "tags": [
          "discovery"
        ],
        "summary": "Get API landing page",
        "description": "Gives a (technical & human readable) output describing how this API must be used. If  the parameter f=html is supplied, a human readable page must be responded.",
        "externalDocs": {
          "url": "https://app.swaggerhub.com/apis/OGC/ogcapi-features-1-example-1/1.0.1"
        },
        "operationId": "landingPage",
        "parameters": [
          {
            "name": "f",
            "in": "query",
            "description": "The optional f parameter indicates the output format that the server shall provide as part of the response document.  The default format is JSON.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "type": "string",
              "default": "json",
              "enum": [
                "json",
                "html"
              ]
            }
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/landingPageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/api": {
      "get": {
        "tags": [
          "discovery"
        ],
        "summary": "Get OpenAPI specification document",
        "description": "Returns this OpenAPI document in JSON or YAML format.",
        "operationId": "apiGet",
        "parameters": [
          {
            "name": "f",
            "in": "query",
            "description": "Output format for the OpenAPI document.",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "string",
              "default": "json",
              "enum": [
                "json",
                "yaml",
                "yml"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "General Success response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "examples": {
                  "default": {
                    "value": "{\"openapi\":\"3.0.0\"}"
                  }
                }
              },
              "application/x-yaml": {
                "schema": {
                  "type": "string"
                },
                "examples": {
                  "default": {
                    "value": "openapi: 3.0.0"
                  }
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes": {
      "get": {
        "tags": [
          "discovery"
        ],
        "summary": "List available processes",
        "description": "The list of processes contains a summary of each process the OGC API - Processes offers, including the link to a more detailed description of the process.\n\nFor more information, see [Section 7.9](https://docs.ogc.org/is/18-062/18-062.html#sc_process_list).\n",
        "operationId": "getProcesses",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Information about the available processes",
            "headers": {
              "Version": {
                "$ref": "#/components/headers/version"
              },
              "Content-Language": {
                "$ref": "#/components/headers/contentLanguage"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/processList"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/collections": {
      "get": {
        "tags": [
          "discovery"
        ],
        "summary": "List available collections",
        "description": "returns a collection of available collection (like offers, packages, legs, support-requests and payments)",
        "operationId": "getCollections",
        "parameters": [],
        "responses": {
          "200": {
            "description": "A list of available collections",
            "headers": {
              "Version": {
                "$ref": "#/components/headers/version"
              },
              "Content-Language": {
                "$ref": "#/components/headers/contentLanguage"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/collections"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/conformance": {
      "get": {
        "tags": [
          "discovery"
        ],
        "summary": "Get API conformance declaration",
        "description": "A list of all conformance classes specified in a standard that the server conforms to.",
        "operationId": "getConformanceDeclaration",
        "parameters": [
          {
            "name": "f",
            "in": "query",
            "description": "The optional f parameter indicates the output format that the server shall provide as part of the response document.  The default format is JSON.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "type": "string",
              "default": "json",
              "enum": [
                "json",
                "html"
              ]
            }
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/conformanceDeclarationResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/oauth/token": {
      "post": {
        "tags": [
          "authentication"
        ],
        "summary": "Issue OAuth access token",
        "description": "This endpoint is used to obtain an access token and optionally an ID token through different OAuth 2.0 grant types, including Client Credentials Flow. Whenever the mTLS flow is taken, the properties will be ignored, and the access token will be generated based on the credentials in the certificate (O or CN).",
        "operationId": "oauthTokenPost",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "password": {
                    "type": "string",
                    "description": "The password"
                  },
                  "username": {
                    "type": "string",
                    "description": "The username"
                  },
                  "client_id": {
                    "type": "string",
                    "description": "The client ID (Client Credentials Flow)"
                  },
                  "grant_type": {
                    "type": "string",
                    "description": "The grant type: 'client_credentials', 'password', or 'refresh_token'.",
                    "default": "client_credentials",
                    "enum": [
                      "client_credentials",
                      "password",
                      "refresh_token"
                    ]
                  },
                  "client_secret": {
                    "type": "string",
                    "description": "The client secret (Client Credentials Flow)"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful token issuance.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "expires_in": {
                      "type": "integer",
                      "description": "The lifetime of the access token in seconds."
                    },
                    "token_type": {
                      "type": "string",
                      "description": "The type of the token.",
                      "default": "Bearer"
                    },
                    "access_token": {
                      "type": "string",
                      "description": "The issued access token."
                    },
                    "refresh_token": {
                      "type": "string",
                      "description": "The optional refresh token."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request: Invalid request or wrong grant type."
          },
          "401": {
            "description": "Unauthorized: Invalid client ID or secret."
          },
          "500": {
            "description": "Internal Server Error: Something went wrong."
          }
        }
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/{processID}": {
      "get": {
        "tags": [
          "discovery"
        ],
        "summary": "Get process description",
        "description": "The process description contains information about inputs and outputs and a link to the execution-endpoint for the process. The Core does not mandate the use of a specific process description to specify the interface of a process. That said, the Core requirements class makes the following recommendation: Implementations SHOULD consider supporting the OGC process description. For more information, see [Section 7.10](https://docs.ogc.org/is/18-062/18-062.html#sc_process_description).\n",
        "operationId": "getProcessDescription",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "processID",
            "in": "path",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "search-offers",
                "select-offers",
                "add-traveller",
                "update-traveller",
                "remove-traveller",
                "assign-asset",
                "assign-ancillary",
                "purchase-offers",
                "purchase-package",
                "confirm-package",
                "release-package",
                "extend-expiry-time",
                "update-travel-document-validity",
                "cancel-package",
                "claim-refund-option",
                "confirm-refund-option"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A process description.",
            "headers": {
              "Version": {
                "$ref": "#/components/headers/version"
              },
              "Content-Language": {
                "$ref": "#/components/headers/contentLanguage"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "externalDocs": {
                    "url": "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/refs/heads/master/openapi/schemas/processes-core/process.yaml"
                  }
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/collections/assets/items": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List assets for package or leg",
        "description": "Retrieves asset information for a package, optionally filtered by leg.",
        "operationId": "assetCollectionHandler",
        "parameters": [
          {
            "name": "packageId",
            "in": "query",
            "description": "the identifier of a package",
            "required": true,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "legId",
            "in": "query",
            "description": "leg identifier",
            "required": true,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The optional limit parameter limits the number of items that are presented in the response document.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted. Minimum = 1. Maximum = 10000. Default = 100.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "maximum": 10000,
              "minimum": 1,
              "type": "integer",
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "The optional offset parameter representing the starting index of the returned collection.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted.\nDefault = 0.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "minimum": 0,
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "bbox",
            "in": "query",
            "description": "Only features that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth): * Lower left corner, coordinate axis 1 * Lower left corner, coordinate axis 2 * Minimum value, coordinate axis 3 (optional) * Upper right corner, coordinate axis 1 * Upper right corner, coordinate axis 2 * Maximum value, coordinate axis 3 (optional)\nIf the value consists of four numbers, the coordinate reference system is WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in the parameter `bbox-crs`.\nIf the value consists of six numbers, the coordinate reference system is WGS 84 longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h) unless a different coordinate reference system is specified in the parameter `bbox-crs`.\nThe query parameter `bbox-crs` is specified in OGC API - Features - Part 2: Coordinate Reference Systems by Reference.\nFor WGS 84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge).\nIf the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box.\nIf a feature has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "number"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/geojsonResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          },
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/collections/packages/items": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List purchased packages",
        "description": "Returns a paginated list of packages belonging to the authenticated user.",
        "operationId": "packageCollectionHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The optional limit parameter limits the number of items that are presented in the response document.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted. Minimum = 1. Maximum = 10000. Default = 100.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "maximum": 10000,
              "minimum": 1,
              "type": "integer",
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "The optional offset parameter representing the starting index of the returned collection.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted.\nDefault = 0.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "minimum": 0,
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "packageId",
            "in": "query",
            "description": "the identifier of a package (maps to Orders id)",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "description": "optional owner customer identifier filter (maps to Orders createdBy, exact match only)",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "contactCustomerId",
            "in": "query",
            "description": "optional contact customer identifier filter (maps to Orders contact, exact match only)",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "balance",
            "in": "query",
            "description": "optional package balance filter, passed through to Orders balance filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "createdAt",
            "in": "query",
            "description": "optional package created-at filter, passed through to Orders createdAt filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "currency",
            "in": "query",
            "description": "optional package currency filter, passed through to Orders currency filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "datedServiceJourneyId",
            "in": "query",
            "description": "optional package dated service journey ID filter, passed through to Orders datedServiceJourneyId filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "distributionChannelId",
            "in": "query",
            "description": "optional package distribution channel ID filter, passed through to Orders distributionChannelId filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "endTime",
            "in": "query",
            "description": "optional package end-time filter, passed through to Orders endTime filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "externalReference",
            "in": "query",
            "description": "optional package external reference filter, passed through to Orders externalReference filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "fromStopPlaceId",
            "in": "query",
            "description": "optional package from stop place ID filter, passed through to Orders fromStopPlaceId filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "lastConfirmedAt",
            "in": "query",
            "description": "optional package last-confirmed-at filter, passed through to Orders lastConfirmedAt filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "optional package orderBy value, passed through to Orders orderBy",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "legExternalReference",
            "in": "query",
            "description": "optional package leg external reference filter, mapped to Orders orderLineExternalReference",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "legId",
            "in": "query",
            "description": "optional package leg identifier filter, mapped to Orders orderLineId",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organisationId",
            "in": "query",
            "description": "optional package organisation ID filter, passed through to Orders organisationId filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "originalDatedServiceJourneyId",
            "in": "query",
            "description": "optional package original dated service journey ID filter, passed through to Orders originalDatedServiceJourneyId filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "pos",
            "in": "query",
            "description": "optional package POS filter, passed through to Orders pos filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "reservationId",
            "in": "query",
            "description": "optional package reservation ID filter, passed through to Orders reservationId filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "productId",
            "in": "query",
            "description": "optional package product ID filter, mapped to Orders fareProductId",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "fareProductVersion",
            "in": "query",
            "description": "optional package fare product version filter, passed through to Orders fareProductVersion filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "serviceJourneyId",
            "in": "query",
            "description": "optional package service journey ID filter, passed through to Orders serviceJourneyId filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "description": "optional package sort direction (ASC or DESC), passed through to Orders sortBy",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startTime",
            "in": "query",
            "description": "optional package start-time filter, passed through to Orders startTime filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "toStopPlaceId",
            "in": "query",
            "description": "optional package to stop place ID filter, passed through to Orders toStopPlaceId filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "totalAmount",
            "in": "query",
            "description": "optional package total amount filter, passed through to Orders totalAmount filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "totalTaxAmount",
            "in": "query",
            "description": "optional package total tax amount filter, passed through to Orders totalTaxAmount filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "version",
            "in": "query",
            "description": "optional package version filter, passed through to Orders version filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter packages by their lifecycle status (e.g. CONFIRMED, CANCELLED)",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/packageStatus"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageCollectionResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/collections/{collectionId}": {
      "get": {
        "tags": [
          "discovery"
        ],
        "summary": "Get collection metadata",
        "description": "a (machine or human) readable description of this collection",
        "operationId": "describeCollection",
        "parameters": [
          {
            "name": "collectionId",
            "in": "path",
            "description": "local identifier of a collection",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "description of data delivered by this collection",
            "headers": {
              "Version": {
                "$ref": "#/components/headers/version"
              },
              "Content-Language": {
                "$ref": "#/components/headers/contentLanguage"
              }
            },
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/collectionInfo"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/collections/customers/items": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List customers with filters",
        "description": "Retrieve customers with optional filters and pagination.",
        "operationId": "customerCollectionHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The optional limit parameter limits the number of items that are presented in the response document.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted. Minimum = 1. Maximum = 10000. Default = 100.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "maximum": 10000,
              "minimum": 1,
              "type": "integer",
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "The optional offset parameter representing the starting index of the returned collection.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted.\nDefault = 0.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "minimum": 0,
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "description": "optional customer identifier filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "firstName",
            "in": "query",
            "description": "optional first name filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            }
          },
          {
            "name": "lastName",
            "in": "query",
            "description": "optional last name filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            }
          },
          {
            "name": "email",
            "in": "query",
            "description": "optional email filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "phoneNumber",
            "in": "query",
            "description": "optional phone number filter",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/customerCollectionResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "post": {
        "tags": [
          "collections"
        ],
        "summary": "Create customer record",
        "description": "Create a customer record that can be used for purchases.",
        "operationId": "createCustomerHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/customerInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/customerResponse"
          },
          "201": {
            "$ref": "#/components/responses/customerResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/collections/ancillaries/items": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List ancillaries for package or leg",
        "description": "Retrieves ancillary products for a package, optionally filtered by leg.",
        "operationId": "ancillariesCollectionHandler",
        "parameters": [
          {
            "name": "packageId",
            "in": "query",
            "description": "the identifier of a package",
            "required": true,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "legId",
            "in": "query",
            "description": "leg identifier",
            "required": true,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The optional limit parameter limits the number of items that are presented in the response document.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted. Minimum = 1. Maximum = 10000. Default = 100.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "maximum": 10000,
              "minimum": 1,
              "type": "integer",
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "The optional offset parameter representing the starting index of the returned collection.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted.\nDefault = 0.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "minimum": 0,
              "type": "integer",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ancillariesResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          },
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/collections/datasources/items": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List configured external data sources",
        "description": "Retrieves all datasources",
        "operationId": "getDataSources",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/dataSourceResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/assign-asset/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Assign asset to package leg",
        "description": "Assigns an asset to a specific package leg.",
        "operationId": "assignAssetHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/assetInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/add-traveller/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Add traveller to package",
        "description": "Adds a traveller to an existing package.",
        "operationId": "addTravellerHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/addTravellerInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/search-offers/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Search available travel offers",
        "description": "Searches for available offers based on travel and traveller criteria.",
        "operationId": "searchOfferHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The optional limit parameter limits the number of items that are presented in the response document.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted. Minimum = 1. Maximum = 10000. Default = 100.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "maximum": 10000,
              "minimum": 1,
              "type": "integer",
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "The optional offset parameter representing the starting index of the returned collection.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted.\nDefault = 0.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "minimum": 0,
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "bbox",
            "in": "query",
            "description": "Only features that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth): * Lower left corner, coordinate axis 1 * Lower left corner, coordinate axis 2 * Minimum value, coordinate axis 3 (optional) * Upper right corner, coordinate axis 1 * Upper right corner, coordinate axis 2 * Maximum value, coordinate axis 3 (optional)\nIf the value consists of four numbers, the coordinate reference system is WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in the parameter `bbox-crs`.\nIf the value consists of six numbers, the coordinate reference system is WGS 84 longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h) unless a different coordinate reference system is specified in the parameter `bbox-crs`.\nThe query parameter `bbox-crs` is specified in OGC API - Features - Part 2: Coordinate Reference Systems by Reference.\nFor WGS 84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge).\nIf the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box.\nIf a feature has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "number"
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/searchOfferInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/searchOfferResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/geojson"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/select-offers/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Create draft package from selected offers",
        "description": "Creates or updates a draft package from selected offer identifiers.",
        "operationId": "selectOffersHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/selectOffersInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/collections/change-options/items": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List available change options",
        "description": "Retrieves available change options for a package.",
        "operationId": "changeOptionHandler",
        "parameters": [
          {
            "name": "packageId",
            "in": "query",
            "description": "the identifier of a package",
            "required": true,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "legId",
            "in": "query",
            "description": "leg identifier",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/changeOptionsResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          },
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/collections/refund-options/items": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List available refund options",
        "description": "Retrieves available refund options for a package.",
        "operationId": "refundOptionHandler",
        "parameters": [
          {
            "name": "packageId",
            "in": "query",
            "description": "the identifier of a package",
            "required": true,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "legId",
            "in": "query",
            "description": "leg identifier",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "travellerId",
            "in": "query",
            "description": "traveller identifier",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "ancillaryId",
            "in": "query",
            "description": "ancillary identifier",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/refundOptionsResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          },
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/cancel-package/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Cancel package",
        "description": "Cancels an existing purchased or reserved package.",
        "operationId": "cancelPackageProcessHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/packageInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/confirm-package/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Confirm package before purchase",
        "description": "Confirms a package before final purchase.",
        "operationId": "confirmPackageProcessHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The optional limit parameter limits the number of items that are presented in the response document.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted. Minimum = 1. Maximum = 10000. Default = 100.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "maximum": 10000,
              "minimum": 1,
              "type": "integer",
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "The optional offset parameter representing the starting index of the returned collection.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted.\nDefault = 0.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "minimum": 0,
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "bbox",
            "in": "query",
            "description": "Only features that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth): * Lower left corner, coordinate axis 1 * Lower left corner, coordinate axis 2 * Minimum value, coordinate axis 3 (optional) * Upper right corner, coordinate axis 1 * Upper right corner, coordinate axis 2 * Maximum value, coordinate axis 3 (optional)\nIf the value consists of four numbers, the coordinate reference system is WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in the parameter `bbox-crs`.\nIf the value consists of six numbers, the coordinate reference system is WGS 84 longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h) unless a different coordinate reference system is specified in the parameter `bbox-crs`.\nThe query parameter `bbox-crs` is specified in OGC API - Features - Part 2: Coordinate Reference Systems by Reference.\nFor WGS 84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge).\nIf the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box.\nIf a feature has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "number"
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/packageInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/purchase-offers/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Purchase selected offers directly",
        "description": "Purchases selected offers directly and returns the resulting package.",
        "operationId": "purchaseOffersProcessHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/purchaseOffersInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/release-package/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Release package reservation",
        "description": "Releases a package reservation.",
        "operationId": "releasePackageProcessHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The optional limit parameter limits the number of items that are presented in the response document.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted. Minimum = 1. Maximum = 10000. Default = 100.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "maximum": 10000,
              "minimum": 1,
              "type": "integer",
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "The optional offset parameter representing the starting index of the returned collection.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted.\nDefault = 0.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "minimum": 0,
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "bbox",
            "in": "query",
            "description": "Only features that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth): * Lower left corner, coordinate axis 1 * Lower left corner, coordinate axis 2 * Minimum value, coordinate axis 3 (optional) * Upper right corner, coordinate axis 1 * Upper right corner, coordinate axis 2 * Maximum value, coordinate axis 3 (optional)\nIf the value consists of four numbers, the coordinate reference system is WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in the parameter `bbox-crs`.\nIf the value consists of six numbers, the coordinate reference system is WGS 84 longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h) unless a different coordinate reference system is specified in the parameter `bbox-crs`.\nThe query parameter `bbox-crs` is specified in OGC API - Features - Part 2: Coordinate Reference Systems by Reference.\nFor WGS 84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge).\nIf the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box.\nIf a feature has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries.",
            "required": false,
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "number"
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/packageInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/collections/travel-documents/items": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List travel documents for package",
        "description": "Retrieves travel documents for a package with optional status filtering.",
        "operationId": "traveldocumentsCollectionHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "packageId",
            "in": "query",
            "description": "the identifier of a package",
            "required": true,
            "style": "form",
            "explode": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "legId",
            "in": "query",
            "description": "leg identifier",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter travel documents by status",
            "required": false,
            "style": "form",
            "explode": true,
            "schema": {
              "$ref": "#/components/schemas/travelDocumentStatus"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/travelDocumentResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "OpenData": []
          },
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/assign-ancillary/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Assign ancillary products to package",
        "description": "Assigns ancillary products to a package or a package leg.",
        "operationId": "assignAncillaryProcessHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/ancillaryInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/purchase-package/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Purchase existing package",
        "description": "Purchases a previously created package.",
        "operationId": "purchasePackageProcessHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/packageInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/remove-traveller/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Remove traveller from package",
        "description": "Removes a traveller from an existing package.",
        "operationId": "removeTravellerHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/removeTravellerInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/update-traveller/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Update traveller in package",
        "description": "Updates traveller details in an existing package.",
        "operationId": "updateTravellerHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/updateTravellerInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/extend-expiry-time/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Extend package reservation expiry",
        "description": "Extends the expiry time for a reserved package.",
        "operationId": "extendExpiryTimeProcessHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/extendExpiryTimeInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/claim-refund-option/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Claim refund option for package",
        "description": "Claims a refund option for the selected package content.",
        "operationId": "claimRefundProcessHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-POS",
            "in": "header",
            "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/refundOptionInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/collections/packages/items/{packageId}": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Get package by ID",
        "description": "Retrieves a single package by identifier.",
        "operationId": "getPackage",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "packageId",
            "in": "path",
            "description": "The unique identifier of the package to retrieve",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "404": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/confirm-refund-option/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Confirm claimed refund option",
        "description": "Confirms a previously claimed refund option.",
        "operationId": "confirmRefundClaimProcessHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/refundOptionInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/packageResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/package"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/collections/customers/items/{customerId}": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Get customer by ID",
        "description": "Retrieves a single customer by identifier.",
        "operationId": "getCustomerHandler",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "description": "customer identifier",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/customerResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "put": {
        "tags": [
          "collections"
        ],
        "summary": "Replace customer record",
        "description": "Replace the customer record.",
        "operationId": "updateCustomerHandler",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "description": "customer identifier",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/customerInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/customerResponse"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "delete": {
        "tags": [
          "collections"
        ],
        "summary": "Delete customer record",
        "description": "Delete the customer record.",
        "operationId": "deleteCustomerHandler",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "description": "customer identifier",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Customer deleted successfully"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/processes/update-travel-document-validity/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Update travel document validity start",
        "description": "Updates the validity start time for a travel document in a package.",
        "operationId": "updateTravelDocumentValidityProcessHandler",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "$ref": "#/components/schemas/shortString"
            },
            "x-externalDocs": {
              "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "description": "Header field, JWT must be supplied",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Client-Name",
            "in": "header",
            "description": "Encouraged for tracing and routing, but not required.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Entur-Log-Level",
            "in": "header",
            "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
            "required": false,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string",
              "enum": [
                "TRACE",
                "DEBUG",
                "INFO",
                "WARN",
                "ERROR"
              ]
            }
          },
          {
            "name": "Entur-Distribution-Channel",
            "in": "header",
            "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/updateTravelDocumentValidityInput"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Validity updated successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/updateTravelDocumentValidityResponse"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    }
  },
  "components": {
    "schemas": {
      "day": {
        "type": "string",
        "enum": [
          "MON",
          "TUE",
          "WED",
          "THU",
          "FRI",
          "SAT",
          "SUN"
        ],
        "x-tm": "DAY OF WEEK"
      },
      "leg": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelSpecification"
          },
          {
            "required": [
              "id",
              "type"
            ],
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/normalString"
              },
              "mode": {
                "$ref": "#/components/schemas/mode"
              },
              "type": {
                "pattern": "^(leg)$",
                "type": "string"
              },
              "price": {
                "$ref": "#/components/schemas/amountOfMoney"
              },
              "state": {
                "$ref": "#/components/schemas/legState"
              },
              "assets": {
                "type": "array",
                "description": "The physical asset(s) used for the execution of the leg",
                "items": {
                  "$ref": "#/components/schemas/normalString"
                }
              },
              "operator": {
                "$ref": "#/components/schemas/organisationReference"
              },
              "products": {
                "type": "array",
                "description": "a reference to a product in the 'products' collection of the offer",
                "items": {
                  "$ref": "#/components/schemas/shortString"
                }
              },
              "traveller": {
                "$ref": "#/components/schemas/normalString"
              },
              "ancillaries": {
                "type": "array",
                "description": "additional products that can be assigned to this leg, references to 'ancillaries' collection",
                "items": {
                  "$ref": "#/components/schemas/shortString"
                }
              },
              "sequenceNumber": {
                "$ref": "#/components/schemas/shortInt"
              }
            },
            "description": "A (planned) consumption of a product within a package"
          }
        ],
        "x-tm": "LEG"
      },
      "url": {
        "type": "string",
        "description": "valid URL",
        "format": "uri"
      },
      "card": {
        "required": [
          "cardNumber",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(card)$",
            "type": "string"
          },
          "country": {
            "$ref": "#/components/schemas/country"
          },
          "cardType": {
            "$ref": "#/components/schemas/cardType"
          },
          "cardNumber": {
            "$ref": "#/components/schemas/shortString"
          },
          "description": {
            "$ref": "#/components/schemas/shortString"
          },
          "endValidity": {
            "$ref": "#/components/schemas/date"
          },
          "additionalNumber": {
            "$ref": "#/components/schemas/shortString"
          }
        },
        "description": "Any kind of card that isn't a license, only provide the cards that are required",
        "x-tm": "CUSTOMER PAYMENT MEANS, MEDIUM APPLICATION INSTANCE"
      },
      "date": {
        "type": "string",
        "description": "https://www.rfc-editor.org/rfc/rfc3339#section-5.6, full-date (2019-10-12)",
        "format": "full-date",
        "x-pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
      },
      "link": {
        "required": [
          "href",
          "rel"
        ],
        "type": "object",
        "properties": {
          "rel": {
            "type": "string",
            "description": "the action that can be performed OR part of the URI allowed values include the 'processId's, prefixes for the referenced data sources, prefixes for deeplinks ('apple' and 'android'), OGC compliant ones (alternative, next, etc)"
          },
          "body": {
            "type": "object",
            "description": "the (prefilled) body for the request"
          },
          "hash": {
            "type": "string",
            "description": "to validate that the content of the link hasn't been changed."
          },
          "href": {
            "$ref": "#/components/schemas/url"
          },
          "type": {
            "$ref": "#/components/schemas/shortString"
          },
          "method": {
            "type": "string",
            "description": "to indicate the http method.",
            "enum": [
              "POST",
              "GET",
              "PUT",
              "DELETE",
              "PATCH"
            ]
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "validity": {
            "$ref": "#/components/schemas/temporalParameter"
          },
          "description": {
            "type": "string",
            "description": "the description of the external data source"
          },
          "isMandatory": {
            "type": "boolean",
            "description": "is this link informative, or must it be used?"
          }
        },
        "additionalProperties": false,
        "x-externalDocs": {
          "url": "https://github.com/opengeospatial/ogcapi-processes/raw/refs/heads/master/openapi/schemas/common-core/link.yaml"
        }
      },
      "mode": {
        "type": "string",
        "description": "These classes are taken from the NeTeX standard, but ALL and UNKNOWN are removed. On the other hand OTHER and PARKING are added.",
        "enum": [
          "AIR",
          "BUS",
          "TROLLEYBUS",
          "TRAM",
          "COACH",
          "RAIL",
          "INTERCITYRAIL",
          "URBANRAIL",
          "METRO",
          "WATER",
          "CABLEWAY",
          "FUNICULAR",
          "TAXI",
          "SELFDRIVE",
          "FOOT",
          "BICYCLE",
          "MOTORCYCLE",
          "CAR",
          "SHUTTLE",
          "OTHER",
          "PARKING",
          "MOPED",
          "STEP",
          "FERRY"
        ],
        "x-tm": [
          {
            "concept": "MODE"
          }
        ]
      },
      "seat": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/normalString"
          },
          "row": {
            "$ref": "#/components/schemas/shortInt"
          },
          "deck": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "pattern": "^(seat)$",
            "type": "string"
          },
          "space": {
            "$ref": "#/components/schemas/shortString"
          },
          "facing": {
            "type": "string",
            "enum": [
              "FRONT",
              "REAR",
              "LEFT",
              "RIGHT",
              "OTHER"
            ]
          },
          "byAisle": {
            "type": "boolean"
          },
          "hasTray": {
            "type": "boolean"
          },
          "byWindow": {
            "type": "boolean"
          },
          "hasAirco": {
            "type": "boolean"
          },
          "hasLight": {
            "type": "boolean"
          },
          "legSpace": {
            "$ref": "#/components/schemas/shortInt"
          },
          "hasArmRest": {
            "type": "boolean"
          },
          "seatNumber": {
            "$ref": "#/components/schemas/shortInt"
          },
          "hasEnergySupply": {
            "type": "boolean"
          }
        }
      },
      "uuid": {
        "type": "string",
        "description": "https://en.wikipedia.org/wiki/Universally_unique_identifier see also https://www.ietf.org/rfc/rfc4122.txt (ae76f51c-a1a6-46af-b9ab-8233564adcae)",
        "x-preferred-pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
      },
      "asset": {
        "properties": {
          "id": {
            "$ref": "#/components/schemas/normalString"
          },
          "mode": {
            "$ref": "#/components/schemas/mode"
          },
          "type": {
            "pattern": "^(asset)$",
            "type": "string"
          },
          "product": {
            "$ref": "#/components/schemas/productReference"
          },
          "subMode": {
            "$ref": "#/components/schemas/normalString"
          },
          "visualId": {
            "$ref": "#/components/schemas/shortString"
          },
          "equipment": {
            "maxItems": 100,
            "type": "array",
            "description": "list of external references",
            "items": {
              "$ref": "#/components/schemas/equipmentReference"
            }
          }
        },
        "description": "the asset that can by applied to execute a leg.",
        "x-tm": "VEHICLE, PARKING BAY, CYCLE STORAGE EQUIPMENT, VEHICLE CHARGING EQUIPMENT"
      },
      "error": {
        "required": [
          "category",
          "code",
          "detail",
          "hint",
          "status",
          "title",
          "type"
        ],
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Stable machine-readable OMSA problem code."
          },
          "hint": {
            "type": "string",
            "description": "Short client-facing remediation hint."
          },
          "type": {
            "$ref": "#/components/schemas/url"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "title": {
            "$ref": "#/components/schemas/shortString"
          },
          "detail": {
            "$ref": "#/components/schemas/longString"
          },
          "status": {
            "$ref": "#/components/schemas/httpStatus"
          },
          "context": {
            "type": "object",
            "additionalProperties": true,
            "description": "Safe structured context fields for the problem."
          },
          "category": {
            "type": "string",
            "description": "Public problem category used by OMSA curated problems.",
            "enum": [
              "authorization",
              "validation",
              "downstream",
              "state",
              "resource",
              "availability",
              "server"
            ]
          },
          "instance": {
            "$ref": "#/components/schemas/url"
          }
        },
        "additionalProperties": true,
        "description": "JSON schema for exceptions based on RFC 7807"
      },
      "float": {
        "minimum": 0,
        "type": "number",
        "description": "the travelled distance. Only if applicable.",
        "format": "float"
      },
      "offer": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "pattern": "^(offer)$",
            "type": "string"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "properties": {
            "type": "object",
            "properties": {
              "legs": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/leg"
                }
              },
              "price": {
                "$ref": "#/components/schemas/amountOfMoney"
              },
              "summary": {
                "type": "object",
                "additionalProperties": true,
                "description": "Flexible summary metadata for the offer. Known keys include:\n  - `name`: offer display name\n  - `description`: human-readable offer description\n  - `isRefundable`: whether included products are refundable\n  - `isExchangeable`: whether included products are exchangeable\n  - `geographicalValidity`: zonal validity details\n  - `recommendationType`: recommendation category from Offers (for example `CHEAPEST`)\n  - `recommendationGroup`: 1-based recommendation index in Offers response order\n  - `recommendationRank`: 1-based `offersToBuy` index within a recommendation\n"
              },
              "products": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/product"
                }
              },
              "expiryTime": {
                "$ref": "#/components/schemas/dateTime"
              },
              "guarantees": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/guarantee"
                }
              },
              "ancillaries": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ancillary"
                }
              }
            }
          }
        },
        "x-tm": "SALES OFFER PACKAGE"
      },
      "country": {
        "maxLength": 2,
        "minLength": 2,
        "pattern": "[A-Z]{2}",
        "type": "string",
        "description": "two-letter country codes according to ISO 3166-1"
      },
      "geojson": {
        "type": "object",
        "properties": {
          "crs": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string"
              },
              "properties": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "type": {
            "pattern": "^(FeatureCollection)$",
            "type": "string"
          },
          "links": {
            "type": "array",
            "description": "actions that can be performed on this package, but also alternative (rel=alternative+1, alternative+2) offers or references to other resources In case it is an alternative, specify clearly in the description what the financial consequences are.",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "features": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/geojsonFeature"
            }
          },
          "properties": {
            "type": "object"
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          }
        }
      },
      "license": {
        "required": [
          "number",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(license)$",
            "type": "string"
          },
          "endValidity": {
            "$ref": "#/components/schemas/date"
          },
          "licenseType": {
            "$ref": "#/components/schemas/licenseType"
          },
          "licenseNumber": {
            "$ref": "#/components/schemas/shortString"
          }
        },
        "description": "driver or usage license for a specific user. Contains the number and the assetType you're allowed to operate (e.g. driver license for CAR)",
        "x-tm": "ACCEPTED DRIVER PERMIT"
      },
      "longInt": {
        "minimum": 0,
        "type": "integer",
        "description": "long number, for distances etc. (>1.000)",
        "default": 0
      },
      "package": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelSpecification"
          },
          {
            "$ref": "#/components/schemas/placeDefinitions"
          },
          {
            "required": [
              "offers",
              "price",
              "status",
              "type"
            ],
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "type": {
                "pattern": "^(package)$",
                "type": "string"
              },
              "links": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/link"
                }
              },
              "price": {
                "$ref": "#/components/schemas/amountOfMoney"
              },
              "offers": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/offer"
                }
              },
              "status": {
                "$ref": "#/components/schemas/packageStatus"
              },
              "guarantees": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/normalString"
                }
              },
              "travellers": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/individualTraveller"
                    },
                    {
                      "$ref": "#/components/schemas/userProfile"
                    },
                    {
                      "$ref": "#/components/schemas/travellingAsset"
                    }
                  ]
                }
              },
              "externalReference": {
                "$ref": "#/components/schemas/normalString"
              }
            },
            "description": "a purchased package is a registration of an agreement between end user and TO, to execute a package (=set of legs) according a specification, including all conditions"
          }
        ],
        "x-tm": "TRAVEL OFFER PACKAGE, CUSTOMER PURCHASE PACKAGE"
      },
      "product": {
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(product)$",
            "type": "string"
          },
          "productId": {
            "$ref": "#/components/schemas/productReference"
          },
          "guarantees": {
            "type": "array",
            "description": "references to products that are contained in this product (to facilitate e.g. travel through) If his combined product is named in a package, the referenced packages must be enlisted as well.",
            "items": {
              "$ref": "#/components/schemas/guarantee"
            }
          },
          "productName": {
            "$ref": "#/components/schemas/normalString"
          }
        },
        "x-tm": "FARE PRODUCT"
      },
      "tinyInt": {
        "maximum": 10,
        "minimum": 0,
        "type": "integer",
        "description": "for really small numbers (0-10)",
        "default": 0
      },
      "cardType": {
        "required": [
          "id",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "pattern": "^(card_type)$",
            "type": "string"
          },
          "subCategory": {
            "$ref": "#/components/schemas/shortString"
          },
          "cardCategory": {
            "type": "string",
            "description": "The category of card<br> DISCOUNT - discount card, can be applied in the purchase process to get rebate<br> TRAVEL - (external) travel card, possibly paid for in other context, but also monthly, weekly or day-cards<br> BANK - bank card<br> CREDIT - credit card<br> ID - identification card, like an ID card<br> PASSPORT - passport to identify yourself<br> OTHER - unspecified, use 'subCategory' to specify the category of card",
            "enum": [
              "DISCOUNT",
              "TRAVEL",
              "BANK",
              "CREDIT",
              "ID",
              "PASSPORT",
              "OTHER"
            ]
          },
          "customFields": {
            "$ref": "#/components/schemas/customProperties"
          },
          "relatedProduct": {
            "$ref": "#/components/schemas/productReference"
          },
          "transportOrganisations": {
            "maxItems": 15,
            "type": "array",
            "description": "references to accepting parties, only if applicable",
            "items": {
              "$ref": "#/components/schemas/organisationReference"
            }
          }
        },
        "description": "A generic description of a CARD",
        "x-tm": "TYPE OF PAYMENT METHOD, MEDIUM ACCESS DEVICE"
      },
      "customer": {
        "description": "A customer record returned by the OMSA service.",
        "allOf": [
          {
            "$ref": "#/components/schemas/customerInput"
          },
          {
            "required": [
              "id"
            ],
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/normalString"
              }
            }
          }
        ],
        "x-tm": "TRANSPORT CUSTOMER"
      },
      "dataType": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "type": "string",
            "enum": [
              "map",
              "vector",
              "coverage"
            ]
          }
        ]
      },
      "dateTime": {
        "type": "string",
        "description": "https://www.rfc-editor.org/rfc/rfc3339#section-5.6, date-time (2019-10-12T07:20:50.52Z)",
        "format": "date-time",
        "x-pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$"
      },
      "legInput": {
        "allOf": [
          {
            "$ref": "#/components/schemas/packageInput"
          },
          {
            "required": [
              "legId",
              "type"
            ],
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(leg)",
                "type": "string"
              },
              "legId": {
                "$ref": "#/components/schemas/normalString"
              },
              "offerId": {
                "$ref": "#/components/schemas/normalString"
              },
              "location": {
                "$ref": "#/components/schemas/placeReference"
              }
            }
          }
        ]
      },
      "legState": {
        "type": "string",
        "description": "status of a leg<br> _NOT_STARTED_ the leg is not started, initial state<br> _PREPARING_ the _PREPARE_ operation has been received<br> _PREPARED_ the leg is ready to use<br> _IN_USE_ the travelers are on their way<br> _PAUSED_ the asset is paused<br> _ENDED_ the travelers have arrived at their destination<br> _ISSUE_REPORTED_ due to an issue, there is (temporarily) no progress to report, when the issue isn't solved, this is a final state<br> _CANCELLED_ the leg has been cancelled, before execution<br> _ABENDED_ the leg is abnormally ended (e.g. due to an issue)",
        "enum": [
          "NOT_STARTED",
          "PREPARING",
          "PREPARED",
          "IN_USE",
          "PAUSED",
          "ENDED",
          "ISSUE_REPORTED",
          "CANCELLED",
          "ABENDED"
        ]
      },
      "metadata": {
        "oneOf": [
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/link"
              },
              {
                "type": "object",
                "properties": {
                  "role": {
                    "type": "string"
                  }
                }
              }
            ]
          },
          {
            "type": "object",
            "properties": {
              "lang": {
                "type": "string"
              },
              "role": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "value": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "object"
                  }
                ]
              }
            }
          }
        ]
      },
      "shortInt": {
        "maximum": 100,
        "minimum": 0,
        "type": "integer",
        "description": "a bit short integer (0-100)",
        "default": 0
      },
      "ancillary": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ancillaryReference"
          },
          {
            "properties": {
              "type": {
                "pattern": "^(ancillary)$",
                "type": "string"
              },
              "links": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/link"
                }
              },
              "price": {
                "$ref": "#/components/schemas/amountOfMoney"
              },
              "available": {
                "type": "integer",
                "description": "Number of items available in stock (inventory). Useful for creating urgency in GUI."
              },
              "description": {
                "type": "string",
                "description": "A user-friendly description of the ancillary (e.g. 'Reserved seat for bike')."
              }
            },
            "x-tm": "ANCILLARY"
          }
        ]
      },
      "basePoint": {
        "maxItems": 2,
        "minItems": 2,
        "type": "array",
        "items": {
          "minimum": 0,
          "type": "number",
          "format": "float"
        }
      },
      "guarantee": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "normalInt": {
        "maximum": 1000,
        "minimum": 0,
        "type": "integer",
        "description": "default length for an integer (0-1000)",
        "default": 0
      },
      "assetInput": {
        "allOf": [
          {
            "$ref": "#/components/schemas/legInput"
          },
          {
            "required": [
              "assetId",
              "type"
            ],
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(asset)$",
                "type": "string"
              },
              "assetId": {
                "$ref": "#/components/schemas/normalString"
              },
              "replaceAssetId": {
                "$ref": "#/components/schemas/normalString"
              }
            }
          }
        ]
      },
      "classOfUse": {
        "type": "string",
        "description": "A classification of fare and other service classes by category of user entitled to use them.",
        "enum": [
          "FIRST_CLASS",
          "SECOND_CLASS",
          "THIRD_CLASS",
          "ECONOMY_CLASS",
          "BUSINESS_CLASS",
          "TURISTA",
          "PREFERENTE",
          "PREMIUM_CLASS",
          "ANY",
          "UNKNOWN"
        ],
        "x-tm": "CLASS OF USE"
      },
      "httpStatus": {
        "maximum": 599,
        "minimum": 100,
        "type": "integer",
        "description": "HTTP status code (100–599)"
      },
      "longString": {
        "maxLength": 10000,
        "type": "string",
        "description": "long string, memos etc (length 0-10.000)"
      },
      "subscriber": {
        "required": [
          "successUrl"
        ],
        "type": "object",
        "properties": {
          "failedUri": {
            "type": "string",
            "format": "uri"
          },
          "successUri": {
            "type": "string",
            "format": "uri"
          },
          "inProgressUri": {
            "type": "string",
            "format": "uri"
          }
        },
        "description": "Optional URIs for callbacks for this job.\n\nSupport for this parameter is not required and the parameter may be\nremoved from the API definition, if conformance class **'callback'**\nis not listed in the conformance declaration under `/conformance`.",
        "externalDocs": {
          "url": "https://github.com/opengeospatial/ogcapi-processes/raw/refs/heads/master/openapi/schemas/processes-core/subscriber.yaml"
        }
      },
      "tinyString": {
        "maxLength": 10,
        "type": "string",
        "description": "real short string, codes (length 0-10)"
      },
      "collections": {
        "required": [
          "collections",
          "links"
        ],
        "type": "object",
        "properties": {
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "timeStamp": {
            "type": "string",
            "format": "date-time"
          },
          "collections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/collectionInfo"
            }
          },
          "numberMatched": {
            "minimum": 0,
            "type": "integer",
            "examples": [
              1
            ]
          },
          "numberReturned": {
            "minimum": 0,
            "type": "integer",
            "examples": [
              1
            ]
          }
        }
      },
      "confClasses": {
        "required": [
          "conformsTo"
        ],
        "type": "object",
        "properties": {
          "conformsTo": {
            "type": "array",
            "items": {
              "type": "string",
              "examples": [
                "http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core"
              ]
            }
          }
        }
      },
      "customerRef": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/normalString"
          }
        },
        "description": "Reference to an existing customer by id.",
        "x-tm": "TRANSPORT CUSTOMER"
      },
      "geojsonLine": {
        "required": [
          "coordinates"
        ],
        "type": "object",
        "properties": {
          "coordinates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/basePoint"
            }
          }
        },
        "description": "An array of WGS84 coordinate pairs"
      },
      "landingPage": {
        "required": [
          "links"
        ],
        "type": "object",
        "properties": {
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "title": {
            "type": "string",
            "examples": [
              "Example processing server"
            ]
          },
          "attribution": {
            "title": "attribution for the Processes API",
            "type": "string",
            "description": "The `attribution` should be short and intended for presentation to a user, for example, in a corner of a map. Parts of the text can be links to other resources if additional information is needed. The string can include HTML markup."
          },
          "description": {
            "type": "string",
            "examples": [
              "Example server implementing the OGC API - Processes 1.0 Standard"
            ]
          }
        }
      },
      "licenseType": {
        "required": [
          "mode",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(license_type)$",
            "type": "string"
          },
          "modes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/mode"
            }
          },
          "licenseCode": {
            "$ref": "#/components/schemas/shortString"
          },
          "customFields": {
            "$ref": "#/components/schemas/customProperties"
          },
          "issuingCountry": {
            "$ref": "#/components/schemas/country"
          }
        },
        "description": "A category of license to use a certain asset class",
        "x-tm": "TYPE OF DRIVER PERMIT"
      },
      "onboardStay": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(onboard_stay)$",
            "type": "string"
          },
          "duration": {
            "$ref": "#/components/schemas/shortString"
          },
          "classOfUse": {
            "$ref": "#/components/schemas/classOfUse"
          },
          "permission": {
            "type": "boolean"
          },
          "description": {
            "$ref": "#/components/schemas/longString"
          }
        },
        "description": "Permission to board early before the journey or stay on board after the journey.",
        "x-tm": "ONBOARD STAY"
      },
      "processList": {
        "required": [
          "links",
          "processes"
        ],
        "type": "object",
        "properties": {
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "processes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/processSummary"
            }
          }
        }
      },
      "shortString": {
        "maxLength": 75,
        "type": "string",
        "description": "short string, display names (length 0-75)"
      },
      "travelParty": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "entitlements": {
            "type": "object",
            "properties": {
              "cards": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/card"
                }
              },
              "licenses": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/license"
                }
              },
              "cardTypes": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/cardType"
                }
              },
              "licenseTypes": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/licenseType"
                }
              },
              "entitlementsGiven": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/entitlementGiven"
                }
              },
              "commercialProfiles": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/commercialProfile"
                }
              }
            }
          },
          "requirements": {
            "type": "object",
            "properties": {
              "network": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/networkParameter"
                }
              },
              "routing": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/routingParameter"
                }
              },
              "service": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/serviceParameter"
                }
              },
              "purchase": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/purchaseParameter"
                }
              },
              "temporal": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/temporalParameter"
                }
              },
              "equipment": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/equipmentParameter"
                }
              },
              "cancellation": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/cancellationParameter"
                }
              },
              "distribution": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/distributionParameter"
                }
              },
              "organisational": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/organisationalParameter"
                }
              },
              "spotReservations": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/spotReservationParameter"
                }
              }
            }
          }
        },
        "x-tm": "ACCESS RIGHT PARAMETER ASSIGNMENT"
      },
      "tripPattern": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "to": {
              "$ref": "#/components/schemas/placeReference"
            },
            "date": {
              "$ref": "#/components/schemas/date"
            },
            "from": {
              "$ref": "#/components/schemas/placeReference"
            },
            "serviceJourney": {
              "$ref": "#/components/schemas/normalString"
            }
          }
        }
      },
      "userProfile": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelParty"
          },
          {
            "required": [
              "id",
              "type"
            ],
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/normalString"
              },
              "type": {
                "pattern": "^(user_profile)$",
                "type": "string"
              },
              "count": {
                "$ref": "#/components/schemas/shortInt"
              },
              "ageGroup": {
                "type": "string",
                "enum": [
                  "ANYONE",
                  "INFANT",
                  "CHILD",
                  "YOUTH",
                  "ADULT",
                  "SENIOR"
                ]
              },
              "maximumAge": {
                "$ref": "#/components/schemas/shortInt"
              },
              "minimumAge": {
                "$ref": "#/components/schemas/shortInt"
              },
              "localResident": {
                "type": "boolean"
              },
              "maximumHeight": {
                "$ref": "#/components/schemas/shortInt"
              },
              "minimumHeight": {
                "$ref": "#/components/schemas/shortInt"
              },
              "genderLimitation": {
                "type": "boolean"
              },
              "monthDayOnWhichAgeApplies": {
                "$ref": "#/components/schemas/shortInt"
              }
            },
            "x-tm": "USER PROFILE"
          }
        ]
      },
      "binaryTicket": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelDocument"
          },
          {
            "required": [
              "base64",
              "contentType"
            ],
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(binary_ticket)$",
                "type": "string"
              },
              "base64": {
                "$ref": "#/components/schemas/longString"
              },
              "version": {
                "$ref": "#/components/schemas/tinyString"
              },
              "contentType": {
                "type": "string",
                "description": "the media type (IANA)"
              }
            },
            "description": "Binary information, like a image or certificate",
            "x-tm": "lacking"
          }
        ]
      },
      "changeOption": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "pattern": "^(change_option)$",
            "type": "string"
          },
          "changeType": {
            "type": "string",
            "enum": [
              "REMOVE_TRAVELLER",
              "ADD_TRAVELLER",
              "UPDATE_TRAVELLER",
              "ASSIGN_ASSET",
              "REMOVE_ASSET",
              "ASSIGN_ANCILLARY",
              "REMOVE_ANCILLARY",
              "CANCEL_PACKAGE",
              "UPDATE_VALIDITY",
              "UPDATE_TRAVEL_SPECIFICATION",
              "TRANSFER_TICKET"
            ]
          },
          "consequences": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/financialDetail"
            }
          }
        }
      },
      "currencyCode": {
        "maxLength": 3,
        "minLength": 3,
        "pattern": "[a-zA-Z]{3}",
        "type": "string",
        "description": "ISO 4217 currency code"
      },
      "geojsonPoint": {
        "required": [
          "coordinates"
        ],
        "type": "object",
        "properties": {
          "coordinates": {
            "$ref": "#/components/schemas/basePoint"
          }
        },
        "description": "Geojson Coordinate"
      },
      "legReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "normalString": {
        "maxLength": 200,
        "type": "string",
        "description": "default string, full names etc (length 0-200)"
      },
      "packageInput": {
        "required": [
          "packageId",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(package)",
            "type": "string"
          },
          "packageId": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "refundOption": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/uuid"
          },
          "type": {
            "pattern": "^(refund_option)$",
            "type": "string"
          },
          "refundType": {
            "type": "string",
            "enum": [
              "PACKAGE_REFUND",
              "REMOVE_TRAVELLER",
              "REMOVE_ANCILLARY"
            ]
          },
          "consequences": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/financialDetail"
            }
          },
          "packageState": {
            "$ref": "#/components/schemas/packageStatus"
          }
        }
      },
      "accommodation": {
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "pattern": "^(accommodation)$",
            "type": "string"
          },
          "gender": {
            "type": "string",
            "enum": [
              "M",
              "F",
              "X",
              "U"
            ]
          },
          "berthType": {
            "type": "string",
            "enum": [
              "SLEEPER",
              "COUCHETTE",
              "SEAT",
              "OTHER"
            ]
          },
          "classOfUse": {
            "$ref": "#/components/schemas/classOfUse"
          },
          "description": {
            "$ref": "#/components/schemas/longString"
          },
          "nuisanceFacility": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/shortString"
            }
          }
        },
        "description": "A combination of accommodation characteristics available on a service, e.g. \"First Class Couchette with shower and 2 bunks\".",
        "x-tm": "ACCOMODATION"
      },
      "amountOfMoney": {
        "required": [
          "amount"
        ],
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "description": "This should be in the base unit as defined by the ISO 4217 currency code with the appropriate number of decimal places and omitting the currency symbol. e.g. if the price is in US Dollars the price would be 9.95. This is inclusive VAT",
            "format": "float"
          },
          "currencyCode": {
            "$ref": "#/components/schemas/currencyCode"
          },
          "vatCountryCode": {
            "$ref": "#/components/schemas/country"
          },
          "taxPercentageUsed": {
            "$ref": "#/components/schemas/float"
          }
        },
        "description": "an amount of money, usable in fares, fare calculations or in extra costs.",
        "x-tm": [
          {
            "concept": "FARE PRICE"
          }
        ]
      },
      "customerInput": {
        "required": [
          "firstName",
          "lastName"
        ],
        "type": "object",
        "properties": {
          "email": {
            "$ref": "#/components/schemas/normalString"
          },
          "prefix": {
            "$ref": "#/components/schemas/tinyString"
          },
          "address": {
            "$ref": "#/components/schemas/postalAddress"
          },
          "postfix": {
            "$ref": "#/components/schemas/tinyString"
          },
          "initials": {
            "$ref": "#/components/schemas/tinyString"
          },
          "lastName": {
            "$ref": "#/components/schemas/shortString"
          },
          "firstName": {
            "$ref": "#/components/schemas/shortString"
          },
          "middleName": {
            "$ref": "#/components/schemas/shortString"
          },
          "dateOfBirth": {
            "$ref": "#/components/schemas/date"
          },
          "phoneNumber": {
            "$ref": "#/components/schemas/normalString"
          },
          "placeOfBirth": {
            "$ref": "#/components/schemas/shortString"
          },
          "countryOfBirth": {
            "$ref": "#/components/schemas/country"
          },
          "customProperties": {
            "$ref": "#/components/schemas/customProperties"
          }
        },
        "description": "Customer details supplied when creating or replacing a customer. The id is assigned by the Entur Customer Profiles service and must not be set here.",
        "x-tm": "TRANSPORT CUSTOMER"
      },
      "dateTimeOrNow": {
        "type": "string",
        "description": "Either RFC3339 date-time (for example 2019-10-12T07:20:50Z) or the keyword NOW for server-side immediate start.",
        "x-pattern": "^([Nn][Oo][Ww]|[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?(Z|[+-][0-9]{2}:[0-9]{2}))$"
      },
      "lineReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "packageStatus": {
        "type": "string",
        "description": "The life-cycle state of the package (from NEW to ENDED)<br> _OFFERED_ the package is offered<br> _SELECTED_ the package is selected to modify<br> _PENDING_ the purchase of the package is not confirmed (the end user has shown intentions to purchase this offer), must be finalized with the package-confirm operation<br> _CONFIRMED_ a finalized package ('purchased'). Both parties agreed to deliver services in return of payment<br> _CANCELLED_ the package is cancelled after it is purchased. The agreement will specify whether there is a refund, or under which conditions<br> _EXPIRED_ the MP didn't respond on time, the package offer has been expired<br> _STARTED_ the package is started, the <u>trip execution</u> module is needed now to manage the execution of the package<br> _ENDED_ the package has ended, the trip has been executed<br> _RELEASED_ for internal archiving, the package has not been purchased.<br>",
        "enum": [
          "OFFERED",
          "SELECTED",
          "PENDING",
          "CONFIRMED",
          "RELEASED",
          "EXPIRED",
          "CANCELLED",
          "REFUND_CLAIMED",
          "REFUNDED",
          "STARTED",
          "ENDED"
        ],
        "x-tm": "CUSTOMER PURCHASE STATUS"
      },
      "pendingTicket": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelDocument"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(pending_ticket)$",
                "type": "string"
              }
            },
            "description": "A travel document that exists but whose content (e.g. QR code) is not yet available. Typically for future tickets where the start of validity has not yet begun."
          }
        ]
      },
      "postalAddress": {
        "required": [
          "addressLine1",
          "addressLine2"
        ],
        "type": "object",
        "properties": {
          "city": {
            "$ref": "#/components/schemas/shortString"
          },
          "state": {
            "$ref": "#/components/schemas/shortString"
          },
          "street": {
            "$ref": "#/components/schemas/normalString"
          },
          "country": {
            "$ref": "#/components/schemas/country"
          },
          "placeId": {
            "$ref": "#/components/schemas/placeReference"
          },
          "province": {
            "$ref": "#/components/schemas/shortString"
          },
          "postalCode": {
            "$ref": "#/components/schemas/shortString"
          },
          "houseNumber": {
            "$ref": "#/components/schemas/normalInt"
          },
          "addressLine1": {
            "$ref": "#/components/schemas/longString"
          },
          "addressLine2": {
            "$ref": "#/components/schemas/longString"
          },
          "additionalInfo": {
            "$ref": "#/components/schemas/longString"
          },
          "houseNumberAddition": {
            "$ref": "#/components/schemas/tinyString"
          }
        },
        "additionalProperties": false,
        "description": "address parts, where addressLine1 and 2 should contain the complete address, matches Content-Language",
        "x-tm": "POSTAL ADDRESS"
      },
      "zoneReference": {
        "required": [
          "zoneId"
        ],
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/normalString"
          },
          "zoneId": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "ancillaryInput": {
        "allOf": [
          {
            "$ref": "#/components/schemas/legInput"
          },
          {
            "required": [
              "ancillaryId",
              "type"
            ],
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(ancillary)$",
                "type": "string"
              },
              "ancillaryId": {
                "$ref": "#/components/schemas/ancillaryReference"
              },
              "replaceAncillaryId": {
                "$ref": "#/components/schemas/ancillaryReference"
              }
            }
          }
        ]
      },
      "assetReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "collectionInfo": {
        "required": [
          "id",
          "links"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "identifier of the collection used, for example, in URIs",
            "examples": [
              "dem"
            ]
          },
          "crs": {
            "type": "array",
            "description": "the list of coordinate reference systems supported by the API; the first item is the default coordinate reference system",
            "items": {
              "type": "string"
            },
            "default": [
              "http://www.opengis.net/def/crs/OGC/1.3/CRS84"
            ],
            "examples": [
              [
                "http://www.opengis.net/def/crs/OGC/1.3/CRS84",
                "http://www.opengis.net/def/crs/EPSG/0/4326"
              ]
            ]
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "title": {
            "type": "string",
            "description": "human readable title of the collection",
            "examples": [
              "Digital Elevation Model"
            ]
          },
          "extent": {
            "type": "object",
            "externalDocs": {
              "url": "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/refs/heads/master/openapi/schemas/common-geodata/extent-uad.yaml"
            }
          },
          "dataType": {
            "$ref": "#/components/schemas/dataType"
          },
          "itemType": {
            "type": "string",
            "description": "indicator about the type of the items in the collection if the collection has an accessible /collections/{collectionId}/items endpoint",
            "default": "unknown"
          },
          "description": {
            "type": "string",
            "description": "a description of the data in the collection",
            "examples": [
              "A Digital Elevation Model."
            ]
          },
          "maxCellSize": {
            "type": "number",
            "description": "Maximum cell size for usage of the collection"
          },
          "minCellSize": {
            "type": "number",
            "description": "Minimum cell size for usage of the collection"
          },
          "geometryDimension": {
            "maximum": 3,
            "minimum": 0,
            "type": "integer",
            "description": "The geometry dimension of the features shown in this layer (0: points, 1: curves, 2: surfaces, 3: solids), unspecified: mixed or unknown"
          },
          "maxScaleDenominator": {
            "type": "number",
            "description": "Maximum scale denominator for usage of the collection"
          },
          "minScaleDenominator": {
            "type": "number",
            "description": "Minimum scale denominator for usage of the collection"
          }
        }
      },
      "externalTicket": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelDocument"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string"
              }
            },
            "description": "External ticket, can be accessed using the links collection, with rel=ticket"
          }
        ],
        "x-tm": [
          {
            "concept": "TRAVEL DOCUMENT"
          }
        ]
      },
      "geojsonFeature": {
        "required": [
          "id",
          "properties",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "pattern": "^(Feature)$",
            "type": "string"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "geometry": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/geojsonPoint"
              },
              {
                "$ref": "#/components/schemas/geojsonLine"
              },
              {
                "$ref": "#/components/schemas/geojsonPolygon"
              },
              {
                "$ref": "#/components/schemas/geojsonMultiPolygon"
              }
            ]
          },
          "properties": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/asset"
              },
              {
                "$ref": "#/components/schemas/seat"
              }
            ]
          }
        }
      },
      "geojsonPolygon": {
        "required": [
          "coordinates"
        ],
        "type": "object",
        "properties": {
          "coordinates": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/basePoint"
              }
            }
          }
        },
        "description": "geojson representation of a polygon. First and last point must be equal. See also https://geojson.org/geojson-spec.html#polygon and example https://geojson.org/geojson-spec.html#id4. The order should be lon, lat [[[lon1, lat1], [lon2,lat2], [lon3,lat3], [lon1,lat1]]], the first point should match the last point."
      },
      "offerReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "placeReference": {
        "required": [
          "placeId"
        ],
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/normalString"
          },
          "placeId": {
            "maxLength": 200,
            "pattern": "^(GPS:|NSR:StopPlace:|P:)",
            "type": "string",
            "description": "this string references to information that can be found in the `data sources`. Enlist all prefixes (=rel) from the /collections/datasources/items that apply to a place/location. Default it matches already with 'GPS' (no entry required in the datasources). In case of a custom place (like home address), you can use the 'P:' prefix and add the address to the **placeDefinitions** list of the request.",
            "x-example-format": "^(GPS:|GBFS:stations:)"
          }
        }
      },
      "processSummary": {
        "allOf": [
          {
            "$ref": "#/components/schemas/descriptionType"
          },
          {
            "required": [
              "id",
              "version"
            ],
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "links": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/link"
                }
              },
              "version": {
                "type": "string"
              },
              "jobControlOptions": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/jobControlOptions"
                }
              }
            }
          }
        ]
      },
      "travelDocument": {
        "required": [
          "endvalidity",
          "startvalidity",
          "travelDocumentType"
        ],
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/travelDocumentStatus"
          },
          "endvalidity": {
            "$ref": "#/components/schemas/dateTime"
          },
          "startvalidity": {
            "$ref": "#/components/schemas/dateTime"
          },
          "travelDocumentType": {
            "$ref": "#/components/schemas/typeOfTravelDocument"
          }
        },
        "discriminator": {
          "propertyName": "travelDocumentType",
          "mapping": {
            "LINK": "#/components/schemas/externalTicket",
            "QRCODE": "#/components/schemas/binaryTicket",
            "BARCODE": "#/components/schemas/binaryTicket",
            "AZTECCODE": "#/components/schemas/binaryTicket"
          }
        },
        "x-tm": "TRAVEL DOCUMENT"
      },
      "descriptionType": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "metadata": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/metadata"
            }
          },
          "description": {
            "type": "string"
          }
        }
      },
      "financialDetail": {
        "type": "object",
        "properties": {
          "leg": {
            "$ref": "#/components/schemas/normalString"
          },
          "offer": {
            "$ref": "#/components/schemas/normalString"
          },
          "amount": {
            "$ref": "#/components/schemas/amountOfMoney"
          },
          "package": {
            "$ref": "#/components/schemas/normalString"
          },
          "category": {
            "$ref": "#/components/schemas/paymentCategory"
          },
          "customFields": {
            "$ref": "#/components/schemas/customProperties"
          },
          "expirationDate": {
            "$ref": "#/components/schemas/dateTime"
          }
        }
      },
      "offerCollection": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(OfferCollection)$",
            "type": "string"
          },
          "links": {
            "type": "array",
            "description": "actions that can be performed on this package, but also alternative (rel=alternative+1, alternative+2) offers or references to other resources In case it is an alternative, specify clearly in the description what the financial consequences are.",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "offers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/offer"
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          }
        }
      },
      "paymentCategory": {
        "type": "string",
        "description": "The category of the journalled item <br> _ALL_ - for filtering purposes only<br>\n<h2>TO initiated payments </h2> To request these payments, use the notifications, send a notification containing the payment confirmation.<br> _DEPOSIT_ - a deposit, to refund, use _REFUND_<br> _DAMAGE_ - extra costs that must be paid by the MP due to damage to the asset or ancillaries<br> _LOSS_ - extra costs that must be paid by the MP due to loss of asset or ancillaries<br> _STOLEN_ - the asset (and ancillaries) are stolen and should be paid for<br> _EXTRA_USAGE_ - the asset is paid for in advance, additional usage must be paid for (can also be a refund when used less! The amount should be negative in that case)<br> _FINE_ - a fine that arrived later on<br> _OTHER_ASSET_USED_ - additional costs for a replaced asset<br> _FARE_ - the normal costs of the purchased and executed leg(s)<br> _OTHER_ - unspecified<br>\n_CREDIT_ - generic CREDIT, e.g. for kick-backs <br> _VOUCHER_ - part of the fare that is covered by a voucher (no need to pay)<br> _REFUND_ - refund of the deposit or upfront paid fare<br> _REBATE_ - (partial) rebate of the fare<br> _REIMBURSEMENT_ - reimbursement of the fare<br>",
        "enum": [
          "ALL",
          "DAMAGE",
          "LOSS",
          "STOLEN",
          "EXTRA_USAGE",
          "REFUND",
          "REBATE",
          "REIMBURSEMENT",
          "FINE",
          "OTHER_ASSET_USED",
          "CREDIT",
          "VOUCHER",
          "DEPOSIT",
          "OTHER",
          "FARE",
          "FEE"
        ]
      },
      "travellingAsset": {
        "required": [
          "id",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/normalString"
          },
          "type": {
            "pattern": "^(asset)$",
            "type": "string"
          }
        }
      },
      "customProperties": {
        "type": "object",
        "additionalProperties": {
          "maxLength": 1000,
          "maxProperties": 20
        },
        "description": "dictionary for extra fields (bilatural agreements)"
      },
      "entitlementGiven": {
        "required": [
          "entitlementType",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "pattern": "^(entitlement)$",
            "type": "string"
          },
          "entitlementType": {
            "$ref": "#/components/schemas/normalString"
          }
        },
        "x-tm": "ENTITLEMENT GIVEN"
      },
      "networkParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "line": {
            "$ref": "#/components/schemas/normalString"
          },
          "type": {
            "pattern": "^(network)$",
            "type": "string"
          },
          "zones": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/zoneReference"
            }
          },
          "location": {
            "$ref": "#/components/schemas/placeReference"
          }
        },
        "x-tm": "NETWORK VALIDITY PARAMETERS"
      },
      "packageReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "placeDefinitions": {
        "type": "object",
        "properties": {
          "placeDefinitions": {
            "maxItems": 3,
            "minItems": 0,
            "type": "array",
            "description": "Places that are not specified in an external data source (like a home address)",
            "items": {
              "$ref": "#/components/schemas/postalAddress"
            }
          }
        }
      },
      "productReference": {
        "required": [
          "name",
          "productId"
        ],
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/normalString"
          },
          "productId": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "routingParameter": {
        "required": [
          "journeyPattern",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(routing)$",
            "type": "string"
          },
          "journeyPattern": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/normalString"
            }
          }
        },
        "x-tm": "ROUTING VALIDITY PARAMETERS"
      },
      "searchOfferInput": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(search_offer)",
            "type": "string"
          },
          "entur": {
            "$ref": "#/components/schemas/enturSearchOfferInput"
          },
          "pattern": {
            "$ref": "#/components/schemas/tripPattern"
          },
          "profiles": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/userProfile"
            }
          },
          "travellers": {
            "maxItems": 10,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/individualTraveller"
            }
          },
          "specification": {
            "allOf": [
              {
                "$ref": "#/components/schemas/travelSpecification"
              },
              {
                "$ref": "#/components/schemas/placeDefinitions"
              }
            ]
          },
          "travellingAssets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/travellingAsset"
            }
          },
          "packageToExchange": {
            "$ref": "#/components/schemas/normalString"
          }
        },
        "description": "A package planning request, resulting in package options",
        "anyOf": [
          {
            "required": [
              "travellers"
            ]
          },
          {
            "required": [
              "profiles"
            ]
          }
        ]
      },
      "serviceParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(service)$",
            "type": "string"
          },
          "asset": {
            "$ref": "#/components/schemas/normalString"
          },
          "class": {
            "$ref": "#/components/schemas/classOfUse"
          },
          "product": {
            "$ref": "#/components/schemas/productReference"
          },
          "userNeeds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/userNeedReference"
            }
          },
          "onboardStay": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/onboardStay"
            }
          },
          "accommodations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/accommodation"
            }
          },
          "serviceJourney": {
            "$ref": "#/components/schemas/normalString"
          }
        },
        "x-tm": "SERVICE VALIDITY PARAMETERS"
      },
      "addTravellerInput": {
        "required": [
          "packageId",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(traveller)$",
            "type": "string"
          },
          "packageId": {
            "$ref": "#/components/schemas/normalString"
          },
          "userProfile": {
            "$ref": "#/components/schemas/userProfile"
          },
          "travellingAsset": {
            "$ref": "#/components/schemas/travellingAsset"
          },
          "individualTraveller": {
            "$ref": "#/components/schemas/individualTraveller"
          }
        }
      },
      "commercialProfile": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "code": {
            "$ref": "#/components/schemas/shortString"
          },
          "name": {
            "$ref": "#/components/schemas/normalString"
          },
          "type": {
            "pattern": "^(commercial_profile)$",
            "type": "string"
          }
        },
        "x-tm": "COMMERCIAL PROFILE"
      },
      "customerReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "externalReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "jobControlOptions": {
        "type": "string",
        "enum": [
          "sync-execute",
          "async-execute",
          "dismiss"
        ]
      },
      "packageCollection": {
        "required": [
          "packages",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "PackageCollection"
            ]
          },
          "links": {
            "type": "array",
            "description": "Actions that can be performed on this collection.",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "packages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/package"
            }
          },
          "numberMatched": {
            "type": "integer",
            "description": "Total number of packages available (for pagination)"
          },
          "numberReturned": {
            "type": "integer",
            "description": "Number of packages in this response"
          }
        }
      },
      "purchaseParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(purchase)$",
            "type": "string"
          },
          "requiredLicenseTypes": {
            "maxItems": 5,
            "type": "array",
            "description": "ONE of these licenses is required to operate the asset",
            "items": {
              "$ref": "#/components/schemas/licenseType"
            }
          },
          "maximumPeriodBeforeDeparture": {
            "$ref": "#/components/schemas/longInt"
          }
        },
        "description": "specify required information to complete a purchase",
        "x-tm": [
          {
            "concept": "PURCHASE WINDOW"
          },
          {
            "maximumPeriodBeforeDeparture": "MaximumPeriodBeforeDeparture"
          },
          {
            "requiredLicenseTypes": "ENTITLEMENT REQUIRED"
          }
        ]
      },
      "refundOptionInput": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(claim_refund_option|confirm_refund_option)$",
            "type": "string"
          },
          "optionId": {
            "$ref": "#/components/schemas/uuid"
          }
        }
      },
      "selectOffersInput": {
        "required": [
          "offerIds",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(select_offers)",
            "type": "string"
          },
          "contact": {
            "$ref": "#/components/schemas/customerRef"
          },
          "customer": {
            "$ref": "#/components/schemas/customerRef"
          },
          "offerIds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/normalString"
            }
          },
          "externalReference": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "temporalParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(temporal)$",
            "type": "string"
          },
          "dayType": {
            "$ref": "#/components/schemas/day"
          },
          "endTime": {
            "$ref": "#/components/schemas/dateTime"
          },
          "duration": {
            "$ref": "#/components/schemas/normalInt"
          },
          "startTime": {
            "$ref": "#/components/schemas/dateTime"
          }
        },
        "x-tm": "TEMPORAL VALIDITY PARAMETERS"
      },
      "userNeedReference": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/normalString"
          },
          "name": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "ancillaryReference": {
        "required": [
          "ancillaryId"
        ],
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/normalString"
          },
          "ancillaryId": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "customerCollection": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "CustomerCollection"
            ]
          },
          "links": {
            "type": "array",
            "description": "actions that can be performed on this package, but also alternative (rel=alternative+1, alternative+2) offers or references to other resources In case it is an alternative, specify clearly in the description what the financial consequences are.",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "customers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/customer"
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          }
        }
      },
      "equipmentParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/equipmentReference"
          },
          "name": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "pattern": "^(equipment)$",
            "type": "string"
          },
          "image": {
            "$ref": "#/components/schemas/url"
          },
          "infoLink": {
            "$ref": "#/components/schemas/url"
          },
          "description": {
            "$ref": "#/components/schemas/longString"
          }
        },
        "x-tm": "EQUIPMENT VALIDITY PARAMETERS"
      },
      "equipmentReference": {
        "required": [
          "equipmentId"
        ],
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/normalString"
          },
          "equipmentId": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "travellerReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "ancillaryCollection": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(AncillaryCollection)$",
            "type": "string"
          },
          "links": {
            "type": "array",
            "description": "actions that can be performed on this package, but also alternative (rel=alternative+1, alternative+2) offers or references to other resources In case it is an alternative, specify clearly in the description what the financial consequences are.",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "ancillaries": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/normalString"
                },
                "links": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/link"
                  }
                },
                "properties": {
                  "$ref": "#/components/schemas/ancillary"
                }
              }
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          }
        }
      },
      "geojsonMultiPolygon": {
        "required": [
          "coordinates"
        ],
        "type": "object",
        "properties": {
          "coordinates": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/basePoint"
                }
              }
            }
          }
        },
        "description": "geojson representation of a multi polygon. See also https://geojson.org/geojson-spec.html#multipolygon"
      },
      "individualTraveller": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelParty"
          },
          {
            "required": [
              "id",
              "type"
            ],
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/normalString"
              },
              "age": {
                "$ref": "#/components/schemas/shortInt"
              },
              "type": {
                "pattern": "^(individual_traveller)$",
                "type": "string"
              },
              "gender": {
                "type": "string",
                "enum": [
                  "M",
                  "F",
                  "X",
                  "U"
                ]
              },
              "fullName": {
                "$ref": "#/components/schemas/normalString"
              },
              "isValidated": {
                "type": "boolean",
                "description": "Whether this traveler's identity and properties have been verified by the MaaS provider"
              },
              "customFields": {
                "$ref": "#/components/schemas/customProperties"
              },
              "customerReference": {
                "$ref": "#/components/schemas/normalString"
              }
            },
            "description": "A generic description of a traveler, not including any identifying information",
            "x-tm": "INDIVIDUAL TRAVELLER"
          }
        ]
      },
      "purchaseOffersInput": {
        "allOf": [
          {
            "$ref": "#/components/schemas/selectOffersInput"
          },
          {
            "required": [
              "type"
            ],
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(purchase_offers)$",
                "type": "string"
              }
            }
          }
        ]
      },
      "travelSpecification": {
        "type": "object",
        "properties": {
          "to": {
            "$ref": "#/components/schemas/placeReference"
          },
          "via": {
            "maxItems": 3,
            "minItems": 0,
            "type": "array",
            "description": "use an ID contained in the **placeDefinitions** field, or from an external source, when using coordinates, please use the prefix 'gps:'",
            "items": {
              "$ref": "#/components/schemas/placeReference"
            }
          },
          "from": {
            "$ref": "#/components/schemas/placeReference"
          },
          "endTime": {
            "$ref": "#/components/schemas/dateTime"
          },
          "startTime": {
            "$ref": "#/components/schemas/dateTime"
          }
        },
        "x-tm": "TRAVEL SPECIFICATION"
      },
      "removeTravellerInput": {
        "required": [
          "packageId",
          "travellerId",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(traveller)$",
            "type": "string"
          },
          "packageId": {
            "$ref": "#/components/schemas/normalString"
          },
          "travellerId": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "travelDocumentStatus": {
        "type": "string",
        "description": "The lifecycle status of a travel document.<br> _PENDING_ the document is being processed or awaiting distribution pickup<br> _ACTIVE_ the document is ready for use<br> _FAILED_ the document distribution failed<br> _EXPIRED_ the document has expired<br> _CANCELLED_ the document has been cancelled<br>",
        "enum": [
          "PENDING",
          "ACTIVE",
          "FAILED",
          "EXPIRED",
          "CANCELLED"
        ]
      },
      "typeOfTravelDocument": {
        "type": "string",
        "description": "how this type is implemented?<br>",
        "enum": [
          "LINK",
          "BARCODE",
          "QRCODE",
          "AZTECCODE",
          "AXA_EKEY_OTP",
          "BLUETOOTH",
          "NFC",
          "PHYSICAL_KEY",
          "EXTERNAL_CARD",
          "OTHER"
        ],
        "x-tm": [
          {
            "concept": "TYPE OF TRAVEL DOCUMENT"
          }
        ]
      },
      "updateTravellerInput": {
        "required": [
          "packageId",
          "travellerId",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(traveller)$",
            "type": "string"
          },
          "packageId": {
            "$ref": "#/components/schemas/normalString"
          },
          "travellerId": {
            "$ref": "#/components/schemas/normalString"
          },
          "userProfile": {
            "$ref": "#/components/schemas/userProfile"
          },
          "travellingAsset": {
            "$ref": "#/components/schemas/travellingAsset"
          },
          "individualTraveller": {
            "$ref": "#/components/schemas/individualTraveller"
          }
        }
      },
      "userProfileReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "cancellationParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(cancel)$",
            "type": "string"
          },
          "cancellationFee": {
            "$ref": "#/components/schemas/amountOfMoney"
          },
          "cancellationAllowed": {
            "type": "boolean",
            "description": "is it possible to cancel this package?"
          },
          "cancellationFeePercentage": {
            "maximum": 100,
            "minimum": 0,
            "type": "number",
            "description": "percentage of the offered price you have to pay when you cancel this purchased package"
          }
        },
        "description": "conditions regarding cancellation of a purchased package",
        "x-tm": [
          {
            "concept": "CANCELLING"
          },
          {
            "cancellationFee": "lacking"
          },
          {
            "cancellationAllowed": "cancellationAllowed"
          },
          {
            "cancellationFeePercentage": "lacking"
          }
        ]
      },
      "distributionParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(distribution)$",
            "type": "string"
          },
          "fulfilmentMethod": {
            "$ref": "#/components/schemas/normalString"
          },
          "distributionChannel": {
            "$ref": "#/components/schemas/normalString"
          }
        },
        "x-tm": "DISTRIBUTION VALIDITY PARAMETERS"
      },
      "enturSearchOfferInput": {
        "type": "object",
        "properties": {
          "recommendationControl": {
            "$ref": "#/components/schemas/enturRecommendationControl"
          }
        },
        "description": "Entur-specific OMSA extensions for search-offers input."
      },
      "extendExpiryTimeInput": {
        "allOf": [
          {
            "$ref": "#/components/schemas/packageInput"
          },
          {
            "required": [
              "type"
            ],
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(extend_expiry_time)$",
                "type": "string"
              },
              "extensionReason": {
                "pattern": "^(purchase_pending|payment_pending|other)$",
                "type": "string",
                "description": "in case operation is EXTEND_EXPIRY_TIME, the reason for extension must be supplied here.<br> _PURCHASE_PENDING_ - The internal purchase process on the MP side is not yet finished<br> _PAYMENT_PENDING_ - The customer is in the payment process<br> _OTHER_ - unspecified"
              }
            }
          }
        ]
      },
      "organisationReference": {
        "required": [
          "organisationId"
        ],
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/normalString"
          },
          "organisationId": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "changeOptionCollection": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(ChangeOptionCollection)$",
            "type": "string"
          },
          "links": {
            "type": "array",
            "description": "actions that can be performed on this collection",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "options": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/normalString"
                },
                "links": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/link"
                  }
                },
                "properties": {
                  "$ref": "#/components/schemas/changeOption"
                }
              }
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          }
        }
      },
      "refundOptionCollection": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(RefundOptionCollection)$",
            "type": "string"
          },
          "links": {
            "type": "array",
            "description": "actions that can be performed on this package, but also alternative (rel=alternative+1, alternative+2) offers or references to other resources In case it is an alternative, specify clearly in the description what the financial consequences are.",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "options": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/normalString"
                },
                "links": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/link"
                  }
                },
                "properties": {
                  "$ref": "#/components/schemas/refundOption"
                }
              }
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          }
        }
      },
      "enturRecommendationType": {
        "type": "string",
        "description": "Entur Offers recommendation category.",
        "enum": [
          "FLEXIBLE",
          "SEMI_FLEXIBLE",
          "NON_FLEXIBLE",
          "CHEAPEST"
        ]
      },
      "organisationalParameter": {
        "required": [
          "id",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "name": {
            "$ref": "#/components/schemas/normalString"
          },
          "type": {
            "pattern": "^(organisational)$",
            "type": "string"
          },
          "legalName": {
            "$ref": "#/components/schemas/normalString"
          }
        },
        "x-tm": "ORGANISATIONAL VALIDITY PARAMETERS"
      },
      "serviceJourneyReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "spotReservationParameter": {
        "required": [
          "spot",
          "spotType",
          "type"
        ],
        "type": "object",
        "properties": {
          "deck": {
            "$ref": "#/components/schemas/normalString"
          },
          "fuel": {
            "type": "string"
          },
          "mode": {
            "$ref": "#/components/schemas/mode"
          },
          "spot": {
            "description": "For LUGGAGE_SPOT and VEHICLE_SPOT, supported values are: HANDBAG, HAND_LUGGAGE, SMALL_SUITCASE, SUITCASE, TRUNK, OVERSIZE_ITEM, BICYCLE, SPORTING_EQUIPMENT, SKIS, MUSICAL_INSTRUMENT, PUSH_CHAIR, MOTORIZED_WHEELCHAIR, LARGE_MOTORIZED_WHEELCHAIR, WHEELCHAIR, SMALL_ANIMAL, ANIMAL, GAME, MOTORCYCLE, OTHER, GUIDE_DOG. Unknown values are ignored. Use VEHICLE_SPOT for vehicles transported as cargo (e.g. motorcycle on a ferry). For PASSENGER_SPOT, the value is an operator-specific seat identifier and is not used for requirement mapping.\n",
            "allOf": [
              {
                "$ref": "#/components/schemas/normalString"
              }
            ]
          },
          "type": {
            "pattern": "^(spot_reservation)$",
            "type": "string"
          },
          "space": {
            "$ref": "#/components/schemas/normalString"
          },
          "width": {
            "type": "number"
          },
          "height": {
            "type": "number"
          },
          "length": {
            "type": "number"
          },
          "weight": {
            "type": "string"
          },
          "spotType": {
            "type": "string",
            "enum": [
              "VEHICLE_SPOT",
              "PASSENGER_SPOT",
              "LUGGAGE_SPOT"
            ]
          }
        },
        "x-tm": "SEATING VALIDITY PARAMETERS"
      },
      "travelDocumentCollection": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(TravelDocumentCollection)$",
            "type": "string"
          },
          "links": {
            "type": "array",
            "description": "actions that can be performed on this package, but also alternative (rel=alternative+1, alternative+2) offers or references to other resources In case it is an alternative, specify clearly in the description what the financial consequences are.",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          },
          "travelDocuments": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/normalString"
                },
                "links": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/link"
                  }
                },
                "properties": {
                  "discriminator": {
                    "propertyName": "type"
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/externalTicket"
                    },
                    {
                      "$ref": "#/components/schemas/binaryTicket"
                    },
                    {
                      "$ref": "#/components/schemas/pendingTicket"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "enturRecommendationControl": {
        "type": "object",
        "properties": {
          "types": {
            "minItems": 1,
            "type": "array",
            "description": "Entur recommendation categories to request when `enabled` is true.\nIf omitted, OMSA defaults to `[\"CHEAPEST\", \"NON_FLEXIBLE\", \"SEMI_FLEXIBLE\", \"FLEXIBLE\"]`.\n",
            "items": {
              "$ref": "#/components/schemas/enturRecommendationType"
            }
          },
          "enabled": {
            "type": "boolean",
            "description": "Enable recommendation-driven bundling based on Offers `recommendations` and `offersToBuy`.",
            "default": false
          },
          "stripDuplicates": {
            "type": "boolean",
            "description": "Deduplicate recommendation-driven plans by provider offer + traveller groups + ancillary selections + quantity.\n",
            "default": false
          }
        },
        "description": "Entur recommendation behavior control for Offers.\nIf omitted, OMSA defaults to raw mode (recommendation-driven bundling disabled).\n"
      },
      "updateTravelDocumentValidityInput": {
        "allOf": [
          {
            "$ref": "#/components/schemas/packageInput"
          },
          {
            "required": [
              "newStartTime",
              "travelDocumentId",
              "type"
            ],
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(update_travel_document_validity)$",
                "type": "string"
              },
              "newStartTime": {
                "$ref": "#/components/schemas/dateTimeOrNow"
              },
              "travelDocumentId": {
                "type": "string",
                "description": "The id of the travel document to update"
              }
            }
          }
        ]
      },
      "updateTravelDocumentValidityResponse": {
        "required": [
          "newTravelDocumentId",
          "previousTravelDocumentId"
        ],
        "type": "object",
        "properties": {
          "newTravelDocumentId": {
            "type": "string",
            "description": "The new travel document id with updated validity"
          },
          "previousTravelDocumentId": {
            "type": "string",
            "description": "The travel document id that was replaced"
          }
        }
      }
    },
    "responses": {
      "errorResponse": {
        "description": "Bad request.",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/error"
            }
          }
        }
      },
      "offerResponse": {
        "description": "a geojson response",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/geojson"
            }
          }
        }
      },
      "geojsonResponse": {
        "description": "a geojson response",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/geojson"
            }
          }
        }
      },
      "packageResponse": {
        "description": "a geojson response, containing the package details in the main properties and the legs are represented in the features",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          },
          "Entur-Order-Version": {
            "$ref": "#/components/headers/enturOrderVersion"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/package"
            }
          }
        }
      },
      "customerResponse": {
        "description": "a customer response",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/customer"
            }
          }
        }
      },
      "dataSourceResponse": {
        "description": "a list of datasources",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/link"
              }
            }
          }
        }
      },
      "ancillariesResponse": {
        "description": "a ancillaries response",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/ancillaryCollection"
              }
            }
          }
        }
      },
      "landingPageResponse": {
        "description": "The reponse containing a landing page",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "text/html": {
            "schema": {
              "type": "string"
            }
          },
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/landingPage"
            }
          }
        }
      },
      "searchOfferResponse": {
        "description": "a search offer response",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/offerCollection"
            }
          }
        }
      },
      "changeOptionsResponse": {
        "description": "a response with change options",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/changeOptionCollection"
            }
          }
        }
      },
      "refundOptionsResponse": {
        "description": "a response with refund options",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/refundOptionCollection"
            }
          }
        }
      },
      "travelDocumentResponse": {
        "description": "a response to obtain travel document (references)",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/travelDocumentCollection"
            }
          }
        }
      },
      "packageCollectionResponse": {
        "description": "A list of packages",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/packageCollection"
            }
          }
        }
      },
      "customerCollectionResponse": {
        "description": "a customer collection response",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/customerCollection"
            }
          }
        }
      },
      "conformanceDeclarationResponse": {
        "description": "The URIs of all conformance classes supported by the server.\n\nTo support \"generic\" clients that want to access multiple\nOGC API Features implementations - and not \"just\" a specific\nAPI / server, the server declares the conformance\nclasses it implements and conforms to.",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "text/html": {
            "schema": {
              "type": "string"
            }
          },
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/confClasses"
            }
          }
        }
      }
    },
    "parameters": {
      "f": {
        "name": "f",
        "in": "query",
        "description": "The optional f parameter indicates the output format that the server shall provide as part of the response document.  The default format is JSON.",
        "required": false,
        "style": "form",
        "explode": false,
        "schema": {
          "type": "string",
          "default": "json",
          "enum": [
            "json",
            "html"
          ]
        }
      },
      "bbox": {
        "name": "bbox",
        "in": "query",
        "description": "Only features that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (height or depth): * Lower left corner, coordinate axis 1 * Lower left corner, coordinate axis 2 * Minimum value, coordinate axis 3 (optional) * Upper right corner, coordinate axis 1 * Upper right corner, coordinate axis 2 * Maximum value, coordinate axis 3 (optional)\nIf the value consists of four numbers, the coordinate reference system is WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\nunless a different coordinate reference system is specified in the parameter `bbox-crs`.\nIf the value consists of six numbers, the coordinate reference system is WGS 84 longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h) unless a different coordinate reference system is specified in the parameter `bbox-crs`.\nThe query parameter `bbox-crs` is specified in OGC API - Features - Part 2: Coordinate Reference Systems by Reference.\nFor WGS 84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude.\nHowever, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge).\nIf the vertical axis is included, the third and the sixth number are the bottom and the top of the 3-dimensional bounding box.\nIf a feature has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries.",
        "required": false,
        "style": "form",
        "explode": false,
        "schema": {
          "type": "array",
          "items": {
            "type": "number"
          }
        }
      },
      "legId": {
        "name": "legId",
        "in": "query",
        "description": "leg identifier",
        "required": true,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "limit": {
        "name": "limit",
        "in": "query",
        "description": "The optional limit parameter limits the number of items that are presented in the response document.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted. Minimum = 1. Maximum = 10000. Default = 100.",
        "required": false,
        "style": "form",
        "explode": false,
        "schema": {
          "maximum": 10000,
          "minimum": 1,
          "type": "integer",
          "default": 100
        }
      },
      "offset": {
        "name": "offset",
        "in": "query",
        "description": "The optional offset parameter representing the starting index of the returned collection.\nOnly items are counted that are on the first level of the collection in the response document.\nNested objects contained within the explicitly requested items shall not be counted.\nDefault = 0.",
        "required": false,
        "style": "form",
        "explode": false,
        "schema": {
          "minimum": 0,
          "type": "integer",
          "default": 0
        }
      },
      "packageId": {
        "name": "packageId",
        "in": "query",
        "description": "the identifier of a package",
        "required": true,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "string"
        }
      },
      "productId": {
        "name": "productId",
        "in": "query",
        "description": "Product identifier",
        "required": true,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "customerId": {
        "name": "customerId",
        "in": "path",
        "description": "customer identifier",
        "required": true,
        "style": "simple",
        "explode": false,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "authorization": {
        "name": "authorization",
        "in": "header",
        "description": "Header field, JWT must be supplied",
        "required": true,
        "style": "simple",
        "explode": false,
        "schema": {
          "type": "string"
        }
      },
      "optionalLegId": {
        "name": "legId",
        "in": "query",
        "description": "leg identifier",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "acceptLanguage": {
        "name": "Accept-Language",
        "in": "header",
        "required": true,
        "style": "simple",
        "explode": false,
        "schema": {
          "$ref": "#/components/schemas/shortString"
        },
        "x-externalDocs": {
          "description": "A comma-separated list of BCP 47 (RFC 5646) language tags and optional weights as described in IETF RFC7231 section 5.3.5. A list of the languages/localizations the user would like to see the results in. For user privacy and ease of use on the TO side, this list should be kept as short as possible"
        }
      },
      "optionalPackageId": {
        "name": "packageId",
        "in": "query",
        "description": "the identifier of a package (maps to Orders id)",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "string"
        }
      },
      "optionalProductId": {
        "name": "productId",
        "in": "query",
        "description": "Product identifier",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "optionalCustomerId": {
        "name": "customerId",
        "in": "query",
        "description": "optional customer identifier filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "optionalPackagePos": {
        "name": "pos",
        "in": "query",
        "description": "optional package POS filter, passed through to Orders pos filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalAncillaryId": {
        "name": "ancillaryId",
        "in": "query",
        "description": "ancillary identifier",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "optionalTravellerId": {
        "name": "travellerId",
        "in": "query",
        "description": "traveller identifier",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "optionalPackageLegId": {
        "name": "legId",
        "in": "query",
        "description": "optional package leg identifier filter, mapped to Orders orderLineId",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalCustomerEmail": {
        "name": "email",
        "in": "query",
        "description": "optional email filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "optionalPackageSortBy": {
        "name": "sortBy",
        "in": "query",
        "description": "optional package sort direction (ASC or DESC), passed through to Orders sortBy",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "string"
        }
      },
      "EnturPOSHeaderRequired": {
        "name": "Entur-POS",
        "in": "header",
        "description": "Point-of-sale identifier used by downstream sales and ticket distribution services.",
        "required": true,
        "style": "simple",
        "explode": false,
        "schema": {
          "type": "string"
        }
      },
      "optionalPackageBalance": {
        "name": "balance",
        "in": "query",
        "description": "optional package balance filter, passed through to Orders balance filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageEndTime": {
        "name": "endTime",
        "in": "query",
        "description": "optional package end-time filter, passed through to Orders endTime filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageOrderBy": {
        "name": "orderBy",
        "in": "query",
        "description": "optional package orderBy value, passed through to Orders orderBy",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "string"
        }
      },
      "optionalPackageVersion": {
        "name": "version",
        "in": "query",
        "description": "optional package version filter, passed through to Orders version filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageCurrency": {
        "name": "currency",
        "in": "query",
        "description": "optional package currency filter, passed through to Orders currency filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalCustomerLastName": {
        "name": "lastName",
        "in": "query",
        "description": "optional last name filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/shortString"
        }
      },
      "optionalPackageCreatedAt": {
        "name": "createdAt",
        "in": "query",
        "description": "optional package created-at filter, passed through to Orders createdAt filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageProductId": {
        "name": "productId",
        "in": "query",
        "description": "optional package product ID filter, mapped to Orders fareProductId",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageStartTime": {
        "name": "startTime",
        "in": "query",
        "description": "optional package start-time filter, passed through to Orders startTime filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalCustomerFirstName": {
        "name": "firstName",
        "in": "query",
        "description": "optional first name filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/shortString"
        }
      },
      "optionalPackageTotalAmount": {
        "name": "totalAmount",
        "in": "query",
        "description": "optional package total amount filter, passed through to Orders totalAmount filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "EnturLogLevelHeaderOptional": {
        "name": "Entur-Log-Level",
        "in": "header",
        "description": "Optional request-scoped logging level. OMSA forwards the effective value to downstream APIs that support request-level logging.",
        "required": false,
        "style": "simple",
        "explode": false,
        "schema": {
          "type": "string",
          "enum": [
            "TRACE",
            "DEBUG",
            "INFO",
            "WARN",
            "ERROR"
          ]
        }
      },
      "optionalCustomerPhoneNumber": {
        "name": "phoneNumber",
        "in": "query",
        "description": "optional phone number filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "optionalPackageReservationId": {
        "name": "reservationId",
        "in": "query",
        "description": "optional package reservation ID filter, passed through to Orders reservationId filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageToStopPlaceId": {
        "name": "toStopPlaceId",
        "in": "query",
        "description": "optional package to stop place ID filter, passed through to Orders toStopPlaceId filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "EnturClientNameHeaderOptional": {
        "name": "Entur-Client-Name",
        "in": "header",
        "description": "Encouraged for tracing and routing, but not required.",
        "required": false,
        "style": "simple",
        "explode": false,
        "schema": {
          "type": "string"
        }
      },
      "optionalPackageOrganisationId": {
        "name": "organisationId",
        "in": "query",
        "description": "optional package organisation ID filter, passed through to Orders organisationId filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageTotalTaxAmount": {
        "name": "totalTaxAmount",
        "in": "query",
        "description": "optional package total tax amount filter, passed through to Orders totalTaxAmount filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageFromStopPlaceId": {
        "name": "fromStopPlaceId",
        "in": "query",
        "description": "optional package from stop place ID filter, passed through to Orders fromStopPlaceId filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageLastConfirmedAt": {
        "name": "lastConfirmedAt",
        "in": "query",
        "description": "optional package last-confirmed-at filter, passed through to Orders lastConfirmedAt filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageOwnerCustomerId": {
        "name": "customerId",
        "in": "query",
        "description": "optional owner customer identifier filter (maps to Orders createdBy, exact match only)",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "optionalPackageServiceJourneyId": {
        "name": "serviceJourneyId",
        "in": "query",
        "description": "optional package service journey ID filter, passed through to Orders serviceJourneyId filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageContactCustomerId": {
        "name": "contactCustomerId",
        "in": "query",
        "description": "optional contact customer identifier filter (maps to Orders contact, exact match only)",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "optionalPackageExternalReference": {
        "name": "externalReference",
        "in": "query",
        "description": "optional package external reference filter, passed through to Orders externalReference filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageFareProductVersion": {
        "name": "fareProductVersion",
        "in": "query",
        "description": "optional package fare product version filter, passed through to Orders fareProductVersion filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageLegExternalReference": {
        "name": "legExternalReference",
        "in": "query",
        "description": "optional package leg external reference filter, mapped to Orders orderLineExternalReference",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageDatedServiceJourneyId": {
        "name": "datedServiceJourneyId",
        "in": "query",
        "description": "optional package dated service journey ID filter, passed through to Orders datedServiceJourneyId filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "optionalPackageDistributionChannelId": {
        "name": "distributionChannelId",
        "in": "query",
        "description": "optional package distribution channel ID filter, passed through to Orders distributionChannelId filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "EnturDistributionChannelHeaderRequired": {
        "name": "Entur-Distribution-Channel",
        "in": "header",
        "description": "Distribution channel identifier used by downstream sales and ticket distribution services.",
        "required": true,
        "style": "simple",
        "explode": false,
        "schema": {
          "type": "string"
        }
      },
      "optionalPackageOriginalDatedServiceJourneyId": {
        "name": "originalDatedServiceJourneyId",
        "in": "query",
        "description": "optional package original dated service journey ID filter, passed through to Orders originalDatedServiceJourneyId filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "ET-Client-Name": {
        "in": "header",
        "name": "ET-Client-Name",
        "description": "\nEntur Client Header.\nIt is required that all consumers identify themselves by using this header.\nEntur will deploy strict rate-limiting policies on API-consumers who do not identify with a header and reserves the right to block unidentified consumers.\nThe structure of ET-Client-Name should be: `<company>-<application>` for companies, and `<personal name>-<application>` for individuals.",
        "schema": {
          "type": "string"
        }
      },
      "X-Correlation-Id": {
        "in": "header",
        "name": "X-Correlation-Id",
        "description": "Correlation id",
        "schema": {
          "type": "string"
        }
      }
    },
    "headers": {
      "digest": {
        "description": "the hash of the body, SHA-256 (\"SHA-256=3q2+7w==:\")",
        "required": false,
        "style": "simple",
        "explode": false,
        "schema": {
          "type": "string"
        }
      },
      "version": {
        "description": "the version used to format the response",
        "required": true,
        "style": "simple",
        "explode": false,
        "schema": {
          "type": "string"
        }
      },
      "publicKey": {
        "description": "the public key of the sending party, can be used to validate the signed digest (it should deliver the digest)",
        "required": false,
        "style": "simple",
        "explode": false,
        "schema": {
          "type": "string"
        },
        "x-example": "{\"certificate\": \"-----BEGIN CERTIFICATE-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnZ5...\\n-----END CERTIFICATE-----\"}"
      },
      "signedDigest": {
        "description": "the signed hash of the offer (or package), using the private key, SHA-256 base64 encoded",
        "required": false,
        "style": "simple",
        "explode": false,
        "schema": {
          "type": "string"
        }
      },
      "contentLanguage": {
        "description": "The language/localization of user-facing content, One IETF BCP 47 (RFC 5646) language tag (nl-NL)",
        "required": true,
        "style": "simple",
        "explode": false,
        "schema": {
          "pattern": "^[a-zA-Z]+-[a-zA-Z]+$",
          "type": "string"
        }
      },
      "enturOrderVersion": {
        "description": "order version from Entur Orders API for the returned package",
        "required": false,
        "style": "simple",
        "explode": false,
        "schema": {
          "minimum": 1,
          "type": "integer"
        }
      }
    },
    "securitySchemes": {
      "OAuth": {
        "type": "oauth2",
        "description": "This flow facilitates to get access tokens based on username/password. These can be obtained by the owner of the service, look at the landing page to find out how to contact it.",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "/",
            "tokenUrl": "/oauth/token",
            "scopes": {
              "processes": "Access to /processes/"
            }
          }
        }
      },
      "OAuthPKI": {
        "type": "oauth2",
        "description": "OAuth 2.0 with PKI and mutual TLS for client authentication The client sends its X.509 during the handshake. The server validates and accepts the certificate. The call to the /oauth/token can use the provided credentials (O or CN) to provide a access_token (JWT).",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "/oauth/token",
            "scopes": {
              "processes": "Access to /processes/"
            }
          }
        }
      },
      "OpenData": {
        "type": "http",
        "description": "this data set is open. If it is one of the options, it is up to the implementing party whether it is open or not.",
        "scheme": "none"
      },
      "BearerAuth": {
        "type": "http",
        "description": "This authentication is the basic one. If you have obtained a JWT (somewhere), you can use this token to identify you at endpoints.",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  }
}